Diff for /libaitsync/src/dir.c between versions 1.1.2.1 and 1.1.2.5

version 1.1.2.1, 2010/07/13 15:04:43 version 1.1.2.5, 2011/05/08 00:49:45
Line 57  create_diridx(const char *csDir, int lm, int *tags, st Line 57  create_diridx(const char *csDir, int lm, int *tags, st
         DIR *dir;          DIR *dir;
         struct dirent d, *pd;          struct dirent d, *pd;
         int n;          int n;
        char szStr[STRSIZ], szType[STRSIZ];        char szStr[STRSIZ], szType[STRSIZ], *old;
         struct stat sb;          struct stat sb;
         register int i;          register int i;
   
Line 71  create_diridx(const char *csDir, int lm, int *tags, st Line 71  create_diridx(const char *csDir, int lm, int *tags, st
                 memset(l, 0, sizeof(struct tagDirName));                  memset(l, 0, sizeof(struct tagDirName));
         }          }
   
           old = getcwd(NULL, 0);
         if (chdir(csDir) == -1) {          if (chdir(csDir) == -1) {
                 SETERR;                  SETERR;
                   free(old);
                 free(l);                  free(l);
                 *list = NULL;                  *list = NULL;
                 return -1;                  return -1;
Line 80  create_diridx(const char *csDir, int lm, int *tags, st Line 82  create_diridx(const char *csDir, int lm, int *tags, st
         dir = opendir(".");          dir = opendir(".");
         if (!dir) {          if (!dir) {
                 SETERR;                  SETERR;
                   chdir(old);
                   free(old);
                 free(l);                  free(l);
                 *list = NULL;                  *list = NULL;
                 return -1;                  return -1;
Line 91  create_diridx(const char *csDir, int lm, int *tags, st Line 95  create_diridx(const char *csDir, int lm, int *tags, st
                 l = realloc(l, sizeof(struct tagDirName) * (n + 2));                  l = realloc(l, sizeof(struct tagDirName) * (n + 2));
                 if (!l) {                  if (!l) {
                         SETERR;                          SETERR;
                           chdir(old);
                           free(old);
                         free(l);                          free(l);
                         *list = NULL;                          *list = NULL;
                         closedir(dir);                          closedir(dir);
Line 105  create_diridx(const char *csDir, int lm, int *tags, st Line 111  create_diridx(const char *csDir, int lm, int *tags, st
                 if (lm & 1) {                  if (lm & 1) {
                         if (lstat(d.d_name, &sb) != -1) {                          if (lstat(d.d_name, &sb) != -1) {
                                 memset(szStr, 0, STRSIZ);                                  memset(szStr, 0, STRSIZ);
   #if defined(__OpenBSD__)
                                 strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtim));                                  strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtim));
   #else
                                   strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", localtime((time_t*) &sb.st_mtime));
   #endif
                                 switch (d.d_type) {                                  switch (d.d_type) {
                                         case DT_FIFO:                                          case DT_FIFO:
                                                 strlcpy(szType, "fifo", STRSIZ);                                                  strlcpy(szType, "fifo", STRSIZ);
Line 128  create_diridx(const char *csDir, int lm, int *tags, st Line 138  create_diridx(const char *csDir, int lm, int *tags, st
                                         case DT_SOCK:                                          case DT_SOCK:
                                                 strlcpy(szType, "socket", STRSIZ);                                                  strlcpy(szType, "socket", STRSIZ);
                                                 break;                                                  break;
   /* OpenBSD does not have this type */
   #ifdef DT_WHT
                                         case DT_WHT:                                          case DT_WHT:
                                                 strlcpy(szType, "wht", STRSIZ);                                                  strlcpy(szType, "wht", STRSIZ);
                                                 break;                                                  break;
   #endif
                                         case DT_UNKNOWN:                                          case DT_UNKNOWN:
                                         default:                                          default:
                                                 strlcpy(szType, "unknown", STRSIZ);                                                  strlcpy(szType, "unknown", STRSIZ);
                                                 break;                                                  break;
                                 }                                  }
                                snprintf(l[n].extra, STRSIZ, "%s links=%d inode=%u %d:%d perm=0%o size=%llu %s",                                 snprintf(l[n].extra, STRSIZ, "%s links=%d inode=%lu %d:%d perm=0%o size=%ld %s", 
                                                 szType, sb.st_nlink, sb.st_ino, sb.st_uid, sb.st_gid,                                                   szType, sb.st_nlink, sb.st_ino, sb.st_uid, sb.st_gid, 
                                                 sb.st_mode & 0x1fff, sb.st_size, szStr);                                                  sb.st_mode & 0x1fff, sb.st_size, szStr);
                         }                          }
Line 150  create_diridx(const char *csDir, int lm, int *tags, st Line 163  create_diridx(const char *csDir, int lm, int *tags, st
         for (i = n - 1; i > -1; i--)          for (i = n - 1; i > -1; i--)
                 tags[l[i].tag] = i;                  tags[l[i].tag] = i;
   
           chdir(old);
           free(old);
   
         *list = l;          *list = l;
         return n;          return n;
 }  }
Line 250  sync_dircmpList(const char *csDir1, const char *csDir2 Line 266  sync_dircmpList(const char *csDir1, const char *csDir2
         u_short t;          u_short t;
         u_int hash;          u_int hash;
         struct stat sb;          struct stat sb;
        char szLine[STRSIZ], szStr[STRSIZ], szType[STRSIZ], *str, *pbrk;        char szLine[STRSIZ], szStr[STRSIZ], szType[STRSIZ], *str, *pbrk, *old;
   
         if (!csDir1 || !list || !(tags = create_tags()))          if (!csDir1 || !list || !(tags = create_tags()))
                 return -1;                  return -1;
Line 261  sync_dircmpList(const char *csDir1, const char *csDir2 Line 277  sync_dircmpList(const char *csDir1, const char *csDir2
                 return n;                  return n;
         }          }
   
        if (!lstat(csDir2, &sb) && S_ISDIR(sb.st_mode)) {        if (lstat(csDir2, &sb) == -1) {
                 SETERR;
                 free(l);
                 return -1;
         }
         if (S_ISDIR(sb.st_mode)) {
                 old = getcwd(NULL, 0);
                 if (chdir(csDir2) == -1) {                  if (chdir(csDir2) == -1) {
                         SETERR;                          SETERR;
                           chdir(old);
                           free(old);
                         free(l);                          free(l);
                         return -1;                          return -1;
                 }                  }
                 dir = opendir(".");                  dir = opendir(".");
                 if (!dir) {                  if (!dir) {
                         SETERR;                          SETERR;
                           chdir(old);
                           free(old);
                         free(l);                          free(l);
                         return -1;                          return -1;
                 }                  }
Line 287  sync_dircmpList(const char *csDir1, const char *csDir2 Line 313  sync_dircmpList(const char *csDir1, const char *csDir2
                                 l = realloc(l, sizeof(struct tagDirName) * (n + 2));                                  l = realloc(l, sizeof(struct tagDirName) * (n + 2));
                                 if (!l) {                                  if (!l) {
                                         SETERR;                                          SETERR;
                                           chdir(old);
                                           free(old);
                                         closedir(dir);                                          closedir(dir);
                                         return -1;                                          return -1;
                                 } else                                  } else
Line 299  sync_dircmpList(const char *csDir1, const char *csDir2 Line 327  sync_dircmpList(const char *csDir1, const char *csDir2
                                 if (lm & 1) {                                  if (lm & 1) {
                                         if (lstat(d.d_name, &sb) != -1) {                                          if (lstat(d.d_name, &sb) != -1) {
                                                 memset(szStr, 0, STRSIZ);                                                  memset(szStr, 0, STRSIZ);
   #if defined(__OpenBSD__)
                                                 strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S",                                                   strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", 
                                                                 localtime((time_t*) &sb.st_mtim));                                                                  localtime((time_t*) &sb.st_mtim));
   #else
                                                   strftime(szStr, STRSIZ, "%Y-%m-%d %H:%M:%S", 
                                                                   localtime((time_t*) &sb.st_mtime));
   #endif
                                                 switch (d.d_type) {                                                  switch (d.d_type) {
                                                         case DT_FIFO:                                                          case DT_FIFO:
                                                                 strlcpy(szType, "fifo", STRSIZ);                                                                  strlcpy(szType, "fifo", STRSIZ);
Line 323  sync_dircmpList(const char *csDir1, const char *csDir2 Line 356  sync_dircmpList(const char *csDir1, const char *csDir2
                                                         case DT_SOCK:                                                          case DT_SOCK:
                                                                 strlcpy(szType, "socket", STRSIZ);                                                                  strlcpy(szType, "socket", STRSIZ);
                                                                 break;                                                                  break;
   /* OpenBSD does not have this type */
   #ifdef DT_WHT
                                                         case DT_WHT:                                                          case DT_WHT:
                                                                 strlcpy(szType, "wht", STRSIZ);                                                                  strlcpy(szType, "wht", STRSIZ);
                                                                 break;                                                                  break;
   #endif
                                                         case DT_UNKNOWN:                                                          case DT_UNKNOWN:
                                                         default:                                                          default:
                                                                 strlcpy(szType, "unknown", STRSIZ);                                                                  strlcpy(szType, "unknown", STRSIZ);
                                                                 break;                                                                  break;
                                                 }                                                  }
                                                 snprintf(l[n].extra, STRSIZ,                                                   snprintf(l[n].extra, STRSIZ, 
                                                                "%s links=%d inode=%u %d:%d perm=0%o size=%llu %s",                                                                 "%s links=%d inode=%lu %d:%d perm=0%o size=%ld %s", 
                                                                 szType, sb.st_nlink, sb.st_ino, sb.st_uid, sb.st_gid,                                                                   szType, sb.st_nlink, sb.st_ino, sb.st_uid, sb.st_gid, 
                                                                 sb.st_mode & 0x1fff, sb.st_size, szStr);                                                                  sb.st_mode & 0x1fff, sb.st_size, szStr);
                                         }                                          }
Line 342  sync_dircmpList(const char *csDir1, const char *csDir2 Line 378  sync_dircmpList(const char *csDir1, const char *csDir2
                         }                          }
                 }                  }
                 closedir(dir);                  closedir(dir);
                   chdir(old);
                   free(old);
         } else {          } else {
                 if (strcmp(csDir2, "-")) {                  if (strcmp(csDir2, "-")) {
                         f = fopen(csDir2, "r");                          f = fopen(csDir2, "r");

Removed from v.1.1.2.1  
changed lines
  Added in v.1.1.2.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>