From 09a864980da1eb9f1df5be566efffdd41154ddbb Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Mon, 1 Oct 2007 23:30:33 +0200 Subject: [PATCH 1/1] fd.c: Introduce para_chdir(). Also, fix a bug in para_open() which would return -1 instead of a proper error code. --- fd.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) 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("."); -- 2.39.2