summaryrefslogtreecommitdiff
path: root/usr.bin/ar
diff options
context:
space:
mode:
authorEd Schouten <ed@FreeBSD.org>2016-05-26 13:49:40 +0000
committerEd Schouten <ed@FreeBSD.org>2016-05-26 13:49:40 +0000
commit09a113491c5ef27ff138c9a7942bd03cc18ac4ce (patch)
tree6e8d137cd023f976c1dbe3753d71d5e776130b5f /usr.bin/ar
parent6dd81be2d2144496c553a9ecb8b82cf835a28fa0 (diff)
downloadsrc-test2-09a113491c5ef27ff138c9a7942bd03cc18ac4ce.tar.gz
src-test2-09a113491c5ef27ff138c9a7942bd03cc18ac4ce.zip
Notes
Diffstat (limited to 'usr.bin/ar')
-rw-r--r--usr.bin/ar/write.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/usr.bin/ar/write.c b/usr.bin/ar/write.c
index f78fbda36ba7..96f419909489 100644
--- a/usr.bin/ar/write.c
+++ b/usr.bin/ar/write.c
@@ -124,6 +124,7 @@ create_obj_from_file(struct bsdar *bsdar, const char *name, time_t mtime)
struct ar_obj *obj;
struct stat sb;
const char *bname;
+ char *tmpname;
if (name == NULL)
return (NULL);
@@ -137,7 +138,10 @@ create_obj_from_file(struct bsdar *bsdar, const char *name, time_t mtime)
return (NULL);
}
- if ((bname = basename(name)) == NULL)
+ tmpname = strdup(name);
+ if (tmpname == NULL)
+ bsdar_errc(bsdar, EX_SOFTWARE, errno, "strdup failed");
+ if ((bname = basename(tmpname)) == NULL)
bsdar_errc(bsdar, EX_SOFTWARE, errno, "basename failed");
if (bsdar->options & AR_TR && strlen(bname) > _TRUNCATE_LEN) {
if ((obj->name = malloc(_TRUNCATE_LEN + 1)) == NULL)
@@ -147,6 +151,7 @@ create_obj_from_file(struct bsdar *bsdar, const char *name, time_t mtime)
} else
if ((obj->name = strdup(bname)) == NULL)
bsdar_errc(bsdar, EX_SOFTWARE, errno, "strdup failed");
+ free(tmpname);
if (fstat(obj->fd, &sb) < 0) {
bsdar_warnc(bsdar, errno, "can't fstat file: %s", obj->name);