[darwinbuild-changes] [426] branches/PR-6392966/darwinup/Depot.cpp

source_changes at macosforge.org source_changes at macosforge.org
Tue Dec 2 19:32:24 PST 2008


Revision: 426
          http://trac.macosforge.org/projects/darwinbuild/changeset/426
Author:   wsiegrist at apple.com
Date:     2008-12-02 19:32:23 -0800 (Tue, 02 Dec 2008)
Log Message:
-----------
Copy libSystem instead of rename when backing up files to avoid hang due to missing libSystem

Modified Paths:
--------------
    branches/PR-6392966/darwinup/Depot.cpp

Modified: branches/PR-6392966/darwinup/Depot.cpp
===================================================================
--- branches/PR-6392966/darwinup/Depot.cpp	2008-12-02 22:01:46 UTC (rev 425)
+++ branches/PR-6392966/darwinup/Depot.cpp	2008-12-03 03:32:23 UTC (rev 426)
@@ -28,6 +28,7 @@
 #include "Utils.h"
 
 #include <assert.h>
+#include <copyfile.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <libgen.h>
@@ -421,8 +422,17 @@
 		++context->files_modified;
 
 		// XXX: res = file->backup()
-		IF_DEBUG("[backup] rename(%s, %s)\n", file->path(), dstpath);
-		res = rename(file->path(), dstpath);
+
+		// Copy libSystem since it cannot be renamed safely
+		const char* libsystem = "/usr/lib/libSystem.B.dylib";
+		if (strncmp(libsystem, file->path(), strlen(libsystem)) == 0) {
+		  IF_DEBUG("[backup] copyfile(%s, %s)\n", file->path(), dstpath);
+		  res = copyfile(file->path(), dstpath, NULL, COPYFILE_ALL);
+		} else {
+		  IF_DEBUG("[backup] rename(%s, %s)\n", file->path(), dstpath);
+		  res = rename(file->path(), dstpath);
+		}
+
 		if (res != 0) fprintf(stderr, "%s:%d: backup failed: %s: %s (%d)\n", __FILE__, __LINE__, dstpath, strerror(errno), errno);
 		free(dstpath);
 	}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/darwinbuild-changes/attachments/20081202/670e3fda/attachment.html>


More information about the darwinbuild-changes mailing list