git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Use sha1_file.c's mkdir-like routine in apply.c.
@ 2006-02-04  6:50 Jason Riedy
  0 siblings, 0 replies; only message in thread
From: Jason Riedy @ 2006-02-04  6:50 UTC (permalink / raw)
  To: git

As far as I can see, create_subdirectories() in apply.c just
duplicates the functionality of safe_create_leading_directories() from
sha1_file.c.  The former has a warm, fuzzy const parameter, but that's
not important.

The potential problem with EEXIST and creating directories should
never occur here, but will be removed by future
safe_create_leading_directories() changes.  Other uses of EEXIST in
apply.c should be fine barring intentionally malicious behavior.

Signed-off-by: Jason Riedy <ejr@cs.berkeley.edu>

---

 apply.c |   25 ++++---------------------
 1 files changed, 4 insertions(+), 21 deletions(-)

9f6bc2c90544688c2aad0ad0da4b2674f5aa6fab
diff --git a/apply.c b/apply.c
index 79e23a7..2ad47fb 100644
--- a/apply.c
+++ b/apply.c
@@ -1564,24 +1564,6 @@ static void add_index_file(const char *p
 		die("unable to add cache entry for %s", path);
 }
 
-static void create_subdirectories(const char *path)
-{
-	int len = strlen(path);
-	char *buf = xmalloc(len + 1);
-	const char *slash = path;
-
-	while ((slash = strchr(slash+1, '/')) != NULL) {
-		len = slash - path;
-		memcpy(buf, path, len);
-		buf[len] = 0;
-		if (mkdir(buf, 0777) < 0) {
-			if (errno != EEXIST)
-				break;
-		}
-	}
-	free(buf);
-}
-
 static int try_create_file(const char *path, unsigned int mode, const char *buf, unsigned long size)
 {
 	int fd;
@@ -1610,13 +1592,14 @@ static int try_create_file(const char *p
  * which is true 99% of the time anyway. If they don't,
  * we create them and try again.
  */
-static void create_one_file(const char *path, unsigned mode, const char *buf, unsigned long size)
+static void create_one_file(char *path, unsigned mode, const char *buf, unsigned long size)
 {
 	if (!try_create_file(path, mode, buf, size))
 		return;
 
 	if (errno == ENOENT) {
-		create_subdirectories(path);
+		if (safe_create_leading_directories(path))
+			return;
 		if (!try_create_file(path, mode, buf, size))
 			return;
 	}
@@ -1643,7 +1626,7 @@ static void create_one_file(const char *
 
 static void create_file(struct patch *patch)
 {
-	const char *path = patch->new_name;
+	char *path = patch->new_name;
 	unsigned mode = patch->new_mode;
 	unsigned long size = patch->resultsize;
 	char *buf = patch->result;
-- 
1.1.5

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2006-02-04  6:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-04  6:50 [PATCH] Use sha1_file.c's mkdir-like routine in apply.c Jason Riedy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).