diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2014-11-26 21:40:17 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2014-11-26 21:40:17 +0000 |
commit | a7d7f08f9bf1378002063e44fe9ce8a27a886eed (patch) | |
tree | 0634189e33baee57f5507e69c97479bb570c25f6 /read.c | |
parent | 3270470c52b9d9f79faaba63eabc57ed8bfbb776 (diff) | |
download | mandoc-a7d7f08f9bf1378002063e44fe9ce8a27a886eed.tar.gz |
Simplify the mparse_open()/mparse_wait() interface.
Don't bother the user with the PID of the child process,
store it inside the opaque mparse handle.
Diffstat (limited to 'read.c')
-rw-r--r-- | read.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -64,6 +64,7 @@ struct mparse { int filenc; /* encoding of the current file */ int reparse_count; /* finite interp. stack */ int line; /* line number in the file */ + pid_t child; /* the gunzip(1) process */ }; static void choose_parser(struct mparse *); @@ -823,8 +824,7 @@ mparse_readfd(struct mparse *curp, int fd, const char *file) } enum mandoclevel -mparse_open(struct mparse *curp, int *fd, const char *file, - pid_t *child_pid) +mparse_open(struct mparse *curp, int *fd, const char *file) { int pfd[2]; char *cp; @@ -834,7 +834,7 @@ mparse_open(struct mparse *curp, int *fd, const char *file, curp->file = file; if ((cp = strrchr(file, '.')) == NULL || strcmp(cp + 1, "gz")) { - *child_pid = 0; + curp->child = 0; if ((*fd = open(file, O_RDONLY)) == -1) { err = MANDOCERR_SYSOPEN; goto out; @@ -847,7 +847,7 @@ mparse_open(struct mparse *curp, int *fd, const char *file, goto out; } - switch (*child_pid = fork()) { + switch (curp->child = fork()) { case -1: err = MANDOCERR_SYSFORK; close(pfd[0]); @@ -871,7 +871,7 @@ mparse_open(struct mparse *curp, int *fd, const char *file, out: *fd = -1; - *child_pid = 0; + curp->child = 0; curp->file_status = MANDOCLEVEL_SYSERR; if (curp->mmsg) (*curp->mmsg)(err, curp->file_status, file, @@ -882,11 +882,14 @@ out: } enum mandoclevel -mparse_wait(struct mparse *curp, pid_t child_pid) +mparse_wait(struct mparse *curp) { int status; - if (waitpid(child_pid, &status, 0) == -1) { + if (curp->child == 0) + return(MANDOCLEVEL_OK); + + if (waitpid(curp->child, &status, 0) == -1) { mandoc_msg(MANDOCERR_SYSWAIT, curp, 0, 0, strerror(errno)); curp->file_status = MANDOCLEVEL_SYSERR; |