From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2512 invoked from network); 18 Sep 2000 03:51:51 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 18 Sep 2000 03:51:51 -0000 Received: (qmail 24451 invoked by alias); 18 Sep 2000 03:51:13 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 12827 Received: (qmail 24444 invoked from network); 18 Sep 2000 03:51:12 -0000 Date: Sun, 17 Sep 2000 23:51:09 -0400 From: Clint Adams To: zsh-workers@sunsite.auc.dk Subject: PATCH: PATH_MAX and mailstat, part I Message-ID: <20000917235109.A6793@dman.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii User-Agent: Mutt/1.1.2i This makes 'file' be dynamically allocated in mailstat. Index: Src/utils.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/utils.c,v retrieving revision 1.16 diff -u -r1.16 utils.c --- Src/utils.c 2000/09/18 03:36:22 1.16 +++ Src/utils.c 2000/09/18 03:49:16 @@ -3789,8 +3789,8 @@ struct stat st_ret, st_tmp; static struct stat st_new_last, st_ret_last; char dir[PATH_MAX * 2]; - char file[PATH_MAX * 2]; - int i, l; + char *file; + int i; time_t atime = 0, mtime = 0; /* First see if it's a directory. */ @@ -3832,28 +3832,26 @@ return 0; } st_new_last = st_tmp; - + /* Loop over new/ and cur/ */ for (i = 0; i < 2; i++) { - sprintf(dir, "%s/%s", path, i ? "cur" : "new"); - sprintf(file, "%s/", dir); - l = strlen(file); + sprintf(dir, "%s/%s", path, i ? "cur" : "new"); if ((dd = opendir(dir)) == NULL) - return 0; + return 0; while ((fn = readdir(dd)) != NULL) { - if (fn->d_name[0] == '.' || - strlen(fn->d_name) + l >= sizeof(file)) - continue; - strcpy(file + l, fn->d_name); - if (stat(file, &st_tmp) != 0) - continue; - st_ret.st_size += st_tmp.st_size; - st_ret.st_blocks++; - if (st_tmp.st_atime != st_tmp.st_mtime && - st_tmp.st_atime > atime) - atime = st_tmp.st_atime; - if (st_tmp.st_mtime > mtime) - mtime = st_tmp.st_mtime; + if (fn->d_name[0] == '.') + continue; + + file = zhtricat(dir, "/", fn->d.name); + if (stat(file, &st_tmp) != 0) + continue; + st_ret.st_size += st_tmp.st_size; + st_ret.st_blocks++; + if (st_tmp.st_atime != st_tmp.st_mtime && + st_tmp.st_atime > atime) + atime = st_tmp.st_atime; + if (st_tmp.st_mtime > mtime) + mtime = st_tmp.st_mtime; } closedir(dd); }