Refactor and bugfix COM_*Extension functions, patch by DevHC

This commit is contained in:
Thilo Schulz 2011-05-15 14:11:26 +00:00
parent b509d770a7
commit 3cdfb7aea8

View file

@ -58,20 +58,13 @@ char *COM_SkipPath (char *pathname)
COM_GetExtension COM_GetExtension
============ ============
*/ */
const char *COM_GetExtension( const char *name ) { const char *COM_GetExtension( const char *name )
int length, i;
length = strlen(name)-1;
i = length;
while (name[i] != '.')
{ {
i--; const char *dot = strrchr(name, '.'), *slash;
if (name[i] == '/' || i == 0) if (dot && (!(slash = strrchr(name, '/')) || slash < dot))
return ""; // no extension return dot + 1;
} else
return "";
return &name[i+1];
} }
@ -80,47 +73,31 @@ const char *COM_GetExtension( const char *name ) {
COM_StripExtension COM_StripExtension
============ ============
*/ */
void COM_StripExtension( const char *in, char *out, int destsize ) { 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--; const char *dot = strrchr(in, '.'), *slash;
if (out[length] == '/') if (dot && (!(slash = strrchr(in, '/')) || slash < dot))
return; // no extension Q_strncpyz(out, in, (destsize < dot-in+1 ? destsize : dot-in+1));
} else
if (length) Q_strncpyz(out, in, destsize);
out[length] = 0;
} }
/* /*
================== ==================
COM_DefaultExtension 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 ) { void COM_DefaultExtension( char *path, int maxSize, const char *extension )
char oldPath[MAX_QPATH]; {
char *src; const char *dot = strrchr(path, '.'), *slash;
if (dot && (!(slash = strrchr(path, '/')) || slash < dot))
// return;
// if path doesn't have a .EXT, append extension else
// (extension should include the .) Q_strcat(path, maxSize, extension);
//
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 );
} }
/* /*