diff options
author | Ed Schouten <ed@FreeBSD.org> | 2016-05-26 13:49:40 +0000 |
---|---|---|
committer | Ed Schouten <ed@FreeBSD.org> | 2016-05-26 13:49:40 +0000 |
commit | 09a113491c5ef27ff138c9a7942bd03cc18ac4ce (patch) | |
tree | 6e8d137cd023f976c1dbe3753d71d5e776130b5f /usr.bin/ar | |
parent | 6dd81be2d2144496c553a9ecb8b82cf835a28fa0 (diff) | |
download | src-test2-09a113491c5ef27ff138c9a7942bd03cc18ac4ce.tar.gz src-test2-09a113491c5ef27ff138c9a7942bd03cc18ac4ce.zip |
Notes
Diffstat (limited to 'usr.bin/ar')
-rw-r--r-- | usr.bin/ar/write.c | 7 |
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); |