modestr = g_strdup(binary? "ab" : "a");
break;
case filemode_ReadWrite:
- modestr = g_strdup(binary? "r+b" : "r+");
+ if( g_file_test(fileref->filename, G_FILE_TEST_EXISTS) ) {
+ modestr = g_strdup(binary? "r+b" : "r+");
+ } else {
+ modestr = g_strdup(binary? "w+b" : "w+");
+ }
break;
default:
g_warning("glk_stream_open_file: Invalid file mode");
/* If they opened a file in write mode but didn't specifically get
permission to do so, complain if the file already exists */
if(fileref->orig_filemode == filemode_Read && fmode != filemode_Read) {
+ gdk_threads_enter();
+
GtkWidget *dialog = gtk_message_dialog_new(NULL, 0,
GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,
"File %s already exists. Overwrite?", fileref->filename);
gint response = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
+
+ gdk_threads_leave();
+
if(response != GTK_RESPONSE_YES) {
fclose(fp);
return NULL;
__func__);
return;
}
-
+
+ stream_close_common(str, result);
+}
+
+void
+stream_close_common(strid_t str, stream_result_t *result)
+{
/* Remove the stream from the global stream list */
stream_list = g_list_delete_link(stream_list, str->stream_list);
/* If it was the current output stream, set that to NULL */
}
g_free(str);
}
-