Yanked out the cstring_alloc() and cstring_lineFromFile() functions from
utility.c and replaced them with get_line_from_file() from the new grep.c. Also changed declaration in internal.h and replaced instances of cstring_lineFromFile() in dc.c and sort.c with get_line_from_file(). Tested them and they worked fine.
This commit is contained in:
		| @@ -84,7 +84,7 @@ static Line *line_newFromFile(FILE * src) | ||||
| 	Line *self; | ||||
| 	char *cstring = NULL; | ||||
|  | ||||
| 	if ((cstring = cstring_lineFromFile(src))) { | ||||
| 	if ((cstring = get_line_from_file(src))) { | ||||
| 		self = line_alloc(); | ||||
| 		if (self == NULL) { | ||||
| 			return NULL; | ||||
| @@ -304,4 +304,4 @@ int sort_main(int argc, char **argv) | ||||
| 	return(0); | ||||
| } | ||||
|  | ||||
| /* $Id: sort.c,v 1.17 2000/06/19 17:25:40 andersen Exp $ */ | ||||
| /* $Id: sort.c,v 1.18 2000/06/28 22:15:26 markw Exp $ */ | ||||
|   | ||||
							
								
								
									
										2
									
								
								dc.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								dc.c
									
									
									
									
									
								
							| @@ -170,7 +170,7 @@ int dc_main(int argc, char **argv) | ||||
| 		char *line   = NULL; | ||||
| 		char *cursor = NULL; | ||||
| 		char *token  = NULL; | ||||
| 		while ((line = cstring_lineFromFile(stdin))) { | ||||
| 		while ((line = get_line_from_file(stdin))) { | ||||
| 			cursor = line; | ||||
| 			len = number_of_tokens(line); | ||||
| 			for (i = 0; i < len; i++) { | ||||
|   | ||||
| @@ -46,8 +46,6 @@ static const char grep_usage[] = | ||||
| #endif | ||||
| 	; | ||||
|  | ||||
| static const int GROWBY = 80; /* how large we will grow strings by */ | ||||
|  | ||||
| /* options */ | ||||
| static int ignore_case       = 0; | ||||
| static int print_filename    = 0; | ||||
| @@ -62,35 +60,6 @@ static int nmatches = 0; /* keeps track of the number of matches */ | ||||
| static char *cur_file = NULL; /* the current file we are reading */ | ||||
|  | ||||
|  | ||||
| /* This returns a malloc'ed char * which must be stored and free'ed */ | ||||
| /* XXX: This function should probably go in a 'common'/'util'/'misc' file | ||||
|  * somewhere so it can be used by other folks. */ | ||||
| static char *get_line_from_file(FILE *file) | ||||
| { | ||||
| 	int ch; | ||||
| 	int idx = 0; | ||||
| 	char *linebuf = NULL; | ||||
| 	int linebufsz = 0; | ||||
|  | ||||
| 	while (1) { | ||||
| 		ch = fgetc(file); | ||||
| 		if (ch == EOF) | ||||
| 			break; | ||||
| 		/* grow the line buffer as necessary */ | ||||
| 		if (idx > linebufsz-1) | ||||
| 			linebuf = realloc(linebuf, linebufsz += GROWBY); | ||||
| 		linebuf[idx++] = (char)ch; | ||||
| 		if ((char)ch == '\n') | ||||
| 			break; | ||||
| 	} | ||||
|  | ||||
| 	if (idx == 0) | ||||
| 		return NULL; | ||||
|  | ||||
| 	linebuf[idx] = 0; | ||||
| 	return linebuf; | ||||
| } | ||||
|  | ||||
| static void print_matched_line(char *line, int linenum) | ||||
| { | ||||
| 	if (print_filename) | ||||
|   | ||||
							
								
								
									
										31
									
								
								grep.c
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								grep.c
									
									
									
									
									
								
							| @@ -46,8 +46,6 @@ static const char grep_usage[] = | ||||
| #endif | ||||
| 	; | ||||
|  | ||||
| static const int GROWBY = 80; /* how large we will grow strings by */ | ||||
|  | ||||
| /* options */ | ||||
| static int ignore_case       = 0; | ||||
| static int print_filename    = 0; | ||||
| @@ -62,35 +60,6 @@ static int nmatches = 0; /* keeps track of the number of matches */ | ||||
| static char *cur_file = NULL; /* the current file we are reading */ | ||||
|  | ||||
|  | ||||
| /* This returns a malloc'ed char * which must be stored and free'ed */ | ||||
| /* XXX: This function should probably go in a 'common'/'util'/'misc' file | ||||
|  * somewhere so it can be used by other folks. */ | ||||
| static char *get_line_from_file(FILE *file) | ||||
| { | ||||
| 	int ch; | ||||
| 	int idx = 0; | ||||
| 	char *linebuf = NULL; | ||||
| 	int linebufsz = 0; | ||||
|  | ||||
| 	while (1) { | ||||
| 		ch = fgetc(file); | ||||
| 		if (ch == EOF) | ||||
| 			break; | ||||
| 		/* grow the line buffer as necessary */ | ||||
| 		if (idx > linebufsz-1) | ||||
| 			linebuf = realloc(linebuf, linebufsz += GROWBY); | ||||
| 		linebuf[idx++] = (char)ch; | ||||
| 		if ((char)ch == '\n') | ||||
| 			break; | ||||
| 	} | ||||
|  | ||||
| 	if (idx == 0) | ||||
| 		return NULL; | ||||
|  | ||||
| 	linebuf[idx] = 0; | ||||
| 	return linebuf; | ||||
| } | ||||
|  | ||||
| static void print_matched_line(char *line, int linenum) | ||||
| { | ||||
| 	if (print_filename) | ||||
|   | ||||
| @@ -258,7 +258,7 @@ extern long getNum (const char *cp); | ||||
| extern pid_t* findPidByName( char* pidName); | ||||
| extern void *xmalloc (size_t size); | ||||
| extern int find_real_root_device_name(char* name); | ||||
| extern char *cstring_lineFromFile(FILE *f); | ||||
| extern char *get_line_from_file(FILE *file); | ||||
|  | ||||
| /* These parse entries in /etc/passwd and /etc/group.  This is desirable | ||||
|  * for BusyBox since we want to avoid using the glibc NSS stuff, which | ||||
|   | ||||
| @@ -170,7 +170,7 @@ int dc_main(int argc, char **argv) | ||||
| 		char *line   = NULL; | ||||
| 		char *cursor = NULL; | ||||
| 		char *token  = NULL; | ||||
| 		while ((line = cstring_lineFromFile(stdin))) { | ||||
| 		while ((line = get_line_from_file(stdin))) { | ||||
| 			cursor = line; | ||||
| 			len = number_of_tokens(line); | ||||
| 			for (i = 0; i < len; i++) { | ||||
|   | ||||
							
								
								
									
										4
									
								
								sort.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								sort.c
									
									
									
									
									
								
							| @@ -84,7 +84,7 @@ static Line *line_newFromFile(FILE * src) | ||||
| 	Line *self; | ||||
| 	char *cstring = NULL; | ||||
|  | ||||
| 	if ((cstring = cstring_lineFromFile(src))) { | ||||
| 	if ((cstring = get_line_from_file(src))) { | ||||
| 		self = line_alloc(); | ||||
| 		if (self == NULL) { | ||||
| 			return NULL; | ||||
| @@ -304,4 +304,4 @@ int sort_main(int argc, char **argv) | ||||
| 	return(0); | ||||
| } | ||||
|  | ||||
| /* $Id: sort.c,v 1.17 2000/06/19 17:25:40 andersen Exp $ */ | ||||
| /* $Id: sort.c,v 1.18 2000/06/28 22:15:26 markw Exp $ */ | ||||
|   | ||||
							
								
								
									
										71
									
								
								utility.c
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								utility.c
									
									
									
									
									
								
							| @@ -1586,56 +1586,35 @@ extern int find_real_root_device_name(char* name) | ||||
| } | ||||
| #endif | ||||
|  | ||||
| const unsigned int CSTRING_BUFFER_LENGTH = 1024; | ||||
| /* recursive parser that returns cstrings of arbitrary length | ||||
|  * from a FILE*  | ||||
|  */ | ||||
| static char * | ||||
| cstring_alloc(FILE* f, int depth) | ||||
| static const int GROWBY = 80; /* how large we will grow strings by */ | ||||
|  | ||||
| /* get_line_from_file() - This function reads an entire line from a text file | ||||
|  * up to a newline. It returns a malloc'ed char * which must be stored and | ||||
|  * free'ed  by the caller. */ | ||||
| extern char *get_line_from_file(FILE *file) | ||||
| { | ||||
|     char *cstring; | ||||
|     char buffer[CSTRING_BUFFER_LENGTH]; | ||||
|     int	 target = CSTRING_BUFFER_LENGTH * depth; | ||||
|     int  c, i, len, size; | ||||
| 	int ch; | ||||
| 	int idx = 0; | ||||
| 	char *linebuf = NULL; | ||||
| 	int linebufsz = 0; | ||||
|  | ||||
|     /* fill buffer */ | ||||
|     i = 0; | ||||
| 	while ((c = fgetc(f)) != EOF) { | ||||
| 		buffer[i] = (char) c; | ||||
| 		if (buffer[i++] == 0x0a) { break; } | ||||
| 		if (i == CSTRING_BUFFER_LENGTH) { break; } | ||||
|     } | ||||
|     len = i; | ||||
| 	while (1) { | ||||
| 		ch = fgetc(file); | ||||
| 		if (ch == EOF) | ||||
| 			break; | ||||
| 		/* grow the line buffer as necessary */ | ||||
| 		if (idx > linebufsz-1) | ||||
| 			linebuf = realloc(linebuf, linebufsz += GROWBY); | ||||
| 		linebuf[idx++] = (char)ch; | ||||
| 		if ((char)ch == '\n') | ||||
| 			break; | ||||
| 	} | ||||
|  | ||||
|     /* recurse or malloc? */ | ||||
|     if (len == CSTRING_BUFFER_LENGTH) { | ||||
| 		cstring = cstring_alloc(f, (depth + 1)); | ||||
|     } else { | ||||
| 		/* [special case] EOF */ | ||||
| 		if ((depth | len) == 0) { return NULL; } | ||||
| 	if (idx == 0) | ||||
| 		return NULL; | ||||
|  | ||||
| 		/* malloc */ | ||||
| 		size = target + len + 1; | ||||
| 		cstring = malloc(size); | ||||
| 		if (!cstring) { return NULL; } | ||||
| 		cstring[size - 1] = 0; | ||||
|     } | ||||
|  | ||||
|     /* copy buffer */ | ||||
|     if (cstring) { | ||||
| 		memcpy(&cstring[target], buffer, len); | ||||
|     } | ||||
|     return cstring; | ||||
| } | ||||
|  | ||||
| /*  | ||||
|  * wrapper around recursive cstring_alloc  | ||||
|  * it's the caller's responsibility to free the cstring | ||||
|  */  | ||||
| char * | ||||
| cstring_lineFromFile(FILE *f) | ||||
| { | ||||
|     return cstring_alloc(f, 0); | ||||
| 	linebuf[idx] = 0; | ||||
| 	return linebuf; | ||||
| } | ||||
|  | ||||
| /* END CODE */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user