summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2016-04-09 14:09:14 +0000
committerjilles <jilles@FreeBSD.org>2016-04-09 14:09:14 +0000
commit1a49b5f5b011c2709fb744c8d09ebcec51173672 (patch)
tree84905e679a006c8cbb26b8209bf0a3b46d5fb75a /bin
parent15cca94824de0fbecb8dc3951d0a7e27f5a0ec67 (diff)
downloadFreeBSD-src-1a49b5f5b011c2709fb744c8d09ebcec51173672.zip
FreeBSD-src-1a49b5f5b011c2709fb744c8d09ebcec51173672.tar.gz
MFC r278818: sh: Add stsavestr(), like savestr() but allocates using
stalloc().
Diffstat (limited to 'bin')
-rw-r--r--bin/sh/cd.c10
-rw-r--r--bin/sh/expand.c5
-rw-r--r--bin/sh/memalloc.c12
-rw-r--r--bin/sh/memalloc.h1
4 files changed, 16 insertions, 12 deletions
diff --git a/bin/sh/cd.c b/bin/sh/cd.c
index 7720fad..017dfa1 100644
--- a/bin/sh/cd.c
+++ b/bin/sh/cd.c
@@ -182,7 +182,6 @@ 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
@@ -190,9 +189,7 @@ cdlogical(char *dest)
* next time we get the value of the current directory.
*/
badstat = 0;
- len = strlen(dest);
- cdcomppath = stalloc(len + 1);
- memcpy(cdcomppath, dest, len + 1);
+ cdcomppath = stsavestr(dest);
STARTSTACKSTR(p);
if (*dest == '/') {
STPUTC('/', p);
@@ -277,7 +274,6 @@ findcwd(char *dir)
{
char *new;
char *p;
- size_t len;
/*
* If our argument is NULL, we don't know the current directory
@@ -286,9 +282,7 @@ findcwd(char *dir)
*/
if (dir == NULL || curdir == NULL)
return getpwd2();
- len = strlen(dir);
- cdcomppath = stalloc(len + 1);
- memcpy(cdcomppath, dir, len + 1);
+ cdcomppath = stsavestr(dir);
STARTSTACKSTR(new);
if (*dir != '/') {
STPUTS(curdir, new);
diff --git a/bin/sh/expand.c b/bin/sh/expand.c
index 1d86698..2113ab7 100644
--- a/bin/sh/expand.c
+++ b/bin/sh/expand.c
@@ -1281,11 +1281,8 @@ addfname(char *name)
{
char *p;
struct strlist *sp;
- size_t len;
- len = strlen(name);
- p = stalloc(len + 1);
- memcpy(p, name, len + 1);
+ p = stsavestr(name);
sp = (struct strlist *)stalloc(sizeof *sp);
sp->text = p;
*exparg.lastp = sp;
diff --git a/bin/sh/memalloc.c b/bin/sh/memalloc.c
index 119f12e..a04020f 100644
--- a/bin/sh/memalloc.c
+++ b/bin/sh/memalloc.c
@@ -180,6 +180,18 @@ stunalloc(pointer p)
}
+char *
+stsavestr(const char *s)
+{
+ char *p;
+ size_t len;
+
+ len = strlen(s);
+ p = stalloc(len + 1);
+ memcpy(p, s, len + 1);
+ return p;
+}
+
void
setstackmark(struct stackmark *mark)
diff --git a/bin/sh/memalloc.h b/bin/sh/memalloc.h
index a22fa39..e8df7cb 100644
--- a/bin/sh/memalloc.h
+++ b/bin/sh/memalloc.h
@@ -52,6 +52,7 @@ void ckfree(pointer);
char *savestr(const char *);
pointer stalloc(int);
void stunalloc(pointer);
+char *stsavestr(const char *);
void setstackmark(struct stackmark *);
void popstackmark(struct stackmark *);
char *growstackstr(void);
OpenPOWER on IntegriCloud