mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-25 22:10:59 +00:00
Rewrite COM_FileExtention()
COM_FileExtension() was parsing strings from beginning to end, bailing
out as soon as '.' was found and treating everything thereafter as the
file extension. That behavior caused problem with relatives pathes like
models/monsters/tank/../ctank/skin.pcx. The new implementation uses
strrchr() to determine the last '.'.
This fixes issue #48. The bug was introduced in e07294b
which replaced
hand rolled code with COM_FileExtention().
This commit is contained in:
parent
87ba687f14
commit
5a7950683d
3 changed files with 7 additions and 21 deletions
|
@ -202,7 +202,7 @@ void RotatePointAroundVector(vec3_t dst,
|
|||
|
||||
char *COM_SkipPath(char *pathname);
|
||||
void COM_StripExtension(char *in, char *out);
|
||||
char *COM_FileExtension(char *in);
|
||||
const char *COM_FileExtension(const char *in);
|
||||
void COM_FileBase(char *in, char *out);
|
||||
void COM_FilePath(const char *in, char *out);
|
||||
void COM_DefaultExtension(char *path, const char *extension);
|
||||
|
|
|
@ -668,31 +668,17 @@ COM_StripExtension(char *in, char *out)
|
|||
*out = 0;
|
||||
}
|
||||
|
||||
char *
|
||||
COM_FileExtension(char *in)
|
||||
const char *
|
||||
COM_FileExtension(const char *in)
|
||||
{
|
||||
static char exten[8];
|
||||
int i;
|
||||
const char *ext = strrchr(in, '.');
|
||||
|
||||
while (*in && *in != '.')
|
||||
{
|
||||
in++;
|
||||
}
|
||||
|
||||
if (!*in)
|
||||
if (!ext || ext == in)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
in++;
|
||||
|
||||
for (i = 0; i < 7 && *in; i++, in++)
|
||||
{
|
||||
exten[i] = *in;
|
||||
}
|
||||
|
||||
exten[i] = 0;
|
||||
return exten;
|
||||
return ext + 1;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -73,7 +73,7 @@ extern short BigShort ( short l ) ;
|
|||
extern void COM_DefaultExtension ( char * path , const char * extension ) ;
|
||||
extern void COM_FilePath ( const char * in , char * out ) ;
|
||||
extern void COM_FileBase ( char * in , char * out ) ;
|
||||
extern char * COM_FileExtension ( char * in ) ;
|
||||
extern const char * COM_FileExtension ( const char * in ) ;
|
||||
extern void COM_StripExtension ( char * in , char * out ) ;
|
||||
extern char * COM_SkipPath ( char * pathname ) ;
|
||||
extern int Q_log2 ( int val ) ;
|
||||
|
|
Loading…
Reference in a new issue