Also, fix a bug in para_open() which would return -1 instead of
a proper error code.
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;
}
/**
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(".");