summaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
authorLukas Slebodnik <lslebodn@redhat.com>2013-03-08 14:26:42 +0100
committerSimo Sorce <simo@redhat.com>2013-03-13 14:41:33 -0400
commit22d381367c27910fe82f476a76b9f4ede555e35a (patch)
tree4c9c2d12bae688e4f94a9864f3069018bf171ca1 /src/tools
parent8359bf07a2e6c0181251ce8d5d9160dc57546c55 (diff)
downloadsssd-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.c70
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;
}