1
1

username_tab_completion(): - Optimization and removal of useless vars (Rocco).

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@491 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Этот коммит содержится в:
Chris Allegretta 2001-01-19 04:17:24 +00:00
родитель 0fc2b81df8
Коммит 8d9b11a847
2 изменённых файлов: 28 добавлений и 27 удалений

Просмотреть файл

@ -4,6 +4,8 @@ CVS code -
- Don't free() realname on error, if it needs to be free()d later - Don't free() realname on error, if it needs to be free()d later
it will be (fixes crash on successful write after failed write, it will be (fixes crash on successful write after failed write,
discovered by David Sobon). discovered by David Sobon).
username_tab_completion()
- Optimization and removal of useless vars (Rocco).
nano 0.9.99-pre1 - 01/17/2001 nano 0.9.99-pre1 - 01/17/2001
General General

53
files.c
Просмотреть файл

@ -575,7 +575,6 @@ int do_writeout_void(void)
} }
#ifndef DISABLE_TABCOMP #ifndef DISABLE_TABCOMP
static char **homedirs;
/* Return a malloc()ed string containing the actual directory, used /* Return a malloc()ed string containing the actual directory, used
* to convert ~user and ~/ notation... * to convert ~user and ~/ notation...
@ -703,7 +702,7 @@ int append_slash_if_dir(char *buf, int *lastWasTab, int *place)
char **username_tab_completion(char *buf, int *num_matches) char **username_tab_completion(char *buf, int *num_matches)
{ {
char **matches = (char **) NULL, *line = NULL, *lineptr; char **matches = (char **) NULL, *line = NULL, *lineptr;
char *matchline = NULL, *matchdir = NULL; char *matchline = NULL;
int fd, i = 0, status = 1; int fd, i = 0, status = 1;
char byte[1]; char byte[1];
@ -712,20 +711,15 @@ char **username_tab_completion(char *buf, int *num_matches)
return NULL; return NULL;
} }
if (homedirs != NULL) { *num_matches = 0;
for (i = 0; i < *num_matches; i++)
free(homedirs[i]);
free(homedirs);
homedirs = (char **) NULL;
*num_matches = 0;
}
matches = nmalloc(BUFSIZ * sizeof(char *)); matches = nmalloc(BUFSIZ * sizeof(char *));
homedirs = nmalloc(BUFSIZ * sizeof(char *));
strcat(buf, "*"); strcat(buf, "*");
do { do {
i = 0; i = 0;
line = nmalloc(1); line = nrealloc(line, 1);
while ((status = read(fd, byte, 1)) != 0 && byte[0] != '\n') { while ((status = read(fd, byte, 1)) == 1 && byte[0] != '\n') {
line[i] = byte[0]; line[i] = byte[0];
i++; i++;
@ -740,41 +734,46 @@ char **username_tab_completion(char *buf, int *num_matches)
if (check_wildcard_match(line, &buf[1]) == TRUE) { if (check_wildcard_match(line, &buf[1]) == TRUE) {
if (*num_matches == BUFSIZ)
break;
/* Cool, found a match. Add it to the list /* Cool, found a match. Add it to the list
* This makes a lot more sense to me (Chris) this way... * This makes a lot more sense to me (Chris) this way...
*/ */
matchline = nmalloc(strlen(line) + 2); matchline = nmalloc(strlen(line) + 2);
sprintf(matchline, "~%s", line); sprintf(matchline, "~%s", line);
for (i = 0; i <= 4 && lineptr != NULL; i++) for (i = 0; i <= 4 && lineptr != NULL; i++)
lineptr = strtok(NULL, ":"); lineptr = strtok(NULL, ":");
if (lineptr == NULL) if (lineptr != NULL) {
break;
matchdir = mallocstrcpy(matchdir, lineptr); /* /etc/passwd entry has the required number of fields */
homedirs[*num_matches] = matchdir;
matches[*num_matches] = matchline;
++*num_matches; matches[*num_matches] = matchline;
++*num_matches;
/* If there's no more room, bail out */ /* If there's no more room, bail out */
if (*num_matches == BUFSIZ) if (*num_matches == BUFSIZ)
break; break;
}
else {
/* /etc/passwd entry is missing at least one field */
free(matchline);
}
} }
free(line);
} while (status != 0); } while (status == 1);
free(line);
close(fd); close(fd);
return matches;
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "\nin username_tab_completion\n"); fprintf(stderr, "\nin username_tab_completion\n");
#endif #endif
return (matches); return (matches);
} }