summaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2014-10-21 12:29:55 +0200
committerJakub Hrozek <jhrozek@redhat.com>2014-11-05 20:16:20 +0100
commit093ac8b41e4baefd2c1102fb897367318de12fb3 (patch)
tree18395b2c03a1bbc8493a4a40b2ebcb7ac593d075 /src/util
parent954637494fc8453f71e2b5d93b3d1ea97e31d646 (diff)
downloadsssd-093ac8b41e4baefd2c1102fb897367318de12fb3.tar.gz
sssd-093ac8b41e4baefd2c1102fb897367318de12fb3.tar.xz
sssd-093ac8b41e4baefd2c1102fb897367318de12fb3.zip
UTIL: Remove code duplication of struct io
We had struct io and the associated destructor copied twice in the code already and need it again in the SELinux provider. Instead of adding another copy, move the code to a shared subtree under util/ Reviewed-by: Michal Židek <mzidek@redhat.com>
Diffstat (limited to 'src/util')
-rw-r--r--src/util/child_common.c29
-rw-r--r--src/util/child_common.h7
2 files changed, 36 insertions, 0 deletions
diff --git a/src/util/child_common.c b/src/util/child_common.c
index 81bbab70e..e4a885b6e 100644
--- a/src/util/child_common.c
+++ b/src/util/child_common.c
@@ -772,3 +772,32 @@ void child_cleanup(int readfd, int writefd)
}
}
}
+
+int child_io_destructor(void *ptr)
+{
+ int ret;
+ struct child_io_fds *io = talloc_get_type(ptr, struct child_io_fds);
+ if (io == NULL) return EOK;
+
+ if (io->write_to_child_fd != -1) {
+ ret = close(io->write_to_child_fd);
+ io->write_to_child_fd = -1;
+ if (ret != EOK) {
+ ret = errno;
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "close failed [%d][%s].\n", ret, strerror(ret));
+ }
+ }
+
+ if (io->read_from_child_fd != -1) {
+ ret = close(io->read_from_child_fd);
+ io->read_from_child_fd = -1;
+ if (ret != EOK) {
+ ret = errno;
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "close failed [%d][%s].\n", ret, strerror(ret));
+ }
+ }
+
+ return EOK;
+}
diff --git a/src/util/child_common.h b/src/util/child_common.h
index 95865bb52..261da7f9c 100644
--- a/src/util/child_common.h
+++ b/src/util/child_common.h
@@ -45,6 +45,11 @@ struct io_buffer {
size_t size;
};
+struct child_io_fds {
+ int read_from_child_fd;
+ int write_to_child_fd;
+};
+
/* COMMON SIGCHLD HANDLING */
typedef void (*sss_child_fn_t)(int pid, int wait_status, void *pvt);
@@ -113,4 +118,6 @@ errno_t exec_child(TALLOC_CTX *mem_ctx,
void child_cleanup(int readfd, int writefd);
+int child_io_destructor(void *ptr);
+
#endif /* __CHILD_COMMON_H__ */