From: Andre Noll Date: Mon, 1 Oct 2007 21:30:33 +0000 (+0200) Subject: fd.c: Introduce para_chdir(). X-Git-Tag: v0.3.0~317^2~4 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=09a864980da1eb9f1df5be566efffdd41154ddbb fd.c: Introduce para_chdir(). Also, fix a bug in para_open() which would return -1 instead of a proper error code. --- diff --git a/fd.c b/fd.c index 398bf2ce..e5aa59f5 100644 --- a/fd.c +++ b/fd.c @@ -194,7 +194,29 @@ int para_open(const char *path, int flags, mode_t mode) break; }; PARA_ERROR_LOG("failed to open %s: %s\n", path, strerror(errno)); - return ret; + return -E_OPEN; +} + +/** + * Wrapper for chdir(2). + * + * \param path the specified directory. + * + * \return Positive on success, negative on errors. + */ +int para_chdir(const char *path) +{ + int ret = chdir(path); + + if (ret >= 0) + return 1; + switch (errno) { + case ENOENT: + return -E_NOENT; + case EACCES: + return -E_CHDIR_PERM; + }; + return -E_CHDIR; } /** @@ -231,8 +253,8 @@ int para_opendir(const char *dirname, DIR **dir, int *cwd) return ret; *cwd = ret; } - ret = -E_CHDIR; - if (chdir(dirname) < 0) + ret = para_chdir(dirname); + if (ret < 0) goto close_cwd; ret = -E_OPENDIR; *dir = opendir(".");