Author: jilles
Date: Sat Nov 30 21:27:11 2013
New Revision: 258776
URL: http://svnweb.freebsd.org/changeset/base/258776

Log:
  sh: Prefer memcpy() to strcpy() in most cases. Remove the scopy macro.

Modified:
  head/bin/sh/cd.c
  head/bin/sh/exec.c
  head/bin/sh/expand.c
  head/bin/sh/memalloc.c
  head/bin/sh/mystring.c
  head/bin/sh/mystring.h
  head/bin/sh/show.c
  head/bin/sh/var.c

Modified: head/bin/sh/cd.c
==============================================================================
--- head/bin/sh/cd.c    Sat Nov 30 19:39:17 2013        (r258775)
+++ head/bin/sh/cd.c    Sat Nov 30 21:27:11 2013        (r258776)
@@ -182,6 +182,7 @@ cdlogical(char *dest)
        struct stat statb;
        int first;
        int badstat;
+       size_t len;
 
        /*
         *  Check each component of the path. If we find a symlink or
@@ -189,8 +190,9 @@ cdlogical(char *dest)
         *  next time we get the value of the current directory.
         */
        badstat = 0;
-       cdcomppath = stalloc(strlen(dest) + 1);
-       scopy(dest, cdcomppath);
+       len = strlen(dest);
+       cdcomppath = stalloc(len + 1);
+       memcpy(cdcomppath, dest, len + 1);
        STARTSTACKSTR(p);
        if (*dest == '/') {
                STPUTC('/', p);
@@ -275,6 +277,7 @@ findcwd(char *dir)
 {
        char *new;
        char *p;
+       size_t len;
 
        /*
         * If our argument is NULL, we don't know the current directory
@@ -283,8 +286,9 @@ findcwd(char *dir)
         */
        if (dir == NULL || curdir == NULL)
                return getpwd2();
-       cdcomppath = stalloc(strlen(dir) + 1);
-       scopy(dir, cdcomppath);
+       len = strlen(dir);
+       cdcomppath = stalloc(len + 1);
+       memcpy(cdcomppath, dir, len + 1);
        STARTSTACKSTR(new);
        if (*dir != '/') {
                STPUTS(curdir, new);

Modified: head/bin/sh/exec.c
==============================================================================
--- head/bin/sh/exec.c  Sat Nov 30 19:39:17 2013        (r258775)
+++ head/bin/sh/exec.c  Sat Nov 30 21:27:11 2013        (r258776)
@@ -187,14 +187,15 @@ padvance(const char **path, const char *
 {
        const char *p, *start;
        char *q;
-       size_t len;
+       size_t len, namelen;
 
        if (*path == NULL)
                return NULL;
        start = *path;
        for (p = start; *p && *p != ':' && *p != '%'; p++)
                ; /* nothing */
-       len = p - start + strlen(name) + 2;     /* "2" is for '/' and '\0' */
+       namelen = strlen(name);
+       len = p - start + namelen + 2;  /* "2" is for '/' and '\0' */
        STARTSTACKSTR(q);
        CHECKSTRSPACE(len, q);
        if (p != start) {
@@ -202,7 +203,7 @@ padvance(const char **path, const char *
                q += p - start;
                *q++ = '/';
        }
-       strcpy(q, name);
+       memcpy(q, name, namelen + 1);
        pathopt = NULL;
        if (*p == '%') {
                pathopt = ++p;
@@ -527,6 +528,7 @@ cmdlookup(const char *name, int add)
        const char *p;
        struct tblentry *cmdp;
        struct tblentry **pp;
+       size_t len;
 
        p = name;
        hashval = *p << 4;
@@ -541,11 +543,11 @@ cmdlookup(const char *name, int add)
        }
        if (add && cmdp == NULL) {
                INTOFF;
-               cmdp = *pp = ckmalloc(sizeof (struct tblentry)
-                                       + strlen(name) + 1);
+               len = strlen(name);
+               cmdp = *pp = ckmalloc(sizeof (struct tblentry) + len + 1);
                cmdp->next = NULL;
                cmdp->cmdtype = CMDUNKNOWN;
-               strcpy(cmdp->cmdname, name);
+               memcpy(cmdp->cmdname, name, len + 1);
                INTON;
        }
        lastcmdentry = pp;

Modified: head/bin/sh/expand.c
==============================================================================
--- head/bin/sh/expand.c        Sat Nov 30 19:39:17 2013        (r258775)
+++ head/bin/sh/expand.c        Sat Nov 30 21:27:11 2013        (r258776)
@@ -1307,9 +1307,11 @@ addfname(char *name)
 {
        char *p;
        struct strlist *sp;
+       size_t len;
 
-       p = stalloc(strlen(name) + 1);
-       scopy(name, p);
+       len = strlen(name);
+       p = stalloc(len + 1);
+       memcpy(p, name, len + 1);
        sp = (struct strlist *)stalloc(sizeof *sp);
        sp->text = p;
        *exparg.lastp = sp;

Modified: head/bin/sh/memalloc.c
==============================================================================
--- head/bin/sh/memalloc.c      Sat Nov 30 19:39:17 2013        (r258775)
+++ head/bin/sh/memalloc.c      Sat Nov 30 21:27:11 2013        (r258776)
@@ -98,9 +98,11 @@ char *
 savestr(const char *s)
 {
        char *p;
+       size_t len;
 
-       p = ckmalloc(strlen(s) + 1);
-       scopy(s, p);
+       len = strlen(s);
+       p = ckmalloc(len + 1);
+       memcpy(p, s, len + 1);
        return p;
 }
 

Modified: head/bin/sh/mystring.c
==============================================================================
--- head/bin/sh/mystring.c      Sat Nov 30 19:39:17 2013        (r258775)
+++ head/bin/sh/mystring.c      Sat Nov 30 21:27:11 2013        (r258776)
@@ -42,7 +42,6 @@ __FBSDID("$FreeBSD$");
  * String functions.
  *
  *     equal(s1, s2)           Return true if strings are equal.
- *     scopy(from, to)         Copy a string.
  *     number(s)               Convert a string of digits to an integer.
  *     is_number(s)            Return true if s is a string of digits.
  */
@@ -60,10 +59,6 @@ char nullstr[1];             /* zero length string 
  * equal - #defined in mystring.h
  */
 
-/*
- * scopy - #defined in mystring.h
- */
-
 
 /*
  * prefix -- see if pfx is a prefix of string.

Modified: head/bin/sh/mystring.h
==============================================================================
--- head/bin/sh/mystring.h      Sat Nov 30 19:39:17 2013        (r258775)
+++ head/bin/sh/mystring.h      Sat Nov 30 21:27:11 2013        (r258776)
@@ -40,4 +40,3 @@ int number(const char *);
 int is_number(const char *);
 
 #define equal(s1, s2)  (strcmp(s1, s2) == 0)
-#define scopy(s1, s2)  ((void)strcpy(s2, s1))

Modified: head/bin/sh/show.c
==============================================================================
--- head/bin/sh/show.c  Sat Nov 30 19:39:17 2013        (r258775)
+++ head/bin/sh/show.c  Sat Nov 30 21:27:11 2013        (r258776)
@@ -390,11 +390,11 @@ opentrace(void)
                        else
                                p = "/tmp";
                }
-               scopy(p, s);
+               strcpy(s, p);
                strcat(s, "/trace");
        }
 #else
-       scopy("./trace", s);
+       strcpy(s, "./trace");
 #endif /* not_this_way */
        if ((tracefile = fopen(s, "a")) == NULL) {
                fprintf(stderr, "Can't open %s: %s\n", s, strerror(errno));

Modified: head/bin/sh/var.c
==============================================================================
--- head/bin/sh/var.c   Sat Nov 30 19:39:17 2013        (r258775)
+++ head/bin/sh/var.c   Sat Nov 30 21:27:11 2013        (r258776)
@@ -224,8 +224,9 @@ void
 setvar(const char *name, const char *val, int flags)
 {
        const char *p;
-       int len;
-       int namelen;
+       size_t len;
+       size_t namelen;
+       size_t vallen;
        char *nameeq;
        int isbad;
 
@@ -244,18 +245,20 @@ setvar(const char *name, const char *val
        }
        namelen = p - name;
        if (isbad)
-               error("%.*s: bad variable name", namelen, name);
+               error("%.*s: bad variable name", (int)namelen, name);
        len = namelen + 2;              /* 2 is space for '=' and '\0' */
        if (val == NULL) {
                flags |= VUNSET;
+               vallen = 0;
        } else {
-               len += strlen(val);
+               vallen = strlen(val);
+               len += vallen;
        }
        nameeq = ckmalloc(len);
        memcpy(nameeq, name, namelen);
        nameeq[namelen] = '=';
        if (val)
-               scopy(val, nameeq + namelen + 1);
+               memcpy(nameeq + namelen + 1, val, vallen + 1);
        else
                nameeq[namelen + 1] = '\0';
        setvareq(nameeq, flags);
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to