Make d_splitpath const
This commit is contained in:
parent
6d7b9fbb44
commit
9667abeaa7
|
@ -11,6 +11,11 @@ extern void d_strupr( char *s1 );
|
|||
extern void d_strrev( char *s1 );
|
||||
extern char *d_strdup(char *str);
|
||||
|
||||
struct splitpath_t
|
||||
{
|
||||
const char *drive_start, *drive_end, *path_start, *path_end, *base_start, *base_end, *ext_start;
|
||||
};
|
||||
|
||||
// remove extension from filename, doesn't work with paths.
|
||||
void removeext(const char *filename, char *out);
|
||||
|
||||
|
@ -19,7 +24,7 @@ extern void change_filename_extension( char *dest, const char *src, char *new_ex
|
|||
|
||||
// split an MS-DOS path into drive, directory path, filename without the extension (base) and extension.
|
||||
// if it's just a filename with no directory specified, this function will get 'base' and 'ext'
|
||||
extern void d_splitpath(char *name, char *drive, char *path, char *base, char *ext);
|
||||
void d_splitpath(const char *name, struct splitpath_t *path);
|
||||
|
||||
// create a growing 2D array with a single growing buffer for the text
|
||||
// this system is likely to cause less memory fragmentation than having one malloc'd buffer per string
|
||||
|
|
|
@ -173,55 +173,34 @@ void change_filename_extension( char *dest, const char *src, char *ext )
|
|||
strcpy(p+1,ext);
|
||||
}
|
||||
|
||||
void d_splitpath(char *name, char *drive, char *path, char *base, char *ext)
|
||||
void d_splitpath(const char *name, struct splitpath_t *path)
|
||||
{
|
||||
char *s, *p;
|
||||
const char *s, *p;
|
||||
|
||||
p = name;
|
||||
s = strchr(p, ':');
|
||||
if ( s != NULL ) {
|
||||
if (drive) {
|
||||
*s = '\0';
|
||||
strcpy(drive, p);
|
||||
*s = ':';
|
||||
}
|
||||
path->drive_start = p;
|
||||
path->drive_end = s;
|
||||
p = s+1;
|
||||
if (!p)
|
||||
return;
|
||||
} else if (drive)
|
||||
*drive = '\0';
|
||||
|
||||
} else
|
||||
path->drive_start = path->drive_end = NULL;
|
||||
s = strrchr(p, '\\');
|
||||
if ( s != NULL) {
|
||||
if (path) {
|
||||
char c;
|
||||
|
||||
c = *(s+1);
|
||||
*(s+1) = '\0';
|
||||
strcpy(path, p);
|
||||
*(s+1) = c;
|
||||
}
|
||||
path->path_start = p;
|
||||
path->path_end = s + 1;
|
||||
p = s+1;
|
||||
if (!p)
|
||||
return;
|
||||
} else if (path)
|
||||
*path = '\0';
|
||||
} else
|
||||
path->path_start = path->path_end = NULL;
|
||||
|
||||
s = strchr(p, '.');
|
||||
if ( s != NULL) {
|
||||
if (base) {
|
||||
*s = '\0';
|
||||
strcpy(base, p);
|
||||
*s = '.';
|
||||
}
|
||||
path->base_start = p;
|
||||
path->base_end = s;
|
||||
p = s+1;
|
||||
if (!p)
|
||||
return;
|
||||
} else if (base)
|
||||
*base = '\0';
|
||||
|
||||
if (ext)
|
||||
strcpy(ext, p);
|
||||
} else
|
||||
path->base_start = path->base_end = NULL;
|
||||
path->ext_start = p;
|
||||
}
|
||||
|
||||
// create a growing 2D array with a single growing buffer for the text
|
||||
|
|
|
@ -188,7 +188,11 @@ bitmap_index bm_load_sub(int skip, char * filename )
|
|||
return bitmap_num;
|
||||
}
|
||||
|
||||
d_splitpath( filename, NULL, NULL, fname, NULL );
|
||||
struct splitpath_t path;
|
||||
d_splitpath( filename, &path);
|
||||
if (path.base_end - path.base_start >= sizeof(fname))
|
||||
Error("File <%s> - bitmap error, filename too long", filename);
|
||||
memcpy(fname,path.base_start,path.base_end - path.base_start);
|
||||
|
||||
bitmap_num=piggy_find_bitmap( fname );
|
||||
if (bitmap_num.index) {
|
||||
|
@ -224,7 +228,6 @@ void ab_load(int skip, char * filename, bitmap_index bmp[], int *nframes )
|
|||
int i;
|
||||
int iff_error; //reference parm to avoid warning message
|
||||
ubyte newpal[768];
|
||||
char fname[20];
|
||||
char tempname[20];
|
||||
|
||||
if (skip) {
|
||||
|
@ -235,10 +238,11 @@ void ab_load(int skip, char * filename, bitmap_index bmp[], int *nframes )
|
|||
}
|
||||
|
||||
|
||||
d_splitpath( filename, NULL, NULL, fname, NULL );
|
||||
struct splitpath_t path;
|
||||
d_splitpath( filename, &path);
|
||||
|
||||
for (i=0; i<MAX_BITMAPS_PER_BRUSH; i++ ) {
|
||||
sprintf( tempname, "%s#%d", fname, i );
|
||||
snprintf( tempname, sizeof(tempname), "%.*s#%d", (int)(path.base_end - path.base_start), path.base_start, i );
|
||||
bi = piggy_find_bitmap( tempname );
|
||||
if ( !bi.index )
|
||||
break;
|
||||
|
@ -261,7 +265,7 @@ void ab_load(int skip, char * filename, bitmap_index bmp[], int *nframes )
|
|||
|
||||
for (i=0;i< *nframes; i++) {
|
||||
bitmap_index new_bmp;
|
||||
sprintf( tempname, "%s#%d", fname, i );
|
||||
snprintf( tempname, sizeof(tempname), "%.*s#%d", (int)(path.base_end - path.base_start), path.base_start, i );
|
||||
if ( iff_has_transparency )
|
||||
gr_remap_bitmap_good( bm[i], newpal, iff_transparent_color, SuperX );
|
||||
else
|
||||
|
|
|
@ -62,8 +62,9 @@ int load_palette(char *name,int used_for_level,int no_change_screen)
|
|||
|
||||
if (used_for_level && d_stricmp(last_palette_loaded_pig,name) != 0) {
|
||||
|
||||
d_splitpath(name,NULL,NULL,pigname,NULL);
|
||||
strcat(pigname,".pig");
|
||||
struct splitpath_t path;
|
||||
d_splitpath(name,&path);
|
||||
snprintf(pigname, sizeof(pigname), "%.*s.pig", (int)(path.base_end - path.base_start), path.base_start);
|
||||
//if not editor, load pig first so small install message can come
|
||||
//up in old palette. If editor version, we must load the pig after
|
||||
//the palette is loaded so we can remap new textures.
|
||||
|
|
|
@ -283,10 +283,10 @@ bitmap_index piggy_find_bitmap( char * name )
|
|||
if (alias_list[i].alias_name[namelen] == 0 && d_strnicmp(name,alias_list[i].alias_name,namelen)==0) {
|
||||
if (t) { //extra stuff for ABMs
|
||||
static char temp[FILENAME_LEN];
|
||||
d_splitpath(alias_list[i].file_name, NULL, NULL, temp, NULL );
|
||||
struct splitpath_t path;
|
||||
d_splitpath(alias_list[i].file_name, &path);
|
||||
snprintf(temp, sizeof(temp), "%.*s%s\n", (int)(path.base_end - path.base_start), path.base_start, t);
|
||||
name = temp;
|
||||
strcat(name,"#");
|
||||
strcat(name,t+1);
|
||||
}
|
||||
else
|
||||
name=alias_list[i].file_name;
|
||||
|
|
|
@ -185,7 +185,6 @@ int med_load_situation(char * filename)
|
|||
int med_save_situation(char * filename)
|
||||
{
|
||||
PHYSFS_file * SaveFile;
|
||||
char mine_name[MAX_NAME_LENGTH];
|
||||
|
||||
SaveFile = PHYSFSX_openWriteBuffered( filename );
|
||||
if (!SaveFile) {
|
||||
|
@ -197,10 +196,9 @@ int med_save_situation(char * filename)
|
|||
}
|
||||
|
||||
// Write mine name.
|
||||
// strcpy(mine_name, filename);
|
||||
d_splitpath(filename, NULL, NULL, mine_name, NULL);
|
||||
set_extension(mine_name, "min");
|
||||
PHYSFSX_printf(SaveFile, "%s\n", mine_name);
|
||||
struct splitpath_t path;
|
||||
d_splitpath(filename, &path);
|
||||
PHYSFSX_printf(SaveFile, "%.*s.min\n", (int)(path.base_end - path.base_start), path.base_start);
|
||||
|
||||
// Write player position.
|
||||
PHYSFSX_printf(SaveFile, "%x %x %x\n",(unsigned int) ConsoleObject->pos.x,(unsigned int) ConsoleObject->pos.y,(unsigned int) ConsoleObject->pos.z);
|
||||
|
|
Loading…
Reference in a new issue