summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2016-05-26 13:49:40 +0000
committered <ed@FreeBSD.org>2016-05-26 13:49:40 +0000
commit32ba4de644e73d19661af89589272d631286af54 (patch)
tree6e8d137cd023f976c1dbe3753d71d5e776130b5f /usr.bin
parent68577ced5e08fb5b933dc0310c2d27923d981b37 (diff)
downloadFreeBSD-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.c7
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);
OpenPOWER on IntegriCloud