diff --git a/CLTool/src/clunix.cpp b/CLTool/src/clunix.cpp index c6d0f2e..f3307a3 100644 --- a/CLTool/src/clunix.cpp +++ b/CLTool/src/clunix.cpp @@ -69,16 +69,21 @@ void PrintUsage() { void ExtractBasename(const char *filename, char *buf, int bufSz) { int len = strlen(filename); const char *end = filename + len; - while(--end != filename) { - if(*end == '.') - { - int numChars = end - filename + 1; - int toCopy = (numChars > bufSz)? bufSz : numChars; - memcpy(buf, filename, toCopy); - buf[toCopy - 1] = '\0'; - return; + const char *ext = end; + const char *base = NULL; + while(--end != filename && !base) { + if(*end == '.') { + ext = end; + } else if(*end == '\\' || *end == '/') { + base = end + 1; } } + + int numChars = ext - base + 1; + int toCopy = ::std::min(numChars, bufSz); + memcpy(buf, base, toCopy); + buf[toCopy - 1] = '\0'; + return; } int main(int argc, char **argv) { diff --git a/CLTool/src/clwin32.cpp b/CLTool/src/clwin32.cpp index ba70d91..a8c56f5 100644 --- a/CLTool/src/clwin32.cpp +++ b/CLTool/src/clwin32.cpp @@ -43,6 +43,7 @@ #define _CRT_SECURE_NO_WARNINGS +#include #include #include #include @@ -69,19 +70,24 @@ void PrintUsage() { fprintf(stderr, "\t-j \tUse blocks for each work item in a worker queue threading model. Default: (Blocks / Threads)\n"); } -void ExtractBasename(const char *filename, char *buf, uint32 bufSz) { - size_t len = strlen(filename); +void ExtractBasename(const char *filename, char *buf, int bufSz) { + int len = strlen(filename); const char *end = filename + len; - while(--end != filename) { - if(*end == '.') - { - uint32 numChars = int32(end - filename + 1); - uint32 toCopy = (numChars > bufSz)? bufSz : numChars; - memcpy(buf, filename, toCopy); - buf[toCopy - 1] = '\0'; - return; + const char *ext = end; + const char *base = NULL; + while(--end != filename && !base) { + if(*end == '.') { + ext = end; + } else if(*end == '\\' || *end == '/') { + base = end + 1; } } + + int numChars = ext - base + 1; + int toCopy = ::std::min(numChars, bufSz); + memcpy(buf, base, toCopy); + buf[toCopy - 1] = '\0'; + return; } int _tmain(int argc, _TCHAR* argv[])