[darwinbuild-changes] [637] branches/PR-7250612/darwinup
source_changes at macosforge.org
source_changes at macosforge.org
Wed Nov 11 15:44:52 PST 2009
Revision: 637
http://trac.macosforge.org/projects/darwinbuild/changeset/637
Author: wsiegrist at apple.com
Date: 2009-11-11 15:44:51 -0800 (Wed, 11 Nov 2009)
Log Message:
-----------
Ensure -p option is an absolute path. Ignore EEXIST when making directories during install since we use copyfile() instead of rename() now. Uninstall root when install fails so we leave the system in a consistent state.
Modified Paths:
--------------
branches/PR-7250612/darwinup/File.cpp
branches/PR-7250612/darwinup/main.cpp
Modified: branches/PR-7250612/darwinup/File.cpp
===================================================================
--- branches/PR-7250612/darwinup/File.cpp 2009-11-11 23:43:07 UTC (rev 636)
+++ branches/PR-7250612/darwinup/File.cpp 2009-11-11 23:44:51 UTC (rev 637)
@@ -296,6 +296,7 @@
IF_DEBUG("[install] mkdir(%s, %04o)\n", dstpath, mode);
if (res == 0) res = mkdir(dstpath, mode);
+ if (res && errno == EEXIST) res = 0;
if (res != 0) fprintf(stderr, "ERROR: %s:%d: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno);
if (res == 0) res = chown(dstpath, uid, gid);
if (res != 0) fprintf(stderr, "ERROR: %s:%d: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno);
Modified: branches/PR-7250612/darwinup/main.cpp
===================================================================
--- branches/PR-7250612/darwinup/main.cpp 2009-11-11 23:43:07 UTC (rev 636)
+++ branches/PR-7250612/darwinup/main.cpp 2009-11-11 23:44:51 UTC (rev 637)
@@ -64,10 +64,14 @@
verbosity |= VERBOSE;
break;
case 'p':
- if (strlen(optarg) > (PATH_MAX - 1)) {
- fprintf(stderr, "Error: -p option value is too long \n");
- exit(3);
- }
+ if (optarg[0] != '/') {
+ fprintf(stderr, "Error: -p option must be an absolute path\n");
+ exit(4);
+ }
+ if (strlen(optarg) > (PATH_MAX - 1)) {
+ fprintf(stderr, "Error: -p option value is too long \n");
+ exit(4);
+ }
join_path(&path, optarg, "/");
break;
case '?':
@@ -101,7 +105,14 @@
uuid_unparse_upper(archive->uuid(), uuid);
fprintf(stdout, "%s\n", uuid);
} else {
- fprintf(stderr, "An error occurred.\n");
+ fprintf(stderr, "Error: Install failed. Rolling back installation.\n");
+ res = depot->uninstall(archive);
+ if (res) {
+ fprintf(stderr, "Error: Unable to rollback installation. "
+ "Your system is in an inconsistent state! File a bug!\n");
+ } else {
+ fprintf(stderr, "Rollback successful.\n");
+ }
res = 1;
}
} else {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20091111/ccf78c3d/attachment.html>
More information about the darwinbuild-changes
mailing list