*/
void z_restore (void)
{
- char new_name[MAX_FILE_NAME + 1];
+ char *new_name;
char default_name[MAX_FILE_NAME + 1];
FILE *gfp = NULL;
get_default_name (default_name, (zargc >= 3) ? zargs[2] : 0);
- if (os_read_file_name (new_name, default_name, FILE_LOAD_AUX) == 0)
+ new_name = os_read_file_name(default_name, FILE_LOAD_AUX);
+ if (new_name == NULL)
goto finished;
free(f_setup.aux_name);
/* Get the file name */
- if (os_read_file_name (new_name, f_setup.save_name, FILE_RESTORE) == 0)
+ new_name = os_read_file_name(f_setup.save_name, FILE_RESTORE);
+ if (new_name == NULL)
goto finished;
free(f_setup.save_name);
*/
void z_save (void)
{
- char new_name[MAX_FILE_NAME + 1];
+ char *new_name;
char default_name[MAX_FILE_NAME + 1];
FILE *gfp;
get_default_name (default_name, (zargc >= 3) ? zargs[2] : 0);
- if (os_read_file_name (new_name, default_name, FILE_SAVE_AUX) == 0)
+ new_name = os_read_file_name(default_name, FILE_SAVE_AUX);
+ if (new_name == NULL)
goto finished;
free(f_setup.aux_name);
/* Get the file name */
- if (os_read_file_name (new_name, f_setup.save_name, FILE_SAVE) == 0)
+ new_name = os_read_file_name(f_setup.save_name, FILE_SAVE);
+ if (new_name == NULL)
goto finished;
free(f_setup.save_name);
{
static bool script_valid = FALSE;
- char new_name[MAX_FILE_NAME + 1];
+ char *new_name;
h_flags &= ~SCRIPTING_FLAG;
if (h_version >= V5 || !script_valid) {
- if (!os_read_file_name (new_name, f_setup.script_name, FILE_SCRIPT))
+ new_name = os_read_file_name(f_setup.script_name, FILE_SCRIPT);
+ if (new_name == NULL)
goto done;
free(f_setup.script_name);
void record_open (void)
{
- char new_name[MAX_FILE_NAME + 1];
+ char *new_name;
- if (os_read_file_name (new_name, f_setup.command_name, FILE_RECORD)) {
+ new_name = os_read_file_name(f_setup.command_name, FILE_RECORD);
+ if (new_name != NULL) {
free(f_setup.command_name);
f_setup.command_name = strdup(new_name);
void replay_open (void)
{
- char new_name[MAX_FILE_NAME + 1];
+ char *new_name;
- if (os_read_file_name (new_name, f_setup.command_name, FILE_PLAYBACK)) {
+ new_name = os_read_file_name(f_setup.command_name, FILE_PLAYBACK);
+ if (new_name != NULL) {
free(f_setup.command_name);
f_setup.command_name = strdup(new_name);
void os_prepare_sample (int);
void os_process_arguments (int, char *[]);
int os_random_seed (void);
-int os_read_file_name (char *, const char *, int);
+char *os_read_file_name (const char *, int);
zchar os_read_key (int, int);
zchar os_read_line (int, zchar *, int, int, int);
void os_reset_screen (void);
/*
* os_read_file_name
*
- * Return the name of a file. Flag can be one of:
+ * Return the name of a file. Flag can be one of:
*
* FILE_SAVE - Save game file
* FILE_RESTORE - Restore game file
* name. If it is unable to do that then this function should call
* print_string and read_string to ask for a file name.
*
+ * Return value is NULL if there was a problem.
*/
-int os_read_file_name (char *file_name, const char *default_name, int flag)
+char *os_read_file_name (const char *default_name, int flag)
{
FILE *fp;
int saved_replay = istream_replay;
char *tempname;
zchar answer[4];
char path_separator[2];
+ char file_name[FILENAME_MAX + 1];
/* Turn off playback and recording temporarily */
istream_replay = 0;
if (f_setup.restricted_path) {
tempname = dirname(file_name);
if (strlen(tempname) > 1)
- return 0;
+ return NULL;
}
/* Use the default name if nothing was typed */
if (file_name[0] == 0)
- strcpy (file_name, default_name);
+ strncpy (file_name, default_name, FILENAME_MAX);
/* If we're restricted to one directory, strip any leading path left
* over from a previous call to os_read_file_name(), then prepend
}
}
tempname = strdup(file_name + i);
- strcpy(file_name, f_setup.restricted_path);
+ strncpy(file_name, f_setup.restricted_path, FILENAME_MAX);
/* Make sure the final character is the path separator. */
if (file_name[strlen(file_name)-1] != PATH_SEPARATOR) {
- strncat(file_name, path_separator, strlen(file_name) - 2);
+ strncat(file_name, path_separator, FILENAME_MAX - strlen(file_name) - 2);
}
strncat(file_name, tempname, strlen(file_name) - strlen(tempname) - 1);
}
fclose (fp);
print_string("Overwrite existing file? ");
read_string(4, answer);
- return(tolower(answer[0]) == 'y');
+ if (tolower(answer[0] != 'y'))
+ return NULL;
}
/* Restore state of playback and recording */
istream_replay = saved_replay;
ostream_record = saved_record;
- return 1;
+ return strdup(file_name);
} /* os_read_file_name */
return terminator;
}
-int os_read_file_name (char *file_name, const char *default_name, int flag)
+char *os_read_file_name (const char *default_name, int flag)
{
+ char file_name[FILENAME_MAX + 1];
char buf[INPUT_BUFFER_SIZE], prompt[INPUT_BUFFER_SIZE];
FILE *fp;
char *tempname;
* our filename is already provided. Just go ahead silently.
*/
if (f_setup.restore_mode) {
- strcpy(file_name, default_name);
- return TRUE;
+ return strdup(default_name);
} else {
if (f_setup.restricted_path) {
for (i = strlen(default_name); i > 0; i--) {
dumb_read_misc_line(buf, prompt);
if (strlen(buf) > MAX_FILE_NAME) {
printf("Filename too long\n");
- return FALSE;
+ return NULL;
}
}
&& ((fp = fopen(file_name, "rb")) != NULL)) {
fclose (fp);
dumb_read_misc_line(buf, "Overwrite existing file? ");
- return(tolower(buf[0]) == 'y');
+ if (tolower(buf[0]) != 'y')
+ return NULL;
}
- return TRUE;
+ return strdup(file_name);
}
void os_more_prompt (void)
#endif
-/*
- * os_read_file_name
- *
- * Return the name of a file. Flag can be one of:
- *
- * FILE_SAVE - Save game file
- * FILE_RESTORE - Restore game file
- * FILE_SCRIPT - Transscript file
- * FILE_RECORD - Command file for recording
- * FILE_PLAYBACK - Command file for playback
- * FILE_SAVE_AUX - Save auxilary ("preferred settings") file
- * FILE_LOAD_AUX - Load auxilary ("preferred settings") file
- *
- * The length of the file name is limited by MAX_FILE_NAME. Ideally
- * an interpreter should open a file requester to ask for the file
- * name. If it is unable to do that then this function should call
- * print_string and read_string to ask for a file name.
- *
- */
static char *getextension( int flag)
{
static int ingame_read_file_name (char *file_name, const char *default_name, int flag);
static int dialog_read_file_name (char *file_name, const char *default_name, int flag);
-int os_read_file_name (char *file_name, const char *default_name, int flag)
+
+/*
+ * os_read_file_name
+ *
+ * Return the name of a file. Flag can be one of:
+ *
+ * FILE_SAVE - Save game file
+ * FILE_RESTORE - Restore game file
+ * FILE_SCRIPT - Transscript file
+ * FILE_RECORD - Command file for recording
+ * FILE_PLAYBACK - Command file for playback
+ * FILE_SAVE_AUX - Save auxilary ("preferred settings") file
+ * FILE_LOAD_AUX - Load auxilary ("preferred settings") file
+ *
+ * The length of the file name is limited by MAX_FILE_NAME. Ideally
+ * an interpreter should open a file requester to ask for the file
+ * name. If it is unable to do that then this function should call
+ * print_string and read_string to ask for a file name.
+ *
+ * Return value is NULL is there was a problem
+ */
+
+char *os_read_file_name (const char *default_name, int flag)
{
int st;
const char *initname = default_name;
+ char file_name[FILENAME_MAX + 1];
if (newfile(flag))
{
}
st = dialog_read_file_name( file_name, initname, flag);
- if (st == SF_NOTIMP) st = ingame_read_file_name( file_name, initname, flag);
- return st;
+ if (st == SF_NOTIMP)
+ st = ingame_read_file_name( file_name, initname, flag);
+
+ if (!st) return NULL;
+
+ return strdup(file_name);
}
static int ingame_read_file_name (char *file_name, const char *default_name, int flag)