From: Kern Sibbald Date: Fri, 18 May 2012 09:21:57 +0000 (+0200) Subject: Fix get_basename() -- rewrite X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=dced0408e8e86f647e805b1da1adce1fc25128ab;p=bacula%2Fbacula Fix get_basename() -- rewrite --- diff --git a/bacula/src/lib/message.c b/bacula/src/lib/message.c index f6712bca7a..48cd7a600b 100644 --- a/bacula/src/lib/message.c +++ b/bacula/src/lib/message.c @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. + Copyright (C) 2000-2012 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -92,6 +92,24 @@ const char *host_os = HOST_OS; const char *distname = DISTNAME; const char *distver = DISTVER; +/* + * Walk back in a string from end looking for a + * path separator. + * This routine is passed the start of the string and + * the end of the string, it returns either the beginning + * of the string or where it found a path separator. + */ +static const char *bstrrpath(const char *start, const char *end) +{ + while ( end > start ) { + end--; + if (IsPathSeparator(*end)) { + break; + } + } + return end; +} + /* Some message class methods */ void MSGS::lock() { @@ -937,17 +955,15 @@ send_to_file: const char *get_basename(const char *pathname) { - const char *basename, *basename2; + const char *basename; - if ((basename = strrchr(pathname, PathSeparator)) == NULL) { - basename = pathname; - if ((basename2 = strrchr(pathname, PathSeparator)) != NULL) { - basename = basename2 + 1; - } + if ((basename = bstrrpath(pathname, pathname+strlen(pathname))) == pathname) { + /* empty */ + } else if ((basename = bstrrpath(pathname, basename-1)) == pathname) { + /* empty */ } else { basename++; } - return basename; }