diff options
author | ed <ed@FreeBSD.org> | 2016-05-26 13:49:40 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2016-05-26 13:49:40 +0000 |
commit | 32ba4de644e73d19661af89589272d631286af54 (patch) | |
tree | 6e8d137cd023f976c1dbe3753d71d5e776130b5f /usr.bin | |
parent | 68577ced5e08fb5b933dc0310c2d27923d981b37 (diff) | |
download | FreeBSD-src-32ba4de644e73d19661af89589272d631286af54.zip FreeBSD-src-32ba4de644e73d19661af89589272d631286af54.tar.gz |
Make code compile when basename() is POSIX compliant.
In addition to the previous change I made to ar.c, pull in another
basename() related fix. This change is similar to the one made to the
ELF Toolchain version of ar, with the difference that the ELF Toolchain
version lacks error handling for the strdup() call.
Reviewed by: emaste
Differential Revision: https://reviews.freebsd.org/D6467
Diffstat (limited to 'usr.bin')
-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 f78fbda..96f4199 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); |