]> git.sur5r.net Git - cc65/blobdiff - src/common/fname.c
Fixed two compiler warnings.
[cc65] / src / common / fname.c
index fd907e82dfebdaf85fc57d7c8a3fe5eb805eb3a3..444d4c7b1443cde0c1d9ca559582098021872248 100644 (file)
@@ -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       */
 
 
 
+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;
 }