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

Diff for /mandoc/compat_fts.c between version 1.1 and 1.4

version 1.1, 2014/08/11 01:39:00 version 1.4, 2014/08/17 20:45:59
Line 1 
Line 1 
 #include "config.h"  #include "config.h"
   
 #ifdef HAVE_FTS  #if HAVE_FTS
   
 int dummy;  int dummy;
   
 #else  #else
   
   /*      $Id$    */
 /*      $OpenBSD$       */  /*      $OpenBSD$       */
   
 /*-  /*-
Line 404  fts_build(FTS *sp)
Line 405  fts_build(FTS *sp)
         FTSENT *cur, *tail;          FTSENT *cur, *tail;
         DIR *dirp;          DIR *dirp;
         void *oldaddr;          void *oldaddr;
         size_t len, maxlen;          size_t dlen, len, maxlen;
         int nitems, cderrno, descend, level, nlinks, nostat, doadjust;          int nitems, cderrno, descend, level, nlinks, nostat, doadjust;
         int saved_errno;          int saved_errno;
         char *cp;          char *cp;
Line 489  fts_build(FTS *sp)
Line 490  fts_build(FTS *sp)
                 if (ISDOT(dp->d_name))                  if (ISDOT(dp->d_name))
                         continue;                          continue;
   
                 if (!(p = fts_alloc(sp, dp->d_name, (size_t)dp->d_namlen)))  #if HAVE_DIRENT_NAMLEN
                   dlen = dp->d_namlen;
   #else
                   dlen = strlen(dp->d_name);
   #endif
   
                   if (!(p = fts_alloc(sp, dp->d_name, dlen)))
                         goto mem1;                          goto mem1;
                 if (dp->d_namlen >= maxlen) {   /* include space for NUL */                  if (dlen >= maxlen) {   /* include space for NUL */
                         oldaddr = sp->fts_path;                          oldaddr = sp->fts_path;
                         if (fts_palloc(sp, dp->d_namlen +len + 1)) {                          if (fts_palloc(sp, dlen + len + 1)) {
                                 /*                                  /*
                                  * No more memory for path or structures.  Save                                   * No more memory for path or structures.  Save
                                  * errno, free up the current structure and the                                   * errno, free up the current structure and the
Line 520  mem1:    saved_errno = errno;
Line 527  mem1:    saved_errno = errno;
   
                 p->fts_level = level;                  p->fts_level = level;
                 p->fts_parent = sp->fts_cur;                  p->fts_parent = sp->fts_cur;
                 p->fts_pathlen = len + dp->d_namlen;                  p->fts_pathlen = len + dlen;
                 if (p->fts_pathlen < len) {                  if (p->fts_pathlen < len) {
                         /*                          /*
                          * If we wrap, free up the current structure and                           * If we wrap, free up the current structure and
Line 680  fts_alloc(FTS *sp, const char *name, size_t namelen)
Line 687  fts_alloc(FTS *sp, const char *name, size_t namelen)
         FTSENT *p;          FTSENT *p;
         size_t len;          size_t len;
   
         /*  
          * The file name is a variable length array and no stat structure is  
          * necessary if the user has set the nostat bit.  Allocate the FTSENT  
          * structure, the file name and the stat structure in one chunk, but  
          * be careful that the stat structure is reasonably aligned.  Since the  
          * fts_name field is declared to be of size 1, the fts_name pointer is  
          * namelen + 2 before the first possible address of the stat structure.  
          */  
         len = sizeof(FTSENT) + namelen;          len = sizeof(FTSENT) + namelen;
         len += sizeof(struct stat) + ALIGNBYTES;  
         if ((p = calloc(1, len)) == NULL)          if ((p = calloc(1, len)) == NULL)
                 return (NULL);                  return (NULL);
   
         p->fts_path = sp->fts_path;          p->fts_path = sp->fts_path;
         p->fts_namelen = namelen;          p->fts_namelen = namelen;
         p->fts_instr = FTS_NOINSTR;          p->fts_instr = FTS_NOINSTR;
         p->fts_statp = (struct stat *)ALIGN(p->fts_name + namelen + 2);          p->fts_statp = malloc(sizeof(struct stat));
           if (p->fts_statp == NULL) {
                   free(p);
                   return (NULL);
           }
         memcpy(p->fts_name, name, namelen);          memcpy(p->fts_name, name, namelen);
   
         return (p);          return (p);

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.4

CVSweb