add_sound_mapping cleanup

- avoid several buffer overflows
- move use of access() to files.c in new can_read_file() function
- remove extra newlines in raw_print() calls
- get ready for lint, eg sprintf -> Sprintf
- generally make the code look like core code, not Qt code
This commit is contained in:
cohrs
2002-02-21 03:33:42 +00:00
parent 403cee9b5b
commit ae9f38222e
3 changed files with 58 additions and 43 deletions
+6 -1
View File
@@ -630,6 +630,9 @@ E void FDECL(compress, (const char *));
E void FDECL(uncompress, (const char *));
E boolean FDECL(lock_file, (const char *,int,int));
E void FDECL(unlock_file, (const char *));
#ifdef USER_SOUNDS
E boolean FDECL(can_read_file, (const char *));
#endif
E void FDECL(read_config_file, (const char *));
E void FDECL(check_recordfile, (const char *));
#if defined(WIZARD)
@@ -1793,7 +1796,9 @@ E void FDECL(yelp, (struct monst *));
E void FDECL(whimper, (struct monst *));
E void FDECL(beg, (struct monst *));
E int NDECL(dotalk);
#ifdef USER_SOUNDS
E int FDECL(add_sound_mapping, (const char *));
#endif
/* ### sys/msdos/sound.c ### */
+9 -1
View File
@@ -103,7 +103,6 @@ static int lockptr;
#endif
#ifdef USER_SOUNDS
extern int FDECL(add_sound_mapping, (const char* mapping));
extern char *sounddir;
#endif
@@ -1523,6 +1522,15 @@ char *tmp_levels;
return 1;
}
#ifdef USER_SOUNDS
boolean
can_read_file(filename)
const char *filename;
{
return (access(filename, 4) == 0);
}
#endif /* USER_SOUNDS */
void
read_config_file(filename)
const char *filename;
+12 -10
View File
@@ -927,6 +927,7 @@ static audio_mapping* soundmap=0;
char* sounddir = ".";
/* adds a sound file mapping, returns 0 on failure, 1 on success */
int
add_sound_mapping(mapping)
const char *mapping;
@@ -936,15 +937,18 @@ const char* mapping;
char filespec[256];
int volume;
if (sscanf(mapping, "MESG \"%[^\"]\"%*[\t ]\"%[^\"]\" %d",
text, filename, &volume)==3)
{
if (sscanf(mapping, "MESG \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d",
text, filename, &volume) == 3) {
const char *err;
audio_mapping *new_map;
sprintf(filespec,"%s/%s",sounddir,filename);
if (strlen(sounddir) + strlen(filename) > 254) {
raw_print("sound file name too long");
return 0;
}
Sprintf(filespec, "%s/%s", sounddir, filename);
if (access(filespec, R_OK)==0) {
if (can_read_file(filespec)) {
new_map = (audio_mapping *)alloc(sizeof(audio_mapping));
new_map->regex.translate = 0;
new_map->regex.fastmap = 0;
@@ -958,8 +962,7 @@ const char* mapping;
err = re_compile_pattern(text, strlen(text), &new_map->regex);
if (err) {
sprintf(text, "%s\n", err);
raw_print(text);
raw_print(err);
free(new_map->filename);
free(new_map);
return 0;
@@ -967,13 +970,12 @@ const char* mapping;
soundmap = new_map;
}
} else {
sprintf(text, "%s not readable.\n", filespec);
Sprintf(text, "cannot read %.243s", filespec);
raw_print(text);
return 0;
}
} else {
sprintf(text, "syntax error in SOUND\n");
raw_print(text);
raw_print("syntax error in SOUND");
return 0;
}