From 6e7d1bfe4c30516dd1341e91dfc0a7af500fdecc Mon Sep 17 00:00:00 2001 From: bbraun Date: Sat, 21 Dec 2002 07:12:35 +0000 Subject: Reduce libc.so's memory footprint by lazily allocating memory used internally by basename() and dirname(). Reviewed by: eric --- lib/libc/gen/basename.c | 10 ++++++++-- lib/libc/gen/dirname.c | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'lib/libc') diff --git a/lib/libc/gen/basename.c b/lib/libc/gen/basename.c index cbeb1d5..9bd2dc2 100644 --- a/lib/libc/gen/basename.c +++ b/lib/libc/gen/basename.c @@ -42,9 +42,15 @@ char * basename(path) const char *path; { - static char bname[MAXPATHLEN]; + static char *bname = NULL; const char *endp, *startp; + if (bname == NULL) { + bname = (char *)malloc(MAXPATHLEN); + if (bname == NULL) + return(NULL); + } + /* Empty or NULL string gets treated as "." */ if (path == NULL || *path == '\0') { (void)strcpy(bname, "."); @@ -67,7 +73,7 @@ basename(path) while (startp > path && *(startp - 1) != '/') startp--; - if (endp - startp + 2 > sizeof(bname)) { + if (endp - startp + 2 > MAXPATHLEN) { errno = ENAMETOOLONG; return(NULL); } diff --git a/lib/libc/gen/dirname.c b/lib/libc/gen/dirname.c index 8e287af..4e5ecb4 100644 --- a/lib/libc/gen/dirname.c +++ b/lib/libc/gen/dirname.c @@ -42,9 +42,15 @@ char * dirname(path) const char *path; { - static char bname[MAXPATHLEN]; + static char *bname = NULL; const char *endp; + if (bname == NULL) { + bname = (char *)malloc(MAXPATHLEN); + if (bname == NULL) + return(NULL); + } + /* Empty or NULL string gets treated as "." */ if (path == NULL || *path == '\0') { (void)strcpy(bname, "."); @@ -70,7 +76,7 @@ dirname(path) } while (endp > path && *endp == '/'); } - if (endp - path + 2 > sizeof(bname)) { + if (endp - path + 2 > MAXPATHLEN) { errno = ENAMETOOLONG; return(NULL); } -- cgit v1.1