summaryrefslogtreecommitdiff
path: root/file_io/unix
diff options
context:
space:
mode:
authorYann Ylavic <ylavic@apache.org>2017-09-26 15:37:42 +0000
committerYann Ylavic <ylavic@apache.org>2017-09-26 15:37:42 +0000
commitbe54c896ada61fda68a667f59ef6dea525325c00 (patch)
tree891f626d91f5fd5fd6114cd7a55b6b94d49f3f81 /file_io/unix
parent3798d89de0766389acf500f7f3f011a933c65214 (diff)
downloadapr-be54c896ada61fda68a667f59ef6dea525325c00.tar.gz
pipe: factorize apr_file_pipe_create*() in terms of static helper
file_pipe_create(), to avoid duplicated code. git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1809757 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'file_io/unix')
-rw-r--r--file_io/unix/pipe.c43
1 files changed, 16 insertions, 27 deletions
diff --git a/file_io/unix/pipe.c b/file_io/unix/pipe.c
index 7be16e5d0..b68ac6542 100644
--- a/file_io/unix/pipe.c
+++ b/file_io/unix/pipe.c
@@ -176,8 +176,11 @@ APR_DECLARE(apr_status_t) apr_os_pipe_put(apr_file_t **file,
return apr_os_pipe_put_ex(file, thefile, 0, pool);
}
-static apr_status_t file_pipe_create(apr_file_t **in, apr_file_t **out,
- apr_pool_t *pool_in, apr_pool_t *pool_out)
+static apr_status_t file_pipe_create(apr_file_t **in,
+ apr_file_t **out,
+ apr_int32_t blocking,
+ apr_pool_t *pool_in,
+ apr_pool_t *pool_out)
{
int filedes[2];
@@ -220,11 +223,7 @@ static apr_status_t file_pipe_create(apr_file_t **in, apr_file_t **out,
apr_pool_cleanup_null);
apr_pool_cleanup_register((*out)->pool, (void *)(*out), apr_unix_file_cleanup,
apr_pool_cleanup_null);
- return APR_SUCCESS;
-}
-static void file_pipe_block(apr_file_t **in, apr_file_t **out, apr_int32_t blocking)
-{
switch (blocking) {
case APR_FULL_BLOCK:
break;
@@ -239,12 +238,15 @@ static void file_pipe_block(apr_file_t **in, apr_file_t **out, apr_int32_t block
apr_file_pipe_timeout_set(*in, 0);
break;
}
+ return APR_SUCCESS;
}
APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in,
- apr_file_t **out, apr_pool_t *pool)
+ apr_file_t **out,
+ apr_pool_t *pool)
{
- return file_pipe_create(in, out, pool, pool);
+ /* Default is full blocking pipes. */
+ return file_pipe_create(in, out, APR_FULL_BLOCK, pool, pool);
}
APR_DECLARE(apr_status_t) apr_file_pipe_create_ex(apr_file_t **in,
@@ -252,29 +254,16 @@ APR_DECLARE(apr_status_t) apr_file_pipe_create_ex(apr_file_t **in,
apr_int32_t blocking,
apr_pool_t *pool)
{
- apr_status_t status;
-
- if ((status = file_pipe_create(in, out, pool, pool)) != APR_SUCCESS) {
- return status;
- }
-
- file_pipe_block(in, out, blocking);
-
- return APR_SUCCESS;
+ return file_pipe_create(in, out, blocking, pool, pool);
}
APR_DECLARE(apr_status_t) apr_file_pipe_create_pools(apr_file_t **in,
- apr_file_t **out, apr_int32_t blocking, apr_pool_t *pool_in, apr_pool_t *pool_out)
+ apr_file_t **out,
+ apr_int32_t blocking,
+ apr_pool_t *pool_in,
+ apr_pool_t *pool_out)
{
- apr_status_t status;
-
- if ((status = file_pipe_create(in, out, pool_in, pool_out)) != APR_SUCCESS) {
- return status;
- }
-
- file_pipe_block(in, out, blocking);
-
- return APR_SUCCESS;
+ return file_pipe_create(in, out, blocking, pool_in, pool_out);
}
APR_DECLARE(apr_status_t) apr_file_namedpipe_create(const char *filename,