void
glk_stream_set_current(strid_t str)
{
- if(str != NULL && str->file_mode != filemode_Write)
+ if(str != NULL && str->file_mode == filemode_Read)
{
g_warning("glk_stream_set_current: "
"Cannot set current stream to non output stream");
g_return_val_if_fail(fileref != NULL, NULL);
gchar *modestr;
- gboolean binary = fileref->usage & fileusage_BinaryMode;
+ /* Binary mode is 0x000, text mode 0x100 */
+ gboolean binary = !(fileref->usage & fileusage_TextMode);
switch(fmode)
{
case filemode_Read:
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);
}
-