[BACK]Return to main.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/main.c between version 1.227 and 1.230

version 1.227, 2015/03/17 13:35:52 version 1.230, 2015/03/27 21:33:20
Line 8 
Line 8 
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
  * copyright notice and this permission notice appear in all copies.   * copyright notice and this permission notice appear in all copies.
  *   *
  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF   * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR   * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN   * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
Line 39 
Line 39 
 #include "main.h"  #include "main.h"
 #include "mdoc.h"  #include "mdoc.h"
 #include "man.h"  #include "man.h"
 #include "manpath.h"  #include "manconf.h"
 #include "mansearch.h"  #include "mansearch.h"
   
 #if !defined(__GNUC__) || (__GNUC__ < 2)  #if !defined(__GNUC__) || (__GNUC__ < 2)
Line 83  struct curparse {
Line 83  struct curparse {
         out_man           outman;       /* man output ptr */          out_man           outman;       /* man output ptr */
         out_free          outfree;      /* free output ptr */          out_free          outfree;      /* free output ptr */
         void             *outdata;      /* data for output */          void             *outdata;      /* data for output */
         char              outopts[BUFSIZ]; /* buf of output opts */          struct manoutput *outopts;      /* output options */
 };  };
   
 static  int               fs_lookup(const struct manpaths *,  static  int               fs_lookup(const struct manpaths *,
Line 118  static enum mandoclevel  rc;
Line 118  static enum mandoclevel  rc;
 int  int
 main(int argc, char *argv[])  main(int argc, char *argv[])
 {  {
           struct manconf   conf;
         struct curparse  curp;          struct curparse  curp;
         struct mansearch search;          struct mansearch search;
         struct manpaths  paths;  
         char            *auxpaths;          char            *auxpaths;
         char            *defos;          char            *defos;
         unsigned char   *uc;          unsigned char   *uc;
         struct manpage  *res, *resp;          struct manpage  *res, *resp;
         char            *conf_file, *defpaths;          char            *conf_file, *defpaths;
         size_t           isec, i, sz;          size_t           isec, i, sz;
         int              prio, best_prio, synopsis_only;          int              prio, best_prio;
         char             sec;          char             sec;
         enum mandoclevel rctmp;          enum mandoclevel rctmp;
         enum outmode     outmode;          enum outmode     outmode;
Line 151  main(int argc, char *argv[])
Line 151  main(int argc, char *argv[])
   
         /* Search options. */          /* Search options. */
   
         memset(&paths, 0, sizeof(struct manpaths));          memset(&conf, 0, sizeof(conf));
         conf_file = defpaths = NULL;          conf_file = defpaths = NULL;
         auxpaths = NULL;          auxpaths = NULL;
   
Line 174  main(int argc, char *argv[])
Line 174  main(int argc, char *argv[])
         memset(&curp, 0, sizeof(struct curparse));          memset(&curp, 0, sizeof(struct curparse));
         curp.outtype = OUTT_LOCALE;          curp.outtype = OUTT_LOCALE;
         curp.wlevel  = MANDOCLEVEL_BADARG;          curp.wlevel  = MANDOCLEVEL_BADARG;
           curp.outopts = &conf.output;
         options = MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1;          options = MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1;
         defos = NULL;          defos = NULL;
   
         pager_pid = 1;          pager_pid = 1;
         show_usage = 0;          show_usage = 0;
         synopsis_only = 0;  
         outmode = OUTMODE_DEF;          outmode = OUTMODE_DEF;
   
         while (-1 != (c = getopt(argc, argv,          while (-1 != (c = getopt(argc, argv,
Line 198  main(int argc, char *argv[])
Line 198  main(int argc, char *argv[])
                         search.argmode = ARG_WORD;                          search.argmode = ARG_WORD;
                         break;                          break;
                 case 'h':                  case 'h':
                         (void)strlcat(curp.outopts, "synopsis,", BUFSIZ);                          conf.output.synopsisonly = 1;
                         synopsis_only = 1;  
                         pager_pid = 0;                          pager_pid = 0;
                         outmode = OUTMODE_ALL;                          outmode = OUTMODE_ALL;
                         break;                          break;
Line 240  main(int argc, char *argv[])
Line 239  main(int argc, char *argv[])
                         break;                          break;
                 case 'O':                  case 'O':
                         search.outkey = optarg;                          search.outkey = optarg;
                         (void)strlcat(curp.outopts, optarg, BUFSIZ);                          while (optarg != NULL)
                         (void)strlcat(curp.outopts, ",", BUFSIZ);                                  manconf_output(&conf.output,
                                       strsep(&optarg, ","));
                         break;                          break;
                 case 'S':                  case 'S':
                         search.arch = optarg;                          search.arch = optarg;
Line 336  main(int argc, char *argv[])
Line 336  main(int argc, char *argv[])
   
                 /* Access the mandoc database. */                  /* Access the mandoc database. */
   
                 manpath_parse(&paths, conf_file, defpaths, auxpaths);                  manconf_parse(&conf, conf_file, defpaths, auxpaths);
 #if HAVE_SQLITE3  #if HAVE_SQLITE3
                 mansearch_setup(1);                  mansearch_setup(1);
                 if( ! mansearch(&search, &paths, argc, argv, &res, &sz))                  if ( ! mansearch(&search, &conf.manpath,
                       argc, argv, &res, &sz))
                         usage(search.argmode);                          usage(search.argmode);
 #else  #else
                 if (search.argmode != ARG_NAME) {                  if (search.argmode != ARG_NAME) {
Line 351  main(int argc, char *argv[])
Line 352  main(int argc, char *argv[])
 #endif  #endif
   
                 if (sz == 0 && search.argmode == ARG_NAME)                  if (sz == 0 && search.argmode == ARG_NAME)
                         fs_search(&search, &paths, argc, argv, &res, &sz);                          fs_search(&search, &conf.manpath,
                               argc, argv, &res, &sz);
   
                 if (sz == 0) {                  if (sz == 0) {
                         rc = MANDOCLEVEL_BADARG;                          rc = MANDOCLEVEL_BADARG;
Line 439  main(int argc, char *argv[])
Line 441  main(int argc, char *argv[])
                                 parse(&curp, fd, *argv);                                  parse(&curp, fd, *argv);
                         else if (resp->form & FORM_SRC) {                          else if (resp->form & FORM_SRC) {
                                 /* For .so only; ignore failure. */                                  /* For .so only; ignore failure. */
                                 chdir(paths.paths[resp->ipath]);                                  chdir(conf.manpath.paths[resp->ipath]);
                                 parse(&curp, fd, resp->file);                                  parse(&curp, fd, resp->file);
                         } else                          } else
                                 passthrough(resp->file, fd, synopsis_only);                                  passthrough(resp->file, fd,
                                       conf.output.synopsisonly);
   
                         rctmp = mparse_wait(curp.mp);                          rctmp = mparse_wait(curp.mp);
                         if (rc < rctmp)                          if (rc < rctmp)
Line 470  main(int argc, char *argv[])
Line 473  main(int argc, char *argv[])
   
 out:  out:
         if (search.argmode != ARG_FILE) {          if (search.argmode != ARG_FILE) {
                 manpath_free(&paths);                  manconf_free(&conf);
 #if HAVE_SQLITE3  #if HAVE_SQLITE3
                 mansearch_free(res, sz);                  mansearch_free(res, sz);
                 mansearch_setup(0);                  mansearch_setup(0);
Line 499  usage(enum argmode argmode)
Line 502  usage(enum argmode argmode)
   
         switch (argmode) {          switch (argmode) {
         case ARG_FILE:          case ARG_FILE:
                 fputs("usage: mandoc [-acfhkl] [-Ios=name] "                  fputs("usage: mandoc [-acfhkl] [-I os=name] "
                     "[-Kencoding] [-mformat] [-Ooption]\n"                      "[-K encoding] [-mformat] [-O option]\n"
                     "\t      [-Toutput] [-Wlevel] [file ...]\n", stderr);                      "\t      [-T output] [-W level] [file ...]\n", stderr);
                 break;                  break;
         case ARG_NAME:          case ARG_NAME:
                 fputs("usage: man [-acfhklw] [-C file] [-I os=name] "                  fputs("usage: man [-acfhklw] [-C file] [-I os=name] "

Legend:
Removed from v.1.227  
changed lines
  Added in v.1.230

CVSweb