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-d3aeb78583b8master
parent
0fc2b81df8
commit
8d9b11a847
|
@ -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
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue