Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: basesrc/lib/libc/gen



Simon Burge <simonb%netbsd.org@localhost> writes:

> Module Name:  basesrc
> Committed By: simonb
> Date:         Tue Sep 18 05:09:38 UTC 2001
> 
> Modified Files:
>       basesrc/lib/libc/gen: execvp.c

I guess the first alloca and strcpy is unnecessary.  Also, it calls
strlen within the loop but it always returns same value.  How about
following?

enami.
Index: execvp.c
===================================================================
RCS file: /cvsroot/basesrc/lib/libc/gen/execvp.c,v
retrieving revision 1.17
diff -c -r1.17 execvp.c
*** execvp.c    2001/09/18 05:09:37     1.17
--- execvp.c    2001/09/18 05:25:42
***************
*** 70,93 ****
        const char **memp;
        int cnt;
        size_t lp, ln;
-       char *p;
        int eacces = 0;
        unsigned int etxtbsy = 0;
!       char *cur, *path, buf[PATH_MAX];
!       const char *bp;
  
        _DIAGASSERT(name != NULL);
  
        /* "" is not a valid filename; check this before traversing PATH. */
        if (name[0] == '\0') {
                errno = ENOENT;
-               path = NULL;
                goto done;
        }
        /* If it's an absolute or relative path name, it's easy. */
        if (strchr(name, '/')) {
                bp = name;
!               cur = path = NULL;
                goto retry;
        }
        bp = buf;
--- 70,91 ----
        const char **memp;
        int cnt;
        size_t lp, ln;
        int eacces = 0;
        unsigned int etxtbsy = 0;
!       char buf[PATH_MAX];
!       const char *bp, *path, *p;
  
        _DIAGASSERT(name != NULL);
  
        /* "" is not a valid filename; check this before traversing PATH. */
        if (name[0] == '\0') {
                errno = ENOENT;
                goto done;
        }
        /* If it's an absolute or relative path name, it's easy. */
        if (strchr(name, '/')) {
                bp = name;
!               path = "";
                goto retry;
        }
        bp = buf;
***************
*** 95,115 ****
        /* Get the path we're searching. */
        if (!(path = getenv("PATH")))
                path = _PATH_DEFPATH;
-       cur = alloca(strlen(path) + 1);
-       strcpy(cur, path);
-       path = cur;
  
!       while ((p = strsep(&cur, ":")) != NULL) {
                /*
                 * It's a SHELL path -- double, leading and trailing colons
                 * mean the current directory.
                 */
!               if (!*p) {
                        p = ".";
                        lp = 1;
                } else
!                       lp = strlen(p);
!               ln = strlen(name);
  
                /*
                 * If the path is too long complain.  This is a possible
--- 93,113 ----
        /* Get the path we're searching. */
        if (!(path = getenv("PATH")))
                path = _PATH_DEFPATH;
  
!       ln = strlen(name);
!       do {
!               /* Find this path element. */
!               for (p = path; *path != 0 && *path != ':'; path++)
!                       continue;
                /*
                 * It's a SHELL path -- double, leading and trailing colons
                 * mean the current directory.
                 */
!               if (p == path) {
                        p = ".";
                        lp = 1;
                } else
!                       lp = path - p;
  
                /*
                 * If the path is too long complain.  This is a possible
***************
*** 154,160 ****
                default:
                        goto done;
                }
!       }
        if (eacces)
                errno = EACCES;
        else if (!errno)
--- 152,158 ----
                default:
                        goto done;
                }
!       } while (*path++ == ':');       /* Otherwise, *path is NUL */
        if (eacces)
                errno = EACCES;
        else if (!errno)



Home | Main Index | Thread Index | Old Index