[darwinbuild-changes] [1035] branches/PR-11283366/darwinup
source_changes at macosforge.org
source_changes at macosforge.org
Thu May 17 15:56:27 PDT 2012
Revision: 1035
http://trac.macosforge.org/projects/darwinbuild/changeset/1035
Author: mww at apple.com
Date: 2012-05-17 15:56:27 -0700 (Thu, 17 May 2012)
Log Message:
-----------
More general XPC service cache path.
Modified Paths:
--------------
branches/PR-11283366/darwinup/Utils.cpp
branches/PR-11283366/darwinup/Utils.h
branches/PR-11283366/darwinup/main.cpp
Modified: branches/PR-11283366/darwinup/Utils.cpp
===================================================================
--- branches/PR-11283366/darwinup/Utils.cpp 2012-05-17 22:56:22 UTC (rev 1034)
+++ branches/PR-11283366/darwinup/Utils.cpp 2012-05-17 22:56:27 UTC (rev 1035)
@@ -371,38 +371,60 @@
res = find_base_system_path(&base, path);
if (res) return res;
- // xpchelper expects the --root value to *not* end in a slash.
- if (has_suffix(base, "/")) {
- char *ptr = strrchr(base, '/');
- if (ptr) {
- *ptr = '\0';
- }
- }
-
- if (verbosity) {
- fprintf(stdout, "Updating xpc services cache for %s ...", base);
- fflush(stdout);
- }
-
char* toolpath;
join_path(&toolpath, base, "/usr/libexec/xpchelper");
struct stat sb;
res = stat(toolpath, &sb);
- if (res) {
- return 1;
- }
+ if (res || ((sb.st_mode & S_IXUSR) == 0)) {
+ // no xpchelper
+ char* cachedir;
+ join_path(&cachedir, base, "/System/Library/Caches/com.apple.xpcd");
- const char* args[] = {
- toolpath,
- "--rebuild-cache",
- "--root", base,
- NULL
- };
- res = exec_with_args(args);
+ res = mkdir_p(cachedir);
+ if (!res || errno == EEXIST) {
+ char* cachepath;
+ join_path(&cachepath, cachedir, "xpcd_cache.dylib");
- if (verbosity) fprintf(stdout, "Done updating xpc cache\n");
+ res = open(cachepath, O_APPEND | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (res >= 0) {
+ close(res);
+ } else {
+ fprintf(stderr, "Error: (%d) failed to touch cache file.\n", errno);
+ res = errno;
+ }
+ free(cachepath);
+ } else {
+ res = errno;
+ fprintf(stderr, "Error: (%d) failed to mkdir_p cache directory.\n", res);
+ }
+ if (verbosity) fprintf(stdout, "Touched xpc cache file.\n");
+ free(cachedir);
+ } else {
+ // xpchelper expects the --root value to *not* end in a slash.
+ if (has_suffix(base, "/")) {
+ char *ptr = strrchr(base, '/');
+ if (ptr) {
+ *ptr = '\0';
+ }
+ }
+ if (verbosity) {
+ fprintf(stdout, "Updating xpc services cache for %s ...", base);
+ fflush(stdout);
+ }
+
+ const char* args[] = {
+ toolpath,
+ "--rebuild-cache",
+ "--root", base,
+ NULL
+ };
+ res = exec_with_args(args);
+
+ if (verbosity) fprintf(stdout, "Done updating xpc cache\n");
+ }
+
free(toolpath);
free(base);
return res;
Modified: branches/PR-11283366/darwinup/Utils.h
===================================================================
--- branches/PR-11283366/darwinup/Utils.h 2012-05-17 22:56:22 UTC (rev 1034)
+++ branches/PR-11283366/darwinup/Utils.h 2012-05-17 22:56:27 UTC (rev 1035)
@@ -41,6 +41,7 @@
#include <stdio.h>
#include <assert.h>
#include <errno.h>
+#include <fcntl.h>
#include <libgen.h>
#include <limits.h>
#include <stdlib.h>
Modified: branches/PR-11283366/darwinup/main.cpp
===================================================================
--- branches/PR-11283366/darwinup/main.cpp 2012-05-17 22:56:22 UTC (rev 1034)
+++ branches/PR-11283366/darwinup/main.cpp 2012-05-17 22:56:27 UTC (rev 1035)
@@ -107,8 +107,8 @@
int main(int argc, char* argv[]) {
char* progname = strdup(basename(argv[0]));
char* path = NULL;
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
bool disable_automation = false;
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
bool restart = false;
#endif
@@ -119,19 +119,15 @@
while ((ch = getopt(argc, argv, "fnp:vh")) != -1) {
#endif
switch (ch) {
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
case 'd':
disable_automation = true;
break;
-#endif
case 'f':
force = 1;
break;
case 'n':
dryrun = 1;
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
disable_automation = true;
-#endif
break;
case 'p':
if (optarg[0] != '/') {
@@ -167,8 +163,8 @@
if (dryrun) IF_DEBUG("option: dry run\n");
if (force) IF_DEBUG("option: forcing operations\n");
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
if (disable_automation) IF_DEBUG("option: helpful automation disabled\n");
+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
if (restart) IF_DEBUG("option: restart when finished\n");
#endif
@@ -282,13 +278,11 @@
free(sle_path);
}
#endif
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
if (!disable_automation && depot->has_modified_xpc_services() && res == 0) {
res = update_xpc_services_cache(path);
if (res) fprintf(stderr, "Warning: could not update xpc services cache.\n");
res = 0;
}
-#endif
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
if (restart && res == 0) {
res = tell_finder_to_restart();
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20120517/e624e622/attachment-0001.html>
More information about the darwinbuild-changes
mailing list