projects
/
mmh
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Simplify dodir/addir/addfold (patch from Eric Gillespie)
[mmh]
/
uip
/
folder.c
diff --git
a/uip/folder.c
b/uip/folder.c
index
9d85e89
..
a0821c2
100644
(file)
--- a/
uip/folder.c
+++ b/
uip/folder.c
@@
-121,7
+121,6
@@
static int maxFolderInfo;
static void dodir (char *);
static int get_folder_info (char *, char *);
static void print_folders (void);
static void dodir (char *);
static int get_folder_info (char *, char *);
static void print_folders (void);
-static int num_digits (int);
static int sfold (struct msgs *, char *);
static void addir (char *);
static void addfold (char *);
static int sfold (struct msgs *, char *);
static void addir (char *);
static void addfold (char *);
@@
-136,7
+135,6
@@
main (int argc, char **argv)
int pushsw = 0, popsw = 0;
char *cp, *dp, *msg = NULL, *argfolder = NULL;
char **ap, **argp, buf[BUFSIZ], **arguments;
int pushsw = 0, popsw = 0;
char *cp, *dp, *msg = NULL, *argfolder = NULL;
char **ap, **argp, buf[BUFSIZ], **arguments;
- struct stat st;
#ifdef LOCALE
setlocale(LC_ALL, "");
#ifdef LOCALE
setlocale(LC_ALL, "");
@@
-261,7
+259,7
@@
main (int argc, char **argv)
if (argfolder)
adios (NULL, "only one folder at a time!");
else
if (argfolder)
adios (NULL, "only one folder at a time!");
else
- argfolder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
+ argfolder = pluspath (cp);
} else {
if (msg)
adios (NULL, "only one (current) message at a time!");
} else {
if (msg)
adios (NULL, "only one (current) message at a time!");
@@
-407,7
+405,8
@@
main (int argc, char **argv)
print_folders();
context_save (); /* save the context file */
print_folders();
context_save (); /* save the context file */
- return done (0);
+ done (0);
+ return 1;
}
/*
}
/*
@@
-420,7
+419,6
@@
dodir (char *dir)
int i;
int os = start;
int of = foldp;
int i;
int os = start;
int of = foldp;
- char buffer[BUFSIZ];
start = foldp;
start = foldp;
@@
-428,7
+426,7
@@
dodir (char *dir)
if (chdir (nmhdir) == NOTOK)
adios (nmhdir, "unable to change directory to");
if (chdir (nmhdir) == NOTOK)
adios (nmhdir, "unable to change directory to");
- addir (strncpy (buffer, dir, sizeof(buffer)));
+ addir (dir);
for (i = start; i < foldp; i++) {
get_folder_info (folds[i], NULL);
for (i = start; i < foldp; i++) {
get_folder_info (folds[i], NULL);
@@
-641,29
+639,6
@@
print_folders (void)
}
/*
}
/*
- * Calculate the number of digits in a nonnegative integer
- */
-int
-num_digits (int n)
-{
- int ndigits = 0;
-
- /* Sanity check */
- if (n < 0)
- adios (NULL, "oops, num_digits called with negative value");
-
- if (n == 0)
- return 1;
-
- while (n) {
- n /= 10;
- ndigits++;
- }
-
- return ndigits;
-}
-
-/*
* Set the current message and sychronize sequences
*/
* Set the current message and sychronize sequences
*/
@@
-691,21
+666,11
@@
static void
addir (char *name)
{
int nlink;
addir (char *name)
{
int nlink;
- char *base, *cp;
+ char *prefix, *child;
struct stat st;
struct dirent *dp;
DIR * dd;
struct stat st;
struct dirent *dp;
DIR * dd;
- cp = name + strlen (name);
- *cp++ = '/';
- *cp = '\0';
-
- /*
- * A hack to skip over a leading
- * "./" in folder names.
- */
- base = strcmp (name, "./") ? name : name + 2;
-
/* short-cut to see if directory has any sub-directories */
if (stat (name, &st) != -1 && st.st_nlink == 2)
return;
/* short-cut to see if directory has any sub-directories */
if (stat (name, &st) != -1 && st.st_nlink == 2)
return;
@@
-715,6
+680,12
@@
addir (char *name)
return;
}
return;
}
+ if (strcmp (name, ".") == 0) {
+ prefix = getcpy ("");
+ } else {
+ prefix = concat (name, "/", (void *)NULL);
+ }
+
/*
* Keep track of the number of directories we've seen
* so we can quit stat'ing early, if we've seen them all.
/*
* Keep track of the number of directories we've seen
* so we can quit stat'ing early, if we've seen them all.
@@
-726,22
+697,23
@@
addir (char *name)
nlink--;
continue;
}
nlink--;
continue;
}
- if (cp + NLENGTH(dp) + 2 >= name + BUFSIZ)
- continue;
- strcpy (cp, dp->d_name);
- if (stat (name, &st) != -1 && S_ISDIR(st.st_mode)) {
+ child = concat (prefix, dp->d_name, (void *)NULL);
+ if (stat (child, &st) != -1 && S_ISDIR(st.st_mode)) {
/*
* Check if this was really a symbolic link pointing at
* a directory. If not, then decrement link count.
*/
/*
* Check if this was really a symbolic link pointing at
* a directory. If not, then decrement link count.
*/
- if (lstat (name, &st) == -1)
+ if (lstat (child, &st) == -1)
nlink--;
nlink--;
- addfold (base);
+ /* addfold saves child in the list, don't free it */
+ addfold (child);
+ } else {
+ free (child);
}
}
closedir (dd);
}
}
closedir (dd);
- *--cp = '\0';
+ free(prefix);
}
/*
}
/*
@@
-753,7
+725,6
@@
static void
addfold (char *fold)
{
register int i, j;
addfold (char *fold)
{
register int i, j;
- register char *cp;
/* if necessary, reallocate the space for folder names */
if (foldp >= maxfolders) {
/* if necessary, reallocate the space for folder names */
if (foldp >= maxfolders) {
@@
-761,17
+732,16
@@
addfold (char *fold)
folds = mh_xrealloc (folds, maxfolders * sizeof(char *));
}
folds = mh_xrealloc (folds, maxfolders * sizeof(char *));
}
- cp = getcpy (fold);
for (i = start; i < foldp; i++)
for (i = start; i < foldp; i++)
- if (compare (cp, folds[i]) < 0) {
+ if (compare (fold, folds[i]) < 0) {
for (j = foldp - 1; j >= i; j--)
folds[j + 1] = folds[j];
foldp++;
for (j = foldp - 1; j >= i; j--)
folds[j + 1] = folds[j];
foldp++;
- folds[i] = cp;
+ folds[i] = fold;
return;
}
return;
}
- folds[foldp++] = cp;
+ folds[foldp++] = fold;
}
}