diff options
author | Lukas Slebodnik <lslebodn@redhat.com> | 2013-03-08 14:26:42 +0100 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2013-03-13 14:41:33 -0400 |
commit | 22d381367c27910fe82f476a76b9f4ede555e35a (patch) | |
tree | 4c9c2d12bae688e4f94a9864f3069018bf171ca1 /src/tools | |
parent | 8359bf07a2e6c0181251ce8d5d9160dc57546c55 (diff) | |
download | sssd-22d381367c27910fe82f476a76b9f4ede555e35a.tar.gz sssd-22d381367c27910fe82f476a76b9f4ede555e35a.tar.bz2 sssd-22d381367c27910fe82f476a76b9f4ede555e35a.zip |
Reuse sss_open_cloexec at other places in code.
Functions open_cloexec and openat_cloexec were renamed with prefix
"sss_" and moved to separete file. Replacing duplicated code of
function sss_open_cloexec everywhere in the source code.
https://fedorahosted.org/sssd/ticket/1794
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/files.c | 70 |
1 files changed, 4 insertions, 66 deletions
diff --git a/src/tools/files.c b/src/tools/files.c index 57261729..10fd6fe4 100644 --- a/src/tools/files.c +++ b/src/tools/files.c @@ -75,68 +75,6 @@ struct copy_ctx { gid_t gid; }; -static int open_cloexec(const char *pathname, int flags, int *ret) -{ - int fd; - int oflags; - - oflags = flags; -#ifdef O_CLOEXEC - oflags |= O_CLOEXEC; -#endif - - errno = 0; - fd = open(pathname, oflags); - if (fd == -1) { - if (ret) { - *ret = errno; - } - return -1; - } - -#ifndef O_CLOEXEC - int v; - - v = fcntl(fd, F_GETFD, 0); - /* we ignore an error, it's not fatal and there is nothing we - * can do about it anyways */ - (void)fcntl(fd, F_SETFD, v | FD_CLOEXEC); -#endif - - return fd; -} - -static int openat_cloexec(int dir_fd, const char *pathname, int flags, int *ret) -{ - int fd; - int oflags; - - oflags = flags; -#ifdef O_CLOEXEC - oflags |= O_CLOEXEC; -#endif - - errno = 0; - fd = openat(dir_fd, pathname, oflags); - if (fd == -1) { - if (ret) { - *ret = errno; - } - return -1; - } - -#ifndef O_CLOEXEC - int v; - - v = fcntl(fd, F_GETFD, 0); - /* we ignore an error, it's not fatal and there is nothing we - * can do about it anyways */ - (void)fcntl(fd, F_SETFD, v | FD_CLOEXEC); -#endif - - return fd; -} - static int sss_timeat_set(int dir_fd, const char *path, const struct stat *statp, int flags) @@ -232,7 +170,7 @@ static int remove_tree_with_ctx(TALLOC_CTX *mem_ctx, int ret, err; int dir_fd; - dir_fd = openat_cloexec(parent_fd, dir_name, + dir_fd = sss_openat_cloexec(parent_fd, dir_name, O_RDONLY | O_DIRECTORY | O_NOFOLLOW, &ret); if (dir_fd == -1) { ret = errno; @@ -607,7 +545,7 @@ copy_entry(struct copy_ctx *cctx, * us against FIFOs and perhaps side-effects of the open() of a * device file if there ever was one here, and doesn't matter * for regular files or directories. */ - ifd = openat_cloexec(src_dir_fd, ent_name, + ifd = sss_openat_cloexec(src_dir_fd, ent_name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK, &ret); if (ifd == -1 && ret != ELOOP) { /* openat error */ @@ -721,7 +659,7 @@ copy_dir(struct copy_ctx *cctx, goto done; } - dest_dir_fd = openat_cloexec(dest_parent_fd, dest_dir_name, + dest_dir_fd = sss_openat_cloexec(dest_parent_fd, dest_dir_name, O_RDONLY | O_DIRECTORY | O_NOFOLLOW, &ret); if (dest_dir_fd == -1) { ret = errno; @@ -807,7 +745,7 @@ int copy_tree(const char *src_root, const char *dst_root, int fd = -1; struct stat s_src; - fd = open_cloexec(src_root, O_RDONLY | O_DIRECTORY, &ret); + fd = sss_open_cloexec(src_root, O_RDONLY | O_DIRECTORY, &ret); if (fd == -1) { goto fail; } |