From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from localhost (mandoc.bsd.lv [local]) by mandoc.bsd.lv (OpenSMTPD) with ESMTPA id f308a333 for ; Fri, 26 Jul 2019 16:03:50 -0500 (EST) Date: Fri, 26 Jul 2019 16:03:49 -0500 (EST) X-Mailinglist: mandoc-source Reply-To: source@mandoc.bsd.lv MIME-Version: 1.0 From: schwarze@mandoc.bsd.lv To: source@mandoc.bsd.lv Subject: mandoc: Structural cleanup, no functional change: Mixing parser and X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Message-ID: <862a3b7dcae89919@mandoc.bsd.lv> Log Message: ----------- Structural cleanup, no functional change: Mixing parser and formatter state in the same struct was a bad idea, so pull the parser state and configuration out of it. This makes sure output options are not passed into parser functions and parser options are not passed into output functions. While here, add comments to the important local variables in main(). Modified Files: -------------- mandoc: main.c Revision Data ------------- Index: main.c =================================================================== RCS file: /home/cvs/mandoc/mandoc/main.c,v retrieving revision 1.333 retrieving revision 1.334 diff -Lmain.c -Lmain.c -u -p -r1.333 -r1.334 --- main.c +++ main.c @@ -78,12 +78,9 @@ enum outt { }; struct curparse { - struct mparse *mp; struct manoutput *outopts; /* output options */ void *outdata; /* data for output */ - char *os_s; /* operating system for display */ int wstop; /* stop after a file with a warning */ - enum mandoc_os os_e; /* check base system conventions */ enum outt outtype; /* which output to use */ }; @@ -99,12 +96,13 @@ static int fs_search(const struct man const struct manpaths *, int, char**, struct manpage **, size_t *); static void outdata_alloc(struct curparse *); -static void parse(struct curparse *, int, const char *); +static void parse(struct mparse *, int, const char *, + struct curparse *); static void passthrough(int, int); static void run_pager(struct tag_files *); static pid_t spawn_pager(struct tag_files *); static void usage(enum argmode) __attribute__((__noreturn__)); -static int woptions(struct curparse *, char *); +static int woptions(char *, enum mandoc_os *, int *); static const int sec_prios[] = {1, 4, 5, 8, 6, 3, 7, 2, 9}; static char help_arg[] = "help"; @@ -114,24 +112,31 @@ static char *help_argv[] = {help_arg, int main(int argc, char *argv[]) { - struct manconf conf; - struct mansearch search; + struct manconf conf; /* Manpaths and output options. */ struct curparse curp; - struct winsize ws; - struct tag_files *tag_files; - struct manpage *res, *resp; + struct winsize ws; /* Result of ioctl(TIOCGWINSZ). */ + struct mansearch search; /* Search options. */ + struct manpage *res, *resp; /* Search results. */ + struct mparse *mp; /* Opaque parser object. */ + struct tag_files *tag_files; /* Tagging state variables. */ + const char *conf_file; /* -C: alternate config file. */ + const char *os_s; /* -I: Operating system for display. */ const char *progname, *sec, *thisarg; - char *conf_file, *defpaths, *auxpaths; - char *oarg, *tagarg; + char *defpaths; /* -M: override manpaths. */ + char *auxpaths; /* -m: additional manpaths. */ + char *oarg; /* -O: output option string. */ + char *tagarg; /* -O tag: default value. */ unsigned char *uc; - size_t i, sz, ssz; + size_t sz; /* Number of elements in res[]. */ + size_t i, ssz; + int options; /* Parser options. */ + int show_usage; /* Invalid argument: give up. */ + int use_pager; /* According to command line. */ int prio, best_prio; - enum outmode outmode; int fd, startdir; - int show_usage; - int options; - int use_pager; int c; + enum mandoc_os os_e; /* Check base system conventions. */ + enum outmode outmode; /* According to command line. */ #if HAVE_PROGNAME progname = getprogname(); @@ -164,8 +169,8 @@ main(int argc, char *argv[]) /* Search options. */ memset(&conf, 0, sizeof(conf)); - conf_file = defpaths = NULL; - auxpaths = NULL; + conf_file = NULL; + defpaths = auxpaths = NULL; memset(&search, 0, sizeof(struct mansearch)); search.outkey = "Nd"; @@ -184,6 +189,8 @@ main(int argc, char *argv[]) /* Parser and formatter options. */ + os_e = MANDOC_OS_OTHER; + os_s = NULL; memset(&curp, 0, sizeof(struct curparse)); curp.outtype = OUTT_LOCALE; curp.outopts = &conf.output; @@ -224,12 +231,12 @@ main(int argc, char *argv[]) "-I %s", optarg); return mandoc_msg_getrc(); } - if (curp.os_s != NULL) { + if (os_s != NULL) { mandoc_msg(MANDOCERR_BADARG_DUPE, 0, 0, "-I %s", optarg); return mandoc_msg_getrc(); } - curp.os_s = mandoc_strdup(optarg + 3); + os_s = optarg + 3; break; case 'K': options &= ~(MPARSE_UTF8 | MPARSE_LATIN1); @@ -295,7 +302,7 @@ main(int argc, char *argv[]) } break; case 'W': - if (woptions(&curp, optarg) == -1) + if (woptions(optarg, &os_e, &curp.wstop) == -1) return mandoc_msg_getrc(); break; case 'w': @@ -548,7 +555,7 @@ main(int argc, char *argv[]) } mchars_alloc(); - curp.mp = mparse_alloc(options, curp.os_e, curp.os_s); + mp = mparse_alloc(options, os_e, os_s); if (argc < 1) { if (use_pager) { @@ -558,7 +565,7 @@ main(int argc, char *argv[]) } thisarg = ""; mandoc_msg_setinfilename(thisarg); - parse(&curp, STDIN_FILENO, thisarg); + parse(mp, STDIN_FILENO, thisarg, &curp); mandoc_msg_setinfilename(NULL); } @@ -588,7 +595,7 @@ main(int argc, char *argv[]) thisarg = *argv; mandoc_msg_setinfilename(thisarg); - fd = mparse_open(curp.mp, thisarg); + fd = mparse_open(mp, thisarg); if (fd != -1) { if (use_pager) { use_pager = 0; @@ -598,7 +605,7 @@ main(int argc, char *argv[]) } if (resp == NULL || resp->form == FORM_SRC) - parse(&curp, fd, thisarg); + parse(mp, fd, thisarg, &curp); else passthrough(fd, conf.output.synopsisonly); @@ -634,7 +641,7 @@ main(int argc, char *argv[]) else argv++; if (--argc) - mparse_reset(curp.mp); + mparse_reset(mp); } if (startdir != -1) { (void)fchdir(startdir); @@ -660,7 +667,7 @@ main(int argc, char *argv[]) } } mandoc_xr_free(); - mparse_free(curp.mp); + mparse_free(mp); mchars_free(); out: @@ -668,7 +675,6 @@ out: manconf_free(&conf); mansearch_free(res, sz); } - free(curp.os_s); if (tag_files != NULL) { fclose(stdout); @@ -836,7 +842,7 @@ fs_search(const struct mansearch *cfg, c } static void -parse(struct curparse *curp, int fd, const char *file) +parse(struct mparse *mp, int fd, const char *file, struct curparse *curp) { struct roff_meta *meta; @@ -845,7 +851,7 @@ parse(struct curparse *curp, int fd, con assert(file); assert(fd >= 0); - mparse_readfd(curp->mp, fd, file); + mparse_readfd(mp, fd, file); if (fd != STDIN_FILENO) close(fd); @@ -863,7 +869,7 @@ parse(struct curparse *curp, int fd, con html_reset(curp); mandoc_xr_reset(); - meta = mparse_result(curp->mp); + meta = mparse_result(mp); /* Execute the out device, if it exists. */ @@ -901,7 +907,7 @@ parse(struct curparse *curp, int fd, con tree_man(curp->outdata, meta); break; case OUTT_MAN: - mparse_copy(curp->mp); + mparse_copy(mp); break; case OUTT_PDF: case OUTT_ASCII: @@ -1041,7 +1047,7 @@ done: } static int -woptions(struct curparse *curp, char *arg) +woptions(char *arg, enum mandoc_os *os_e, int *wstop) { char *v, *o; const char *toks[11]; @@ -1062,7 +1068,7 @@ woptions(struct curparse *curp, char *ar o = arg; switch (getsubopt(&arg, (char * const *)toks, &v)) { case 0: - curp->wstop = 1; + *wstop = 1; break; case 1: case 2: @@ -1085,11 +1091,11 @@ woptions(struct curparse *curp, char *ar break; case 8: mandoc_msg_setmin(MANDOCERR_BASE); - curp->os_e = MANDOC_OS_OPENBSD; + *os_e = MANDOC_OS_OPENBSD; break; case 9: mandoc_msg_setmin(MANDOCERR_BASE); - curp->os_e = MANDOC_OS_NETBSD; + *os_e = MANDOC_OS_NETBSD; break; default: mandoc_msg(MANDOCERR_BADARG_BAD, 0, 0, "-W %s", o); -- To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv