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

Diff for /mandoc/read.c between version 1.27 and 1.28

version 1.27, 2012/02/05 16:46:15 version 1.28, 2012/02/16 20:51:31
Line 28 
Line 28 
 #include <ctype.h>  #include <ctype.h>
 #include <fcntl.h>  #include <fcntl.h>
 #include <stdarg.h>  #include <stdarg.h>
   #include <stdint.h>
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
Line 37 
Line 38 
 #include "libmandoc.h"  #include "libmandoc.h"
 #include "mdoc.h"  #include "mdoc.h"
 #include "man.h"  #include "man.h"
   #include "main.h"
   
 #ifndef MAP_FILE  #ifndef MAP_FILE
 #define MAP_FILE        0  #define MAP_FILE        0
Line 70  static void   resize_buf(struct buf *, size_t);
Line 72  static void   resize_buf(struct buf *, size_t);
 static  void      mparse_buf_r(struct mparse *, struct buf, int);  static  void      mparse_buf_r(struct mparse *, struct buf, int);
 static  void      mparse_readfd_r(struct mparse *, int, const char *, int);  static  void      mparse_readfd_r(struct mparse *, int, const char *, int);
 static  void      pset(const char *, int, struct mparse *);  static  void      pset(const char *, int, struct mparse *);
 static  void      pdesc(struct mparse *, const char *, int);  
 static  int       read_whole_file(const char *, int, struct buf *, int *);  static  int       read_whole_file(const char *, int, struct buf *, int *);
 static  void      mparse_end(struct mparse *);  static  void      mparse_end(struct mparse *);
   
Line 547  rerun:
Line 548  rerun:
         free(ln.buf);          free(ln.buf);
 }  }
   
 static void  
 pdesc(struct mparse *curp, const char *file, int fd)  
 {  
         struct buf       blk;  
         int              with_mmap;  
   
         /*  
          * Run for each opened file; may be called more than once for  
          * each full parse sequence if the opened file is nested (i.e.,  
          * from `so').  Simply sucks in the whole file and moves into  
          * the parse phase for the file.  
          */  
   
         if ( ! read_whole_file(file, fd, &blk, &with_mmap)) {  
                 curp->file_status = MANDOCLEVEL_SYSERR;  
                 return;  
         }  
   
         /* Line number is per-file. */  
   
         curp->line = 1;  
   
         mparse_buf_r(curp, blk, 1);  
   
 #ifdef  HAVE_MMAP  
         if (with_mmap)  
                 munmap(blk.buf, blk.sz);  
         else  
 #endif  
                 free(blk.buf);  
 }  
   
 static int  static int
 read_whole_file(const char *file, int fd, struct buf *fb, int *with_mmap)  read_whole_file(const char *file, int fd, struct buf *fb, int *with_mmap)
 {  {
Line 674  mparse_end(struct mparse *curp)
Line 643  mparse_end(struct mparse *curp)
 }  }
   
 static void  static void
 mparse_readfd_r(struct mparse *curp, int fd, const char *file, int re)  mparse_parse_buffer(struct mparse *curp, struct buf blk, const char *file,
                   int re)
 {  {
         const char      *svfile;          const char      *svfile;
   
           /* Line number is per-file. */
           svfile = curp->file;
           curp->file = file;
           curp->line = 1;
   
           mparse_buf_r(curp, blk, 1);
   
           if (0 == re && MANDOCLEVEL_FATAL > curp->file_status)
                   mparse_end(curp);
   
           curp->file = svfile;
   }
   
   enum mandoclevel
   mparse_readmem(struct mparse *curp, const void *buf, size_t len,
                   const char *file)
   {
           struct buf blk;
   
           blk.buf = UNCONST(buf);
           blk.sz = len;
   
           mparse_parse_buffer(curp, blk, file, 0);
           return(curp->file_status);
   }
   
   static void
   mparse_readfd_r(struct mparse *curp, int fd, const char *file, int re)
   {
           struct buf       blk;
           int              with_mmap;
   
         if (-1 == fd)          if (-1 == fd)
                 if (-1 == (fd = open(file, O_RDONLY, 0))) {                  if (-1 == (fd = open(file, O_RDONLY, 0))) {
                         perror(file);                          perror(file);
                         curp->file_status = MANDOCLEVEL_SYSERR;                          curp->file_status = MANDOCLEVEL_SYSERR;
                         return;                          return;
                 }                  }
           /*
            * Run for each opened file; may be called more than once for
            * each full parse sequence if the opened file is nested (i.e.,
            * from `so').  Simply sucks in the whole file and moves into
            * the parse phase for the file.
            */
   
         svfile = curp->file;          if ( ! read_whole_file(file, fd, &blk, &with_mmap)) {
         curp->file = file;                  curp->file_status = MANDOCLEVEL_SYSERR;
                   return;
           }
   
         pdesc(curp, file, fd);          mparse_parse_buffer(curp, blk, file, re);
   
         if (0 == re && MANDOCLEVEL_FATAL > curp->file_status)  #ifdef  HAVE_MMAP
                 mparse_end(curp);          if (with_mmap)
                   munmap(blk.buf, blk.sz);
           else
   #endif
                   free(blk.buf);
   
         if (STDIN_FILENO != fd && -1 == close(fd))          if (STDIN_FILENO != fd && -1 == close(fd))
                 perror(file);                  perror(file);
   
         curp->file = svfile;  
 }  }
   
 enum mandoclevel  enum mandoclevel

Legend:
Removed from v.1.27  
changed lines
  Added in v.1.28

CVSweb