X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=fd.c;h=0dc3f2971656db4d497b8f28516270ff361c9679;hb=637cfe16018ba745d2d1e2756e999335e37dbf3d;hp=920bce9cf49a132a868c1983f990cd7fd124748a;hpb=e7fdbaf015655af4eec7e4655b9306e1db862a40;p=osl.git diff --git a/fd.c b/fd.c index 920bce9..0dc3f29 100644 --- a/fd.c +++ b/fd.c @@ -15,6 +15,7 @@ #include "log.h" #include "osl.h" #include "error.h" +#include "fd.h" /** * Wrapper for the write system call. @@ -117,86 +118,6 @@ out: return ret; } -/** - * Wrapper for chdir(2). - * - * \param path The specified directory. - * - * \return Standard. - */ -static int para_chdir(const char *path) -{ - int ret = chdir(path); - - if (ret >= 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 = para_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; -} - -/** - * A wrapper for fchdir(). - * - * \param fd An open file descriptor. - * - * \return Standard. - */ -int para_fchdir(int fd) -{ - if (fchdir(fd) < 0) - return -ERRNO_TO_ERROR(errno); - return 1; -} - /** * Open a file and map it into memory. * @@ -334,22 +255,18 @@ __must_check __printf_1_2 __malloc char *make_message(const char *fmt, ...) * * \sa truncate(2) */ -int para_truncate(const char *path, off_t size) +int truncate_file(const char *path, off_t size) { int ret; struct stat statbuf; - ret = -E_OSL_STAT; - if (stat(path, &statbuf) < 0) - goto out; + ret = osl_stat(path, &statbuf); + if (ret < 0) + return ret; ret = -E_OSL_BAD_SIZE; if (statbuf.st_size < size) - goto out; - ret = -E_OSL_TRUNC; + return ret; if (truncate(path, statbuf.st_size - size) < 0) - goto out; - ret = 1; -out: - return ret; + return -ERRNO_TO_ERROR(errno); + return 1; } -