Le 2003-02-05, Tim Robbins écrivait :

> Since revision 1.11 of src/usr.sbin/cron/lib/env.c, you need to put the
> value of the environment variable inside quotes if it contains any spaces.
> I suspect that this change of behaviour was unintentional given that the
> implementation differs from the manual page. I'll investigate and fix
> it if it's a bug. In the mean time, use something like this instead:
> CVSUP="/usr/local/bin/cvsup -g -L2 -h localhost"

Right, the according to the man page inner whitespace in the unquoted
right-hand part of an environment variable assignment should be preserved.
Please try the following patch:

Index: lib/env.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/cron/lib/env.c,v
retrieving revision 1.11
diff -u -r1.11 env.c
--- lib/env.c   23 May 2002 13:16:30 -0000      1.11
+++ lib/env.c   7 Feb 2003 10:34:48 -0000
@@ -193,14 +193,16 @@
                                        break;
                                }
                        } else {
-                               if (isspace (*c)) {
-                                       state++;
-                                       c++;
-                                       break;
-                               }
-                               if (state == NAME && *c == '=') {
-                                       state++;
-                                       break;
+                               if (state == NAME) {
+                                       if (isspace (*c)) {
+                                               c++;
+                                               state++;
+                                               break;
+                                       }
+                                       if (*c == '=') {
+                                               state++;
+                                               break;
+                                       }
                                }
                        }
                        *str++ = *c++;
@@ -232,9 +234,14 @@
                Set_LineNum(fileline);
                return (FALSE);
        }
+       if (state == VALUE) {
+               /* End of unquoted value: trim trailing whitespace */
+               c = val + strlen (val);
+               while (c > val && isspace (*(c - 1)))
+                       *(--c) = '\0';
+       }
 
-       /* 2 fields from parser; looks like an env setting
-        */
+       /* 2 fields from parser; looks like an env setting */
 
        if (strlen(name) + 1 + strlen(val) >= MAX_ENVSTR-1)
                return (FALSE);

-- 
    [EMAIL PROTECTED]

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to