X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcommon%2Ffname.c;h=444d4c7b1443cde0c1d9ca559582098021872248;hb=74108cd74fc3ca3ad4f69b743233fa79791106b9;hp=fd907e82dfebdaf85fc57d7c8a3fe5eb805eb3a3;hpb=1081c1dcdddab5598c18398ac0991daf73bc9d8f;p=cc65 diff --git a/src/common/fname.c b/src/common/fname.c index fd907e82d..444d4c7b1 100644 --- a/src/common/fname.c +++ b/src/common/fname.c @@ -6,10 +6,10 @@ /* */ /* */ /* */ -/* (C) 2000 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ +/* (C) 2000-2003 Ullrich von Bassewitz */ +/* Römerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -46,6 +46,54 @@ +const char* FindExt (const char* Name) +/* Return a pointer to the file extension in Name or NULL if there is none */ +{ + const char* S; + + /* Get the length of the name */ + unsigned Len = strlen (Name); + if (Len < 2) { + return 0; + } + + /* Get a pointer to the last character */ + S = Name + Len - 1; + + /* Search for the dot, beware of subdirectories */ + while (S >= Name && *S != '.' && *S != '\\' && *S != '/') { + --S; + } + + /* Did we find an extension? */ + if (*S == '.') { + return S; + } else { + return 0; + } +} + + + +const char* FindName (const char* Path) +/* Return a pointer to the file name in Path. If there is no path leading to + * the file, the function returns Path as name. + */ +{ + /* Get the length of the name */ + int Len = strlen (Path); + + /* Search for the path separator */ + while (Len > 0 && Path[Len-1] != '\\' && Path[Len-1] != '/') { + --Len; + } + + /* Return the name or path */ + return Path + Len; +} + + + char* MakeFilename (const char* Origin, const char* Ext) /* Make a new file name from Origin and Ext. If Origin has an extension, it * is removed and Ext is appended. If Origin has no extension, Ext is simply @@ -53,20 +101,19 @@ char* MakeFilename (const char* Origin, const char* Ext) * The function may be used to create "foo.o" from "foo.s". */ { - /* Construct the name */ - char* Result; - const char* P = strrchr (Origin, '.'); + char* Out; + const char* P = FindExt (Origin); if (P == 0) { - /* No dot, add the extension */ - Result = xmalloc (strlen (Origin) + strlen (Ext) + 1); - strcpy (Result, Origin); - strcat (Result, Ext); + /* No dot, add the extension */ + Out = xmalloc (strlen (Origin) + strlen (Ext) + 1); + strcpy (Out, Origin); + strcat (Out, Ext); } else { - Result = xmalloc (P - Origin + strlen (Ext) + 1); - memcpy (Result, Origin, P - Origin); - strcpy (Result + (P - Origin), Ext); + Out = xmalloc (P - Origin + strlen (Ext) + 1); + memcpy (Out, Origin, P - Origin); + strcpy (Out + (P - Origin), Ext); } - return Result; + return Out; }