Opened 19 years ago
Closed 19 years ago
#5 closed defect (wontfix)
@response handling incomplete
Reported by: | Yuri Dario | Owned by: | bird |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | libc | Version: | |
Severity: | normal | Keywords: | |
Cc: |
Description
response file handling has problems: doesn't accept long lines, does not support multiple args per line, doesn't remove white spaces.
This is a partial fix
Index: lib/misc/response.c =================================================================== RCS file: /netlabs.cvs/libc/src/emx/src/lib/misc/response.c,v retrieving revision 1.1.1.1 diff -u -r1.1.1.1 response.c --- lib/misc/response.c 2004/06/08 12:03:44 1.1.1.1 +++ lib/misc/response.c 2005/10/24 14:56:24 @@ -1,6 +1,7 @@ /* response.c (emx+gcc) -- Copyright (c) 1990-1996 by Eberhard Mattes */ #include "libc-alias.h" +#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -23,7 +24,7 @@ { int i, old_argc, new_argc, new_alloc; char **old_argv, **new_argv; - char line[1+512], *p; + char line[1+8192], *p; FILE *f; old_argc = *argcp; old_argv = *argvp; @@ -47,12 +48,29 @@ line[0] = _ARG_NONZERO|_ARG_RESPONSE; while (fgets (line+1, sizeof (line)-1, f) != NULL) { - p = strchr (line+1, '\n'); - if (p != NULL) *p = 0; - p = strdup (line); - if (p == NULL) - goto out_of_memory; - RPUT (p+1); + char* token; + p = line+1; + // YD tokenize line, OOo uses \t to separate arguments + token = strtok( p, " \t\r\n"); + while( token) { + char* p1 = strdup (token); + if (p1 == NULL) + goto out_of_memory; + // YD strip begin/end whitespaces + while (isspace(p1[strlen(p1)-1])) + p1[strlen(p1)-1] = 0; + while (isspace(*p1)) + p1++; + // YD strip begin&end quotes + if (*p1 == '\"' && p1[strlen(p1)-1] == '\"') { + p1++; + p1[strlen(p1)-1] = 0; + } + // YD don't add zero-len arguments! + if (strlen(p1)>0) + RPUT (p1); + token = strtok( NULL, " \t\r\n"); + } } if (ferror (f)) {
Change History (2)
comment:1 by , 19 years ago
Component: | baselayout → libc |
---|
comment:2 by , 19 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
I've applied the read buffer bit because it doesn't really harm anylonger.
However I'm not going to apply anything else. The problem is that it will break current behaviour: 1. it should not remove empty lines, 2) it doesn't respect escaped quotes, 3) single quotes aren't considered at all but they are on the commandline, 4) there are too many strlen()'s.
If you want a responsifile reader which does something like the patch suggest, it will have to be a separate function. (The code should also be optimized, because if it isn't it will either be rejected or waste my time having to optimize it myself.) Testcase(s) would also be nice (one testcase spawning child processes of itself which checks that all the quirks works out).