[BACK]Return to mkpath.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / rsync

Diff for /src/usr.bin/rsync/mkpath.c between version 1.4 and 1.5

version 1.4, 2019/05/08 21:30:11 version 1.5, 2021/05/17 11:52:10
Line 46 
Line 46 
 {  {
         struct stat sb;          struct stat sb;
         char *slash;          char *slash;
         int done = 0;          int done;
   
         slash = path;          slash = path;
   
         while (!done) {          for (;;) {
                 slash += strspn(slash, "/");                  slash += strspn(slash, "/");
                 slash += strcspn(slash, "/");                  slash += strcspn(slash, "/");
   
                 done = (*slash == '\0');                  done = (*slash == '\0');
                 *slash = '\0';                  *slash = '\0';
   
                 if (stat(path, &sb)) {                  if (mkdir(path, 0777) != 0) {
                         if (errno != ENOENT || (mkdir(path, 0777) &&                          int mkdir_errno = errno;
                             errno != EEXIST)) {  
                                 ERR("%s: stat", path);                          if (stat(path, &sb) == -1) {
                                   /* Not there; use mkdir()s errno */
                                   errno = mkdir_errno;
                                 return (-1);                                  return (-1);
                         }                          }
                 } else if (!S_ISDIR(sb.st_mode)) {                          if (!S_ISDIR(sb.st_mode)) {
                         errno = ENOTDIR;                                  /* Is there, but isn't a directory */
                         ERR("%s: stat", path);                                  errno = ENOTDIR;
                         return (-1);                                  return (-1);
                           }
                 }                  }
   
                   if (done)
                           break;
   
                 *slash = '/';                  *slash = '/';
         }          }

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