X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=fd.c;h=0dc3f2971656db4d497b8f28516270ff361c9679;hb=e7cfbde4fc1a29fa5edad3a526802d8281acfa10;hp=17d56651a087bfe32c00d124eeb95d57458263dd;hpb=a00170132c28eeea61033d820c22e8d48d35a0fd;p=osl.git diff --git a/fd.c b/fd.c index 17d5665..0dc3f29 100644 --- a/fd.c +++ b/fd.c @@ -118,70 +118,6 @@ out: return ret; } -/** - * Wrapper for chdir(2). - * - * \param path The specified directory. - * - * \return Standard. - */ -_static_inline_ int __chdir(const char *path) -{ - if (chdir(path) >= 0) - return 1; - return -ERRNO_TO_ERROR(errno); -} - -/** - * Save the cwd and open a given directory. - * - * \param dirname Path to the directory to open. - * \param dir Result pointer. - * \param cwd File descriptor of the current working directory. - * - * \return Standard. - * - * Opening the current directory (".") and calling fchdir() to return is - * usually faster and more reliable than saving cwd in some buffer and calling - * chdir() afterwards. - * - * If \a cwd is not \p NULL "." is opened and the resulting file descriptor is - * stored in \a cwd. If the function returns success, and \a cwd is not \p - * NULL, the caller must close this file descriptor (probably after calling - * fchdir(*cwd)). - * - * On errors, the function undos everything, so the caller needs neither close - * any files, nor change back to the original working directory. - * - * \sa getcwd(3). - * - */ -int para_opendir(const char *dirname, DIR **dir, int *cwd) -{ - int ret; - - if (cwd) { - ret = osl_open(".", O_RDONLY, 0); - if (ret < 0) - return ret; - *cwd = ret; - } - ret = __chdir(dirname); - if (ret < 0) - goto close_cwd; - *dir = opendir("."); - if (*dir) - return 1; - ret = -ERRNO_TO_ERROR(errno); -/* Ignore return value of fchdir() and close(). We're busted anyway. */ - if (cwd) - fchdir(*cwd); -close_cwd: - if (cwd) - close(*cwd); - return ret; -} - /** * Open a file and map it into memory. *