Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 Nov 2013 21:27:11 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r258776 - head/bin/sh
Message-ID:  <201311302127.rAULRCUC020365@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311302127.rAULRCUC020365>