summaryrefslogtreecommitdiff
path: root/openbsd-compat/basename.c
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@zip.com.au>2005-11-10 16:42:51 +1100
committerDarren Tucker <dtucker@zip.com.au>2005-11-10 16:42:51 +1100
commitad1dada0b4c2d450346984c88e3bc74cdfe2a888 (patch)
treec9b01256ba5f8e01f551526db62f1a807404a3b4 /openbsd-compat/basename.c
parent09471d8a1f7e46116ba44f0f08c756196dbf6c70 (diff)
- (dtucker) [openbsd-compat/basename.c] Update from OpenBSD 1.11 -> 1.14.
Removal of rcsid, will no longer strlcpy parts of the string.
Diffstat (limited to 'openbsd-compat/basename.c')
-rw-r--r--openbsd-compat/basename.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/openbsd-compat/basename.c b/openbsd-compat/basename.c
index 5171cd64..ad040e13 100644
--- a/openbsd-compat/basename.c
+++ b/openbsd-compat/basename.c
@@ -1,7 +1,7 @@
-/* $OpenBSD: basename.c,v 1.11 2003/06/17 21:56:23 millert Exp $ */
+/* $OpenBSD: basename.c,v 1.14 2005/08/08 08:05:33 espie Exp $ */
/*
- * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
+ * Copyright (c) 1997, 2004 Todd C. Miller <Todd.Miller@courtesan.com>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -21,31 +21,30 @@
#include "includes.h"
#ifndef HAVE_BASENAME
-#ifndef lint
-static char rcsid[] = "$OpenBSD: basename.c,v 1.11 2003/06/17 21:56:23 millert Exp $";
-#endif /* not lint */
-
char *
basename(const char *path)
{
static char bname[MAXPATHLEN];
- register const char *endp, *startp;
+ size_t len;
+ const char *endp, *startp;
/* Empty or NULL string gets treated as "." */
if (path == NULL || *path == '\0') {
- (void)strlcpy(bname, ".", sizeof bname);
- return(bname);
+ bname[0] = '.';
+ bname[1] = '\0';
+ return (bname);
}
- /* Strip trailing slashes */
+ /* Strip any trailing slashes */
endp = path + strlen(path) - 1;
while (endp > path && *endp == '/')
endp--;
- /* All slashes become "/" */
+ /* All slashes becomes "/" */
if (endp == path && *endp == '/') {
- (void)strlcpy(bname, "/", sizeof bname);
- return(bname);
+ bname[0] = '/';
+ bname[1] = '\0';
+ return (bname);
}
/* Find the start of the base */
@@ -53,12 +52,14 @@ basename(const char *path)
while (startp > path && *(startp - 1) != '/')
startp--;
- if (endp - startp + 2 > sizeof(bname)) {
+ len = endp - startp + 1;
+ if (len >= sizeof(bname)) {
errno = ENAMETOOLONG;
- return(NULL);
+ return (NULL);
}
- strlcpy(bname, startp, endp - startp + 2);
- return(bname);
+ memcpy(bname, startp, len);
+ bname[len] = '\0';
+ return (bname);
}
#endif /* !defined(HAVE_BASENAME) */