From 8d9b11a84744c98ce3349f7532d90778a383d571 Mon Sep 17 00:00:00 2001 From: Chris Allegretta Date: Fri, 19 Jan 2001 04:17:24 +0000 Subject: [PATCH] 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 --- ChangeLog | 2 ++ files.c | 53 ++++++++++++++++++++++++++--------------------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index e12a8a03..48e74b34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,8 @@ CVS code - - 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, discovered by David Sobon). + username_tab_completion() + - Optimization and removal of useless vars (Rocco). nano 0.9.99-pre1 - 01/17/2001 General diff --git a/files.c b/files.c index 5d19a0b5..909c7eae 100644 --- a/files.c +++ b/files.c @@ -575,7 +575,6 @@ int do_writeout_void(void) } #ifndef DISABLE_TABCOMP -static char **homedirs; /* Return a malloc()ed string containing the actual directory, used * 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 **matches = (char **) NULL, *line = NULL, *lineptr; - char *matchline = NULL, *matchdir = NULL; + char *matchline = NULL; int fd, i = 0, status = 1; char byte[1]; @@ -712,20 +711,15 @@ char **username_tab_completion(char *buf, int *num_matches) return NULL; } - if (homedirs != NULL) { - for (i = 0; i < *num_matches; i++) - free(homedirs[i]); - free(homedirs); - homedirs = (char **) NULL; - *num_matches = 0; - } + *num_matches = 0; matches = nmalloc(BUFSIZ * sizeof(char *)); - homedirs = nmalloc(BUFSIZ * sizeof(char *)); + strcat(buf, "*"); + do { i = 0; - line = nmalloc(1); - while ((status = read(fd, byte, 1)) != 0 && byte[0] != '\n') { + line = nrealloc(line, 1); + while ((status = read(fd, byte, 1)) == 1 && byte[0] != '\n') { line[i] = byte[0]; i++; @@ -740,41 +734,46 @@ char **username_tab_completion(char *buf, int *num_matches) if (check_wildcard_match(line, &buf[1]) == TRUE) { - if (*num_matches == BUFSIZ) - break; - /* Cool, found a match. Add it to the list * This makes a lot more sense to me (Chris) this way... */ + matchline = nmalloc(strlen(line) + 2); sprintf(matchline, "~%s", line); for (i = 0; i <= 4 && lineptr != NULL; i++) lineptr = strtok(NULL, ":"); - if (lineptr == NULL) - break; + if (lineptr != NULL) { - matchdir = mallocstrcpy(matchdir, lineptr); - homedirs[*num_matches] = matchdir; - matches[*num_matches] = matchline; + /* /etc/passwd entry has the required number of fields */ - ++*num_matches; + matches[*num_matches] = matchline; + ++*num_matches; - /* If there's no more room, bail out */ - if (*num_matches == BUFSIZ) - break; + /* If there's no more room, bail out */ + if (*num_matches == BUFSIZ) + 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); - return matches; + #ifdef DEBUG fprintf(stderr, "\nin username_tab_completion\n"); #endif + return (matches); } -- 2.39.5