diff options
author | Richard Jones <rjones@redhat.com> | 2009-11-27 14:14:21 +0000 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2009-12-07 11:13:11 +0000 |
commit | 4b4e0d0d07bd34f4368c6a213ff757d4ebf98411 (patch) | |
tree | aaaf00c0eb5ead4a4f069f2d2e4da95027791e75 /daemon/dir.c | |
parent | 50c239c045675c7480d88bf10857f3e85c3385d3 (diff) | |
download | libguestfs-4b4e0d0d07bd34f4368c6a213ff757d4ebf98411.tar.gz libguestfs-4b4e0d0d07bd34f4368c6a213ff757d4ebf98411.tar.xz libguestfs-4b4e0d0d07bd34f4368c6a213ff757d4ebf98411.zip |
daemon error handling: recursive_mkdir shouldn't need to set errno.
Diffstat (limited to 'daemon/dir.c')
-rw-r--r-- | daemon/dir.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/daemon/dir.c b/daemon/dir.c index a5076b19..300bb4ce 100644 --- a/daemon/dir.c +++ b/daemon/dir.c @@ -116,6 +116,11 @@ do_mkdir_mode (const char *path, int mode) return 0; } +/* Returns: + * 0 if everything was OK, + * -1 for a general error (sets errno), + * -2 if an existing path element was not a directory. + */ static int recursive_mkdir (const char *path) { @@ -130,10 +135,7 @@ recursive_mkdir (const char *path) if (errno == EEXIST) { /* Something exists here, might not be a dir. */ r = lstat (path, &buf); if (r == -1) return -1; - if (!S_ISDIR (buf.st_mode)) { - errno = ENOTDIR; - return -1; - } + if (!S_ISDIR (buf.st_mode)) return -2; return 0; /* OK - directory exists here already. */ } @@ -153,7 +155,7 @@ recursive_mkdir (const char *path) r = recursive_mkdir (ppath); free (ppath); - if (r == -1) return -1; + if (r != 0) return r; goto again; } else /* Failed for some other reason, so return error. */ @@ -175,6 +177,10 @@ do_mkdir_p (const char *path) reply_with_perror ("mkdir -p: %s", path); return -1; } + if (r == -2) { + reply_with_error ("mkdir -p: %s: a path element was not a directory", path); + return -1; + } return 0; } |