aboutsummaryrefslogtreecommitdiff
path: root/runcap.c
diff options
context:
space:
mode:
Diffstat (limited to 'runcap.c')
-rw-r--r--runcap.c45
1 files changed, 17 insertions, 28 deletions
diff --git a/runcap.c b/runcap.c
index f1e9410..26654f8 100644
--- a/runcap.c
+++ b/runcap.c
@@ -26,9 +26,14 @@
#include "runcap.h"
-static int
-stream_capture_alloc(struct stream_capture *cap, size_t size)
+int
+stream_capture_init(struct stream_capture *cap, size_t size)
{
+ if (!cap) {
+ errno = EINVAL;
+ return -1;
+ }
+
if (size) {
cap->sc_base = malloc(size);
if (!cap->sc_base)
@@ -45,20 +50,6 @@ stream_capture_alloc(struct stream_capture *cap, size_t size)
return 0;
}
-int
-stream_capture_init(struct stream_capture *cap, size_t size)
-{
- if (!cap) {
- errno = EINVAL;
- return -1;
- }
-
- if (stream_capture_alloc(cap, size))
- return -1;
-
- return 0;
-}
-
static void
stream_capture_reset(struct stream_capture *cap)
{
@@ -434,6 +425,7 @@ runcap_init(struct runcap *rc, int flags)
rc->rc_program = NULL;
if (!(flags & RCF_TIMEOUT))
rc->rc_timeout = 0;
+
if (flags & RCF_STDIN) {
if (rc->rc_cap[RUNCAP_STDIN].sc_size > 0
&& rc->rc_cap[RUNCAP_STDIN].sc_fd != -1) {
@@ -443,15 +435,14 @@ runcap_init(struct runcap *rc, int flags)
rc->rc_cap[RUNCAP_STDIN].sc_level =
rc->rc_cap[RUNCAP_STDIN].sc_size;
rc->rc_cap[RUNCAP_STDIN].sc_cur = 0;
+ rc->rc_cap[RUNCAP_STDIN].sc_storfd = -1;
} else if (stream_capture_init(&rc->rc_cap[RUNCAP_STDIN], 0))
return -1;
- if (flags & RCF_STDOUT_SIZE)
- res = stream_capture_alloc(&rc->rc_cap[RUNCAP_STDOUT],
- rc->rc_cap[RUNCAP_STDOUT].sc_size);
- else
- res = stream_capture_init(&rc->rc_cap[RUNCAP_STDOUT],
- STRCAP_BUFSIZE);
+ res = stream_capture_init(&rc->rc_cap[RUNCAP_STDOUT],
+ (flags & RCF_STDOUT_SIZE)
+ ? rc->rc_cap[RUNCAP_STDOUT].sc_size
+ : STRCAP_BUFSIZE);
if (res)
return res;
@@ -460,12 +451,10 @@ runcap_init(struct runcap *rc, int flags)
rc->rc_cap[RUNCAP_STDOUT].sc_monarg = NULL;
}
- if (flags & RCF_STDERR_SIZE)
- res = stream_capture_alloc(&rc->rc_cap[RUNCAP_STDERR],
- rc->rc_cap[RUNCAP_STDERR].sc_size);
- else
- res = stream_capture_init(&rc->rc_cap[RUNCAP_STDERR],
- STRCAP_BUFSIZE);
+ res = stream_capture_init(&rc->rc_cap[RUNCAP_STDERR],
+ (flags & RCF_STDERR_SIZE)
+ ? rc->rc_cap[RUNCAP_STDERR].sc_size
+ : STRCAP_BUFSIZE);
if (res)
return res;

Return to:

Send suggestions and report system problems to the System administrator.