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; {
const char *dot = strrchr(name, '.'), *slash;
length = strlen(name)-1; if (dot && (!(slash = strrchr(name, '/')) || slash < dot))
i = length; return dot + 1;
else
while (name[i] != '.') return "";
{
i--;
if (name[i] == '/' || i == 0)
return ""; // no extension
}
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; {
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); 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;
} }
/* /*
================== ==================
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 );
} }
/* /*