Magellan Linux

Contents of /trunk/xorg-old/patches-6.8.2-r10/4152_all_4.3.0-allow-xdm-server-quotes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 167 - (show annotations) (download)
Tue May 8 20:58:51 2007 UTC (17 years ago) by niro
File size: 1585 byte(s)
-import

1 --- xc/programs/xdm/file.c.old 2004-02-17 22:55:03.000000000 +1100
2 +++ xc/programs/xdm/file.c 2004-03-02 23:23:42.243627680 +1100
3 @@ -39,6 +39,7 @@
4 # include "dm_error.h"
5
6 # include <ctype.h>
7 +# include <stdbool.h>
8
9 static int
10 DisplayTypeMatch (DisplayType d1, DisplayType d2)
11 @@ -62,11 +63,14 @@
12 splitIntoWords (char *s)
13 {
14 char **args, **newargs;
15 - char *wordStart;
16 + char *wordStart, *thisToken;
17 int nargs;
18 -
19 + bool spaceBreakable, hadQuotes;
20 + static char DOUBLE_QUOTE=34, SINGLE_QUOTE=39;
21 +
22 args = 0;
23 nargs = 0;
24 + spaceBreakable = true;
25 while (*s)
26 {
27 while (*s && isspace (*s))
28 @@ -74,8 +78,17 @@
29 if (!*s || *s == '#')
30 break;
31 wordStart = s;
32 - while (*s && *s != '#' && !isspace (*s))
33 + hadQuotes = false;
34 + while (*s && *s != '#')
35 + {
36 + if (spaceBreakable && isspace (*s))
37 + break;
38 + if (*s == DOUBLE_QUOTE || *s == SINGLE_QUOTE){
39 + spaceBreakable = !spaceBreakable;
40 + hadQuotes = true;
41 + }
42 ++s;
43 + }
44 if (!args)
45 {
46 args = (char **) malloc (2 * sizeof (char *));
47 @@ -93,14 +106,25 @@
48 }
49 args = newargs;
50 }
51 - args[nargs] = malloc (s - wordStart + 1);
52 +
53 + args[nargs] = malloc (s - wordStart);
54 +
55 if (!args[nargs])
56 {
57 freeFileArgs (args);
58 return NULL;
59 }
60 +
61 strncpy (args[nargs], wordStart, s - wordStart);
62 +
63 args[nargs][s-wordStart] = '\0';
64 +
65 + /* Tidy up problems with quotes in file */
66 + if (hadQuotes){
67 + args[nargs][0] = ' ';
68 + args[nargs][s-wordStart-1] = ' ';
69 + }
70 +
71 ++nargs;
72 args[nargs] = NULL;
73 }