OSDN Git Service

- Add proper support for line specials that don't fit in a byte.
[zandronum/zandronum-acc.git] / misc.c
diff --git a/misc.c b/misc.c
index 1b50db6..db4f84e 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -279,8 +279,7 @@ void MS_SuggestFileExt(char *base, char *extension)
        char *search;\r
 \r
        search = base+strlen(base)-1;\r
-       while(*search != ASCII_SLASH && *search != ASCII_BACKSLASH\r
-               && search != base)\r
+       while(!MS_IsDirectoryDelimiter(*search) && search != base)\r
        {\r
                if(*search-- == '.')\r
                {\r
@@ -292,6 +291,22 @@ void MS_SuggestFileExt(char *base, char *extension)
 \r
 //==========================================================================\r
 //\r
+// MS_IsDirectoryDelimiter\r
+//\r
+//==========================================================================\r
+\r
+boolean MS_IsDirectoryDelimiter(char foo)\r
+{\r
+#if defined(_WIN32) || defined(__MSDOS__)\r
+       return foo == '/' || foo == '\\' || foo == ':';\r
+#else\r
+       return foo == '/';\r
+#endif\r
+}\r
+\r
+\r
+//==========================================================================\r
+//\r
 // MS_StripFileExt\r
 //\r
 //==========================================================================\r
@@ -301,8 +316,7 @@ void MS_StripFileExt(char *name)
        char *search;\r
 \r
        search = name+strlen(name)-1;\r
-       while(*search != ASCII_SLASH && *search != ASCII_BACKSLASH\r
-               && search != name)\r
+       while(!MS_IsDirectoryDelimiter(*search) && search != name)\r
        {\r
                if(*search == '.')\r
                {\r
@@ -317,6 +331,8 @@ void MS_StripFileExt(char *name)
 //\r
 // MS_StripFilename\r
 //\r
+// [RH] This now leaves the directory delimiter in place.\r
+//\r
 //==========================================================================\r
 \r
 boolean MS_StripFilename(char *name)\r
@@ -330,8 +346,8 @@ boolean MS_StripFilename(char *name)
                { // No directory delimiter\r
                        return NO;\r
                }\r
-       } while(*c != DIRECTORY_DELIMITER_CHAR);\r
-       *c = 0;\r
+       } while(!MS_IsDirectoryDelimiter(*c));\r
+       *(c+1) = 0;\r
        return YES;\r
 }\r
 \r
@@ -369,3 +385,24 @@ void MS_Message(msg_t type, char *text, ...)
                va_end(argPtr);\r
        }\r
 }\r
+\r
+//==========================================================================\r
+//\r
+// MS_IsPathAbsolute\r
+//\r
+// Pascal 30/11/08\r
+//\r
+//==========================================================================\r
+\r
+boolean MS_IsPathAbsolute(char *name)\r
+{\r
+#if defined(_WIN32) || defined(__MSDOS__)\r
+       // In Windows, the second character must be : if it is an\r
+       // absolute path (the first character indicates the drive)\r
+       // or the first character is either / or \ for absolute path\r
+       if((name[0] != '\0') && (name[1] == ':'))\r
+               return TRUE;\r
+#endif\r
+       // In Unix-land, the first character must be / for a root path\r
+       return MS_IsDirectoryDelimiter(name[0]);\r
+}\r