From 64d591dbac0a66814b04cce03c409184a4831096 Mon Sep 17 00:00:00 2001 From: Clint Adams Date: Mon, 18 Sep 2000 03:52:59 +0000 Subject: 12827: dynamically allocate 'file' in mailstat --- ChangeLog | 4 ++++ Src/utils.c | 38 ++++++++++++++++++-------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index ff07b6461..6ac9e9bad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2000-09-18 Clint Adams + + * 12827: Src/utils.c: dynamically allocate 'file' in mailstat. + 2000-09-17 Clint Adams * unposted: Src/system.h, Src/utils.c: define mailstat() diff --git a/Src/utils.c b/Src/utils.c index ca46fd870..603d3a4ee 100644 --- a/Src/utils.c +++ b/Src/utils.c @@ -3789,8 +3789,8 @@ mailstat(char *path, struct stat *st) 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 @@ mailstat(char *path, struct stat *st) 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); } -- cgit 1.4.1