aboutsummaryrefslogtreecommitdiff
path: root/capture.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2017-07-20 17:34:03 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2017-07-20 18:22:16 +0300
commit7f26449a38b4a491880d05ea36a10e1cfd111808 (patch)
treefdf338b02ef535ea6b0bef6edd6187f9e6097ae6 /capture.c
downloadposixruncapture-7f26449a38b4a491880d05ea36a10e1cfd111808.tar.gz
posixruncapture-7f26449a38b4a491880d05ea36a10e1cfd111808.tar.bz2
Initial commit
Diffstat (limited to 'capture.c')
-rw-r--r--capture.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/capture.c b/capture.c
new file mode 100644
index 0000000..11fbc17
--- /dev/null
+++ b/capture.c
@@ -0,0 +1,86 @@
+#include "capture.h"
+#include <stdlib.h>
+
+struct runcap *
+capture_new(AV *av)
+{
+ struct runcap *rc;
+ I32 i, n;
+ char **argv;
+
+ rc = malloc(sizeof *rc);
+ if (!rc)
+ goto nomem;
+ memset(rc, 0, sizeof *rc);
+ n = av_len(av);
+ if (n == -1)
+ return rc;
+ argv = calloc(n + 2, sizeof *argv);
+ if (!argv)
+ goto nomem;
+ for (i = 0; i <= n; i++) {
+ SV *sv, **psv = av_fetch(av, i, 0);
+ if (!psv)
+ croak("element %d doesn't exist", i);
+ sv = *psv;
+ if (SvTYPE(sv) == SVt_PV) {
+ char *s = SvPV_nolen(sv);
+ if ((argv[i] = strdup(s)) == NULL)
+ goto nomem;
+ }
+ }
+ argv[i] = NULL;
+
+ rc->rc_argv = argv;
+
+ return rc;
+ nomem:
+ return NULL;
+}
+
+void
+capture_DESTROY(struct runcap *rc)
+{
+// printf("DESTROY\n");
+ if (rc->rc_argv) {
+ size_t i;
+ for (i = 0; rc->rc_argv[i]; i++) {
+ free(rc->rc_argv[i]);
+ }
+ free(rc->rc_argv);
+ }
+ runcap_free(rc);
+ free(rc);
+}
+
+char *
+capture_next_line(struct runcap *rc, int fd)
+{
+ char *buf = NULL;
+ size_t sz = 0;
+ ssize_t n;
+
+ if (fd != RUNCAP_STDOUT && fd != RUNCAP_STDERR) {
+ croak("invalid stream number: %d", fd);
+ }
+ n = runcap_getline(rc, fd, &buf, &sz);
+ if (n == -1)
+ croak("error getting line: %s", strerror(errno));
+ if (n == 0)
+ return NULL;
+ return realloc(buf, n + 1);
+}
+
+void
+capture_wd()
+{
+ volatile int _st=0;
+ printf("ENTER\n");
+ while (!_st) {
+ printf("WAIING\n");
+ sleep(1);
+ _st = _st;
+ }
+ printf("EXIT\n");
+}
+

Return to:

Send suggestions and report system problems to the System administrator.