Tito wrote:
while trying to cleanup the debianutils/which command I've spotted
a minor glitch in bb's find_execable function as it is not able to handle
zero lenght prefixes in the PATH variable:

http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html
8.3 Other Environment Variables
PATH
  snip
A zero-length prefix is a legacy feature that indicates the current
working directory. It appears as two adjacent colons ( "::" ), as an
initial colon preceding the rest of the list, or as a trailing colon
following the rest of the list. A strictly conforming application shall
use an actual pathname (such as .) to represent the current working
directory in PATH .

The real which command (really a script) in debianutils 4.4 does in fact
handle  zero-length prefixes in PATH correctly:

   for ELEMENT in $PATH; do
     if [ -z "$ELEMENT" ]; then
      ELEMENT=.
     fi

So PATCH 1 actually fixes this, the size impact is huge
and therefore it is dependent on CONFIG_DEKTOP:
Why is the size impact so huge? Why don't you use the equivalent of the script, if ELEMENT empty the ELEMENT="."?
I think the line

    if (*p == ':' && p[1]  != '.')
is even wrong and should be
    if (*p == ':')

What about this change:

        while (p) {
               n = strchr(p, ':');
                if (n)
                        *n++ = '\0';
+                if (*p == '\0')
+                        p = ".";
- if (*p != '\0') { /* it's not a PATH="foo::bar" situation */
                        ...
-                }
The size impact should be the assignment 'p = "."' and the constant ".", about 10 bytes total, no extra processing, no extra malloc.
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to