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

Diff for /mandoc/mandocd.c between version 1.2 and 1.11

version 1.2, 2017/02/05 22:51:11 version 1.11, 2019/03/03 13:02:11
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2017 Michael Stapelberg <stapelberg@debian.org>   * Copyright (c) 2017 Michael Stapelberg <stapelberg@debian.org>
  * Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2017, 2019 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 17 
Line 17 
  */   */
 #include "config.h"  #include "config.h"
   
   #if HAVE_CMSG_XPG42
   #define _XPG4_2
   #endif
   
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/socket.h>  #include <sys/socket.h>
   
Line 34 
Line 38 
 #include "roff.h"  #include "roff.h"
 #include "mdoc.h"  #include "mdoc.h"
 #include "man.h"  #include "man.h"
   #include "mandoc_parse.h"
 #include "main.h"  #include "main.h"
 #include "manconf.h"  #include "manconf.h"
   
Line 45  enum outt {
Line 50  enum outt {
   
 static  void      process(struct mparse *, enum outt, void *);  static  void      process(struct mparse *, enum outt, void *);
 static  int       read_fds(int, int *);  static  int       read_fds(int, int *);
 static  void      usage(void) __attribute__((noreturn));  static  void      usage(void) __attribute__((__noreturn__));
   
   
 #define NUM_FDS 3  #define NUM_FDS 3
Line 114  main(int argc, char *argv[])
Line 119  main(int argc, char *argv[])
         struct manoutput         options;          struct manoutput         options;
         struct mparse           *parser;          struct mparse           *parser;
         void                    *formatter;          void                    *formatter;
           const char              *defos;
         const char              *errstr;          const char              *errstr;
         int                      clientfd;          int                      clientfd;
         int                      old_stdin;          int                      old_stdin;
Line 123  main(int argc, char *argv[])
Line 129  main(int argc, char *argv[])
         int                      state, opt;          int                      state, opt;
         enum outt                outtype;          enum outt                outtype;
   
           defos = NULL;
         outtype = OUTT_ASCII;          outtype = OUTT_ASCII;
         while ((opt = getopt(argc, argv, "T:")) != -1) {          while ((opt = getopt(argc, argv, "I:T:")) != -1) {
                 switch (opt) {                  switch (opt) {
                   case 'I':
                           if (strncmp(optarg, "os=", 3) == 0)
                                   defos = optarg + 3;
                           else {
                                   warnx("-I %s: Bad argument", optarg);
                                   usage();
                           }
                           break;
                 case 'T':                  case 'T':
                         if (strcmp(optarg, "ascii") == 0)                          if (strcmp(optarg, "ascii") == 0)
                                 outtype = OUTT_ASCII;                                  outtype = OUTT_ASCII;
Line 156  main(int argc, char *argv[])
Line 171  main(int argc, char *argv[])
                 errx(1, "file descriptor %s %s", argv[1], errstr);                  errx(1, "file descriptor %s %s", argv[1], errstr);
   
         mchars_alloc();          mchars_alloc();
         parser = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1,          parser = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1 |
             MANDOCLEVEL_BADARG, NULL, NULL);              MPARSE_VALIDATE, MANDOC_OS_OTHER, defos);
   
         memset(&options, 0, sizeof(options));          memset(&options, 0, sizeof(options));
         switch (outtype) {          switch (outtype) {
Line 198  main(int argc, char *argv[])
Line 213  main(int argc, char *argv[])
   
                 process(parser, outtype, formatter);                  process(parser, outtype, formatter);
                 mparse_reset(parser);                  mparse_reset(parser);
                   if (outtype == OUTT_HTML)
                           html_reset(formatter);
   
                 fflush(stdout);                  fflush(stdout);
                 fflush(stderr);                  fflush(stderr);
Line 229  main(int argc, char *argv[])
Line 246  main(int argc, char *argv[])
 static void  static void
 process(struct mparse *parser, enum outt outtype, void *formatter)  process(struct mparse *parser, enum outt outtype, void *formatter)
 {  {
         struct roff_man  *man;          struct roff_meta *meta;
   
         mparse_readfd(parser, STDIN_FILENO, "<unixfd>");          mparse_readfd(parser, STDIN_FILENO, "<unixfd>");
         mparse_result(parser, &man, NULL);          meta = mparse_result(parser);
           if (meta->macroset == MACROSET_MDOC) {
         if (man == NULL)  
                 return;  
   
         if (man->macroset == MACROSET_MDOC) {  
                 mdoc_validate(man);  
                 switch (outtype) {                  switch (outtype) {
                 case OUTT_ASCII:                  case OUTT_ASCII:
                 case OUTT_UTF8:                  case OUTT_UTF8:
                         terminal_mdoc(formatter, man);                          terminal_mdoc(formatter, meta);
                         break;                          break;
                 case OUTT_HTML:                  case OUTT_HTML:
                         html_mdoc(formatter, man);                          html_mdoc(formatter, meta);
                         break;                          break;
                 }                  }
         }          }
         if (man->macroset == MACROSET_MAN) {          if (meta->macroset == MACROSET_MAN) {
                 man_validate(man);  
                 switch (outtype) {                  switch (outtype) {
                 case OUTT_ASCII:                  case OUTT_ASCII:
                 case OUTT_UTF8:                  case OUTT_UTF8:
                         terminal_man(formatter, man);                          terminal_man(formatter, meta);
                         break;                          break;
                 case OUTT_HTML:                  case OUTT_HTML:
                         html_man(formatter, man);                          html_man(formatter, meta);
                         break;                          break;
                 }                  }
         }          }
Line 266  process(struct mparse *parser, enum outt outtype, void
Line 277  process(struct mparse *parser, enum outt outtype, void
 void  void
 usage(void)  usage(void)
 {  {
         fprintf(stderr, "usage: mandocd [-T output] socket_fd\n");          fprintf(stderr, "usage: mandocd [-I os=name] [-T output] socket_fd\n");
         exit(1);          exit(1);
 }  }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.11

CVSweb