-# define MAXITEMS 1024
- register DIR *dir_fd;
- register numitems,
- name_length, /* Length of prefix (file name) */
- looking_for_lognames; /* True if looking for login names */
- char tilded_dir[FILSIZ + 1], /* dir after ~ expansion */
- dir[FILSIZ + 1], /* /x/y/z/ part in /x/y/z/f */
- name[MAXNAMLEN + 1], /* f part in /d/d/d/f */
- extended_name[MAXNAMLEN+1], /* the recognized (extended) name */
- *entry; /* single directory entry or logname */
- static char
- **items = NULL; /* file names when doing a LIST */
-
- if (items != NULL)
- FREE_ITEMS (items);
-
- looking_for_lognames = (*word == '~') && (index (word, '/') == NULL);
- if (looking_for_lognames) /* Looking for login names? */
- {
- setpwent (); /* Open passwd file */
- copyn (name, &word[1], MAXNAMLEN); /* name sans ~ */
- }
- else
- { /* Open directory */
- extract_dir_and_name (word, dir, name);
- if (tilde (tilded_dir, dir) == 0) /* expand ~user/... stuff */
- return (0);
- if ((dir_fd = opendir (*tilded_dir ? tilded_dir : ".")) == NULL)
- return (0);
- }
-
- name_length = strlen (name);
-
- for (numitems = 0; entry = getentry (dir_fd, looking_for_lognames);)
- {
- if (!is_prefix (name, entry))
- continue;
-
- /* Don't match . files on null prefix match */
- if (name_length == 0 && entry[0] == '.' && !looking_for_lognames)
- continue;
-
- if (command == LIST) /* LIST command */
- {
- extern char *malloc ();
- if (numitems >= MAXITEMS)
- {
- printf ("\nYikes!! Too many %s!!\n",
- looking_for_lognames ? "names in password file":"files");
- break;
- }
- if (items == NULL)
- {
- items = (char **) calloc (sizeof (items[1]), MAXITEMS);
- if (items == NULL)
- break;
- }
- if ((items[numitems] = malloc (strlen(entry) + 1)) == NULL)
- {
- printf ("out of mem\n");
- break;
- }
- copyn (items[numitems], entry, MAXNAMLEN);
- numitems++;
+ static char **items = NULL;
+ register DIR *dir_fd;
+ register numitems = 0, ignoring = TRUE, nignored = 0;
+ register name_length, looking_for_lognames;
+ char tilded_dir[MAXPATHLEN + 1], dir[MAXPATHLEN + 1];
+ char name[MAXNAMLEN + 1], extended_name[MAXNAMLEN+1];
+ char *entry;
+ static int ignored(), is_prefix(), recognize();
+#define MAXITEMS 1024
+
+ if (items != NULL)
+ FREE_ITEMS(items);
+
+ looking_for_lognames = (*word == '~') && (index(word, '/') == NULL);
+ if (looking_for_lognames) {
+ (void) setpwent();
+ copyn(name, &word[1], MAXNAMLEN); /* name sans ~ */
+ } else {
+ extract_dir_and_name(word, dir, name);
+ if (tilde(tilded_dir, dir) == 0)
+ return (0);
+ dir_fd = opendir(*tilded_dir ? tilded_dir : ".");
+ if (dir_fd == NULL)
+ return (0);