﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	severity	resolution	keywords	cc
5	@response handling incomplete	Yuri Dario	bird	"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))
             {

}}}
"	defect	closed	normal		libc		normal	wontfix		
