[quake3-commits] r1988 - trunk/code/qcommon
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun May 15 10:11:26 EDT 2011
Author: thilo
Date: 2011-05-15 10:11:26 -0400 (Sun, 15 May 2011)
New Revision: 1988
Modified:
trunk/code/qcommon/q_shared.c
Log:
Refactor and bugfix COM_*Extension functions, patch by DevHC
Modified: trunk/code/qcommon/q_shared.c
===================================================================
--- trunk/code/qcommon/q_shared.c 2011-05-15 14:08:03 UTC (rev 1987)
+++ trunk/code/qcommon/q_shared.c 2011-05-15 14:11:26 UTC (rev 1988)
@@ -58,20 +58,13 @@
COM_GetExtension
============
*/
-const char *COM_GetExtension( const char *name ) {
- int length, i;
-
- length = strlen(name)-1;
- i = length;
-
- while (name[i] != '.')
- {
- i--;
- if (name[i] == '/' || i == 0)
- return ""; // no extension
- }
-
- return &name[i+1];
+const char *COM_GetExtension( const char *name )
+{
+ const char *dot = strrchr(name, '.'), *slash;
+ if (dot && (!(slash = strrchr(name, '/')) || slash < dot))
+ return dot + 1;
+ else
+ return "";
}
@@ -80,47 +73,31 @@
COM_StripExtension
============
*/
-void COM_StripExtension( const char *in, char *out, int destsize ) {
- int length;
-
- Q_strncpyz(out, in, destsize);
-
- length = strlen(out)-1;
- while (length > 0 && out[length] != '.')
- {
- length--;
- if (out[length] == '/')
- return; // no extension
- }
- if (length)
- out[length] = 0;
+void COM_StripExtension( const char *in, char *out, int destsize )
+{
+ const char *dot = strrchr(in, '.'), *slash;
+ if (dot && (!(slash = strrchr(in, '/')) || slash < dot))
+ Q_strncpyz(out, in, (destsize < dot-in+1 ? destsize : dot-in+1));
+ else
+ Q_strncpyz(out, in, destsize);
}
/*
==================
COM_DefaultExtension
+
+if path doesn't have an extension, then append
+ the specified one (which should include the .)
==================
*/
-void COM_DefaultExtension (char *path, int maxSize, const char *extension ) {
- char oldPath[MAX_QPATH];
- char *src;
-
-//
-// if path doesn't have a .EXT, append extension
-// (extension should include the .)
-//
- src = path + strlen(path) - 1;
-
- while (*src != '/' && src != path) {
- if ( *src == '.' ) {
- return; // it has an extension
- }
- src--;
- }
-
- Q_strncpyz( oldPath, path, sizeof( oldPath ) );
- Com_sprintf( path, maxSize, "%s%s", oldPath, extension );
+void COM_DefaultExtension( char *path, int maxSize, const char *extension )
+{
+ const char *dot = strrchr(path, '.'), *slash;
+ if (dot && (!(slash = strrchr(path, '/')) || slash < dot))
+ return;
+ else
+ Q_strcat(path, maxSize, extension);
}
/*
More information about the quake3-commits
mailing list