X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=fd.c;h=0065887d374a4ddba4f2d7a6d4b07aa094c22f1a;hp=e5aa59f59382967ffd9c54e7c7a4199246bde1f1;hb=09156a37fad2aa874b4f71b993bafa8902a8bad2;hpb=fbfc694f85103a86c18469c6fdd2f4f03c812337 diff --git a/fd.c b/fd.c index e5aa59f5..0065887d 100644 --- a/fd.c +++ b/fd.c @@ -29,21 +29,22 @@ int file_exists(const char *fn) } /** - * paraslash's wrapper for select(2) + * Paraslash's wrapper for select(2). * * It calls select(2) (with no exceptfds) and starts over if select() was * interrupted by a signal. * - * \param n the highest-numbered descriptor in any of the two sets, plus 1 - * \param readfds fds that should be checked for readability - * \param writefds fds that should be checked for writablility + * \param n The highest-numbered descriptor in any of the two sets, plus 1. + * \param readfds fds that should be checked for readability. + * \param writefds fds that should be checked for writablility. * \param timeout_tv upper bound on the amount of time elapsed before select() - * returns + * returns. * - * \return The return value of the underlying select() call. + * \return The return value of the underlying select() call on success, the + * negative system error code on errors. * * All arguments are passed verbatim to select(2). - * \sa select(2) select_tut(2) + * \sa select(2) select_tut(2). */ int para_select(int n, fd_set *readfds, fd_set *writefds, struct timeval *timeout_tv) @@ -54,25 +55,25 @@ int para_select(int n, fd_set *readfds, fd_set *writefds, err = errno; } while (ret < 0 && err == EINTR); if (ret < 0) - PARA_CRIT_LOG("select error: %s, max_fileno: %d\n", - strerror(err), n); + return -ERRNO_TO_PARA_ERROR(errno); return ret; } /** - * set a file descriptor to non-blocking mode + * Set a file descriptor to non-blocking mode. * - * \param fd The file descriptor + * \param fd The file descriptor. * - * \returns 1 on success, -E_F_GETFL, -E_F_SETFL, on errors. + * \return Standard. */ int mark_fd_nonblock(int fd) { int flags = fcntl(fd, F_GETFL); if (flags < 0) - return -E_F_GETFL; - if (fcntl(fd, F_SETFL, ((long)flags) | O_NONBLOCK) < 0) - return -E_F_SETFL; + return -ERRNO_TO_PARA_ERROR(errno); + flags = fcntl(fd, F_SETFL, ((long)flags) | O_NONBLOCK); + if (flags < 0) + return -ERRNO_TO_PARA_ERROR(errno); return 1; } @@ -169,7 +170,7 @@ void *para_mmap(size_t length, int prot, int flags, int fd, off_t offset) * The mode parameter must be specified when O_CREAT is in the flags, and is ignored * otherwise. * - * \return Positive on success, negative on errors. + * \return The file descriptor on success, negative on errors. * * \sa open(2). */ @@ -179,22 +180,7 @@ int para_open(const char *path, int flags, mode_t mode) if (ret >= 0) return ret; - switch (errno) { - case EEXIST: - ret = -E_EXIST; - break; - case EISDIR: - ret = -E_ISDIR; - break; - case ENOENT: - ret = -E_NOENT; - break; - case EPERM: - ret = -E_OPEN_PERM; - break; - }; - PARA_ERROR_LOG("failed to open %s: %s\n", path, strerror(errno)); - return -E_OPEN; + return -ERRNO_TO_PARA_ERROR(errno); } /** @@ -210,13 +196,7 @@ int para_chdir(const char *path) if (ret >= 0) return 1; - switch (errno) { - case ENOENT: - return -E_NOENT; - case EACCES: - return -E_CHDIR_PERM; - }; - return -E_CHDIR; + return -ERRNO_TO_PARA_ERROR(errno); } /** @@ -256,11 +236,10 @@ int para_opendir(const char *dirname, DIR **dir, int *cwd) ret = para_chdir(dirname); if (ret < 0) goto close_cwd; - ret = -E_OPENDIR; *dir = opendir("."); - if (!*dir) - goto change_to_orig_dir; - return 1; + if (*dir) + return 1; + ret = -ERRNO_TO_PARA_ERROR(errno); /* Ignore return value of fchdir() and close(). We're busted anyway. */ change_to_orig_dir: if (cwd) @@ -291,19 +270,11 @@ int para_fchdir(int fd) * \param path Name of the directory to create. * \param mode The permissions to use. * - * \return positive on success, negative on errors. + * \return Standard. */ int para_mkdir(const char *path, mode_t mode) { if (!mkdir(path, mode)) return 1; - if (errno == EEXIST) - return -E_EXIST; - if (errno == ENOSPC) - return -E_NOSPC; - if (errno == ENOTDIR) - return -E_NOTDIR; - if (errno == EPERM) - return -E_MKDIR_PERM; - return -E_MKDIR; + return -ERRNO_TO_PARA_ERROR(errno); }