+2001-07-21 Hans Breuer <hans@breuer.org>
+
+ * glib/giowin32.c : intial implementation of new API functions.
+ Not sure if it behaves as intended ...
+
+ * glib.def : removed, glib/glib.def is the file used since moved
+ * glib/glib.def : updated
+
+ * tests/makefile.msc : added iochannel-test
+
Fri Jul 20 19:19:10 (UTC) 2001 Ron Steinke <rsteinke@w-link.net>
* glib/giochannel.c: API changes, fixes to
+2001-07-21 Hans Breuer <hans@breuer.org>
+
+ * glib/giowin32.c : intial implementation of new API functions.
+ Not sure if it behaves as intended ...
+
+ * glib.def : removed, glib/glib.def is the file used since moved
+ * glib/glib.def : updated
+
+ * tests/makefile.msc : added iochannel-test
+
Fri Jul 20 19:19:10 (UTC) 2001 Ron Steinke <rsteinke@w-link.net>
* glib/giochannel.c: API changes, fixes to
+2001-07-21 Hans Breuer <hans@breuer.org>
+
+ * glib/giowin32.c : intial implementation of new API functions.
+ Not sure if it behaves as intended ...
+
+ * glib.def : removed, glib/glib.def is the file used since moved
+ * glib/glib.def : updated
+
+ * tests/makefile.msc : added iochannel-test
+
Fri Jul 20 19:19:10 (UTC) 2001 Ron Steinke <rsteinke@w-link.net>
* glib/giochannel.c: API changes, fixes to
+2001-07-21 Hans Breuer <hans@breuer.org>
+
+ * glib/giowin32.c : intial implementation of new API functions.
+ Not sure if it behaves as intended ...
+
+ * glib.def : removed, glib/glib.def is the file used since moved
+ * glib/glib.def : updated
+
+ * tests/makefile.msc : added iochannel-test
+
Fri Jul 20 19:19:10 (UTC) 2001 Ron Steinke <rsteinke@w-link.net>
* glib/giochannel.c: API changes, fixes to
+2001-07-21 Hans Breuer <hans@breuer.org>
+
+ * glib/giowin32.c : intial implementation of new API functions.
+ Not sure if it behaves as intended ...
+
+ * glib.def : removed, glib/glib.def is the file used since moved
+ * glib/glib.def : updated
+
+ * tests/makefile.msc : added iochannel-test
+
Fri Jul 20 19:19:10 (UTC) 2001 Ron Steinke <rsteinke@w-link.net>
* glib/giochannel.c: API changes, fixes to
+2001-07-21 Hans Breuer <hans@breuer.org>
+
+ * glib/giowin32.c : intial implementation of new API functions.
+ Not sure if it behaves as intended ...
+
+ * glib.def : removed, glib/glib.def is the file used since moved
+ * glib/glib.def : updated
+
+ * tests/makefile.msc : added iochannel-test
+
Fri Jul 20 19:19:10 (UTC) 2001 Ron Steinke <rsteinke@w-link.net>
* glib/giochannel.c: API changes, fixes to
+2001-07-21 Hans Breuer <hans@breuer.org>
+
+ * glib/giowin32.c : intial implementation of new API functions.
+ Not sure if it behaves as intended ...
+
+ * glib.def : removed, glib/glib.def is the file used since moved
+ * glib/glib.def : updated
+
+ * tests/makefile.msc : added iochannel-test
+
Fri Jul 20 19:19:10 (UTC) 2001 Ron Steinke <rsteinke@w-link.net>
* glib/giochannel.c: API changes, fixes to
+2001-07-21 Hans Breuer <hans@breuer.org>
+
+ * glib/giowin32.c : intial implementation of new API functions.
+ Not sure if it behaves as intended ...
+
+ * glib.def : removed, glib/glib.def is the file used since moved
+ * glib/glib.def : updated
+
+ * tests/makefile.msc : added iochannel-test
+
Fri Jul 20 19:19:10 (UTC) 2001 Ron Steinke <rsteinke@w-link.net>
* glib/giochannel.c: API changes, fixes to
+++ /dev/null
-EXPORTS
- g_allocator_free
- g_allocator_new
- g_array_append_vals
- g_array_free
- g_array_insert_vals
- g_array_new
- g_array_prepend_vals
- g_array_remove_index
- g_array_remove_index_fast
- g_array_set_size
- g_array_sized_new
- g_array_sort
- g_array_sort_with_data
- g_async_queue_length
- g_async_queue_length_unlocked
- g_async_queue_lock
- g_async_queue_new
- g_async_queue_pop
- g_async_queue_pop_unlocked
- g_async_queue_push
- g_async_queue_push_unlocked
- g_async_queue_ref
- g_async_queue_ref_unlocked
- g_async_queue_timed_pop
- g_async_queue_timed_pop_unlocked
- g_async_queue_try_pop
- g_async_queue_try_pop_unlocked
- g_async_queue_unlock
- g_async_queue_unref
- g_async_queue_unref_and_unlock
- g_atexit
- g_basename
- g_bit_nth_lsf
- g_bit_nth_msf
- g_bit_storage
- g_blow_chunks
- g_byte_array_append
- g_byte_array_free
- g_byte_array_new
- g_byte_array_prepend
- g_byte_array_remove_index
- g_byte_array_remove_index_fast
- g_byte_array_set_size
- g_byte_array_sized_new
- g_byte_array_sort
- g_byte_array_sort_with_data
- g_cache_destroy
- g_cache_insert
- g_cache_key_foreach
- g_cache_new
- g_cache_remove
- g_cache_value_foreach
- g_clear_error
- g_completion_add_items
- g_completion_clear_items
- g_completion_complete
- g_completion_free
- g_completion_new
- g_completion_remove_items
- g_convert
- g_convert_error_quark
- g_convert_with_fallback
- g_datalist_clear
- g_datalist_foreach
- g_datalist_id_get_data
- g_datalist_id_remove_no_notify
- g_datalist_id_set_data_full
- g_datalist_init
- g_dataset_destroy
- g_dataset_foreach
- g_dataset_id_get_data
- g_dataset_id_remove_no_notify
- g_dataset_id_set_data_full
- g_date_add_days
- g_date_add_months
- g_date_add_years
- g_date_clear
- g_date_compare
- g_date_free
- g_date_get_day
- g_date_get_day_of_year
- g_date_get_days_in_month
- g_date_get_julian
- g_date_get_monday_week_of_year
- g_date_get_monday_weeks_in_year
- g_date_get_month
- g_date_get_sunday_week_of_year
- g_date_get_sunday_weeks_in_year
- g_date_get_weekday
- g_date_get_year
- g_date_is_first_of_month
- g_date_is_last_of_month
- g_date_is_leap_year
- g_date_new
- g_date_new_dmy
- g_date_new_julian
- g_date_set_day
- g_date_set_dmy
- g_date_set_julian
- g_date_set_month
- g_date_set_parse
- g_date_set_time
- g_date_set_year
- g_date_strftime
- g_date_subtract_days
- g_date_subtract_months
- g_date_subtract_years
- g_date_to_struct_tm
- g_date_valid
- g_date_valid_day
- g_date_valid_dmy
- g_date_valid_julian
- g_date_valid_month
- g_date_valid_weekday
- g_date_valid_year
- g_direct_equal
- g_direct_hash
- g_error_copy
- g_error_free
- g_error_matches
- g_error_new
- g_error_new_literal
- g_file_error_from_errno
- g_file_error_quark
- g_file_get_contents
- g_file_open_tmp
- g_file_test
- g_filename_from_utf8
- g_filename_to_utf8
- g_find_program_in_path
- g_free
- g_get_charset
- g_get_codeset
- g_get_current_dir
- g_get_current_time
- g_get_home_dir
- g_get_prgname
- g_get_real_name
- g_get_tmp_dir
- g_get_user_name
- g_getenv
- g_hash_table_destroy
- g_hash_table_foreach
- g_hash_table_foreach_remove
- g_hash_table_insert
- g_hash_table_lookup
- g_hash_table_lookup_extended
- g_hash_table_new
- g_hash_table_remove
- g_hash_table_size
- g_hook_alloc
- g_hook_compare_ids
- g_hook_destroy
- g_hook_destroy_link
- g_hook_find
- g_hook_find_data
- g_hook_find_func
- g_hook_find_func_data
- g_hook_first_valid
- g_hook_free
- g_hook_get
- g_hook_insert_before
- g_hook_insert_sorted
- g_hook_list_clear
- g_hook_list_init
- g_hook_list_invoke
- g_hook_list_invoke_check
- g_hook_list_marshal
- g_hook_list_marshal_check
- g_hook_next_valid
- g_hook_prepend
- g_hook_ref
- g_hook_unref
- g_iconv
- g_iconv_close
- g_iconv_open
- g_idle_add
- g_idle_add_full
- g_idle_remove_by_data
- g_idle_source_new
- g_int_equal
- g_int_hash
- g_io_add_watch
- g_io_add_watch_full
- g_io_channel_close
- g_io_channel_error_from_errno
- g_io_channel_error_quark
- g_io_channel_flush
- g_io_channel_get_buffer_condition
- g_io_channel_get_buffer_size
- g_io_channel_get_buffered
- g_io_channel_get_encoding
- g_io_channel_get_flags
- g_io_channel_get_line_term
- g_io_channel_init
- g_io_channel_new_file
- g_io_channel_read
- g_io_channel_read_chars
- g_io_channel_read_line
- g_io_channel_read_line_string
- g_io_channel_read_to_end
- g_io_channel_ref
- g_io_channel_seek
- g_io_channel_seek_position
- g_io_channel_set_buffer_size
- g_io_channel_set_buffered
- g_io_channel_set_encoding
- g_io_channel_set_flags
- g_io_channel_set_line_term
- g_io_channel_unix_get_fd
- g_io_channel_unix_new
- g_io_channel_unref
- g_io_channel_win32_get_fd
- g_io_channel_win32_make_pollfd
- g_io_channel_win32_new_fd
- g_io_channel_win32_new_messages
- g_io_channel_win32_new_socket
- g_io_channel_win32_new_stream_socket
- g_io_channel_win32_poll
- g_io_channel_win32_set_debug
- g_io_channel_write
- g_io_channel_write_chars
- g_io_create_watch
- g_list_alloc
- g_list_append
- g_list_concat
- g_list_copy
- g_list_delete_link
- g_list_find
- g_list_find_custom
- g_list_first
- g_list_foreach
- g_list_free
- g_list_free_1
- g_list_index
- g_list_insert
- g_list_insert_sorted
- g_list_last
- g_list_length
- g_list_nth
- g_list_nth_data
- g_list_position
- g_list_prepend
- g_list_remove
- g_list_remove_all
- g_list_remove_link
- g_list_reverse
- g_list_sort
- g_list_sort_with_data
- g_locale_from_utf8
- g_locale_to_utf8
- g_log
- g_log_default_handler
- g_log_domain_glib
- g_log_remove_handler
- g_log_set_always_fatal
- g_log_set_fatal_mask
- g_log_set_handler
- g_logv
- g_main_context_add_poll
- g_main_context_check
- g_main_context_default
- g_main_context_dispatch
- g_main_context_find_source_by_funcs_user_data
- g_main_context_find_source_by_id
- g_main_context_find_source_by_user_data
- g_main_context_get
- g_main_context_get_poll_func
- g_main_context_iteration
- g_main_context_pending
- g_main_context_prepare
- g_main_context_query
- g_main_context_remove_poll
- g_main_context_set_poll_func
- g_main_loop_is_running
- g_main_loop_new
- g_main_loop_quit
- g_main_loop_ref
- g_main_loop_run
- g_main_loop_unref
- g_malloc
- g_malloc0
- g_markup_error_quark
- g_markup_escape_text
- g_markup_parse_context_end_parse
- g_markup_parse_context_free
- g_markup_parse_context_get_position
- g_markup_parse_context_new
- g_markup_parse_context_parse
- g_mem_chunk_alloc
- g_mem_chunk_alloc0
- g_mem_chunk_clean
- g_mem_chunk_destroy
- g_mem_chunk_free
- g_mem_chunk_info
- g_mem_chunk_new
- g_mem_chunk_print
- g_mem_chunk_reset
- g_mem_init
- g_mem_profile
- g_mem_set_vtable
- g_memdup
- g_messages_init
- g_mkstemp
- g_mutex_init
- g_node_child_index
- g_node_child_position
- g_node_children_foreach
- g_node_copy
- g_node_depth
- g_node_destroy
- g_node_find
- g_node_find_child
- g_node_first_sibling
- g_node_get_root
- g_node_insert
- g_node_insert_after
- g_node_insert_before
- g_node_is_ancestor
- g_node_last_child
- g_node_last_sibling
- g_node_max_height
- g_node_n_children
- g_node_n_nodes
- g_node_new
- g_node_nth_child
- g_node_prepend
- g_node_reverse_children
- g_node_traverse
- g_node_unlink
- g_on_error_query
- g_on_error_stack_trace
- g_parse_debug_string
- g_path_get_basename
- g_path_get_dirname
- g_path_is_absolute
- g_path_skip_root
- g_pattern_match
- g_pattern_match_string
- g_pattern_spec_free
- g_pattern_spec_new
- g_print
- g_printerr
- g_printf_string_upper_bound
- g_propagate_error
- g_ptr_array_add
- g_ptr_array_free
- g_ptr_array_new
- g_ptr_array_remove
- g_ptr_array_remove_fast
- g_ptr_array_remove_index
- g_ptr_array_remove_index_fast
- g_ptr_array_set_size
- g_ptr_array_sized_new
- g_ptr_array_sort
- g_ptr_array_sort_with_data
- g_qsort_with_data
- g_quark_from_static_string
- g_quark_from_string
- g_quark_to_string
- g_quark_try_string
- g_queue_free
- g_queue_is_empty
- g_queue_new
- g_queue_peek_head
- g_queue_peek_tail
- g_queue_pop_head
- g_queue_pop_head_link
- g_queue_pop_tail
- g_queue_pop_tail_link
- g_queue_push_head
- g_queue_push_head_link
- g_queue_push_tail
- g_queue_push_tail_link
- g_rand_double
- g_rand_double_range
- g_rand_free
- g_rand_int
- g_rand_int_range
- g_rand_new
- g_rand_new_with_seed
- g_rand_set_seed
- g_random_double
- g_random_double_range
- g_random_int
- g_random_int_range
- g_random_set_seed
- g_realloc
- g_relation_count
- g_relation_delete
- g_relation_destroy
- g_relation_exists
- g_relation_index
- g_relation_insert
- g_relation_new
- g_relation_print
- g_relation_select
- g_scanner_cur_line
- g_scanner_cur_position
- g_scanner_cur_token
- g_scanner_cur_value
- g_scanner_destroy
- g_scanner_eof
- g_scanner_error
- g_scanner_get_next_token
- g_scanner_input_file
- g_scanner_input_text
- g_scanner_lookup_symbol
- g_scanner_new
- g_scanner_peek_next_token
- g_scanner_scope_add_symbol
- g_scanner_scope_foreach_symbol
- g_scanner_scope_lookup_symbol
- g_scanner_scope_remove_symbol
- g_scanner_set_scope
- g_scanner_stat_mode
- g_scanner_sync_file_offset
- g_scanner_unexp_token
- g_scanner_warn
- g_set_error
- g_set_error_handler
- g_set_message_handler
- g_set_prgname
- g_set_print_handler
- g_set_printerr_handler
- g_set_warning_handler
- g_shell_parse_argv
- g_shell_quote
- g_shell_unquote
- g_slist_alloc
- g_slist_append
- g_slist_concat
- g_slist_copy
- g_slist_delete_link
- g_slist_find
- g_slist_find_custom
- g_slist_foreach
- g_slist_free
- g_slist_free_1
- g_slist_index
- g_slist_insert
- g_slist_insert_sorted
- g_slist_last
- g_slist_length
- g_slist_nth
- g_slist_nth_data
- g_slist_position
- g_slist_prepend
- g_slist_remove
- g_slist_remove_all
- g_slist_remove_link
- g_slist_reverse
- g_slist_sort
- g_slist_sort_with_data
- g_snprintf
- g_source_add_poll
- g_source_attach
- g_source_destroy
- g_source_get_can_recurse
- g_source_get_context
- g_source_get_current_time
- g_source_get_id
- g_source_get_priority
- g_source_new
- g_source_ref
- g_source_remove
- g_source_remove_by_funcs_user_data
- g_source_remove_by_user_data
- g_source_set_callback
- g_source_set_callback_indirect
- g_source_set_can_recurse
- g_source_set_priority
- g_source_unref
- g_spaced_primes_closest
- g_spawn_async
- g_spawn_async_with_pipes
- g_spawn_command_line_async
- g_spawn_command_line_sync
- g_spawn_error_quark
- g_spawn_sync
- g_static_mutex_get_mutex_impl
- g_static_private_free
- g_static_private_get
- g_static_private_init
- g_static_private_set
- g_static_rec_mutex_free
- g_static_rec_mutex_init
- g_static_rec_mutex_lock
- g_static_rec_mutex_trylock
- g_static_rec_mutex_unlock
- g_static_rw_lock_free
- g_static_rw_lock_init
- g_static_rw_lock_reader_lock
- g_static_rw_lock_reader_trylock
- g_static_rw_lock_reader_unlock
- g_static_rw_lock_writer_lock
- g_static_rw_lock_writer_trylock
- g_static_rw_lock_writer_unlock
- g_stpcpy
- g_str_equal
- g_str_hash
- g_strcanon
- g_strcasecmp
- g_strchomp
- g_strchug
- g_strcompress
- g_strconcat
- g_strdelimit
- g_strdown
- g_strdup
- g_strdup_printf
- g_strdup_vprintf
- g_strdupv
- g_strerror
- g_strescape
- g_strfreev
- g_string_append
- g_string_append_c
- g_string_append_len
- g_string_assign
- g_string_chunk_free
- g_string_chunk_insert
- g_string_chunk_insert_const
- g_string_chunk_new
- g_string_down
- g_string_equal
- g_string_erase
- g_string_free
- g_string_insert
- g_string_insert_c
- g_string_insert_len
- g_string_new
- g_string_new_len
- g_string_prepend
- g_string_prepend_c
- g_string_prepend_len
- g_string_printf
- g_string_printfa
- g_string_sized_new
- g_string_truncate
- g_string_up
- g_strjoin
- g_strjoinv
- g_strlcat
- g_strlcpy
- g_strncasecmp
- g_strndup
- g_strnfill
- g_strreverse
- g_strsignal
- g_strsplit
- g_strtod
- g_strup
- g_thread_create_full
- g_thread_error_quark
- g_thread_functions_for_glib_use
- g_thread_join
- g_thread_exit
- g_thread_pool_free
- g_thread_pool_new
- g_thread_pool_push
- g_thread_self
- g_thread_set_priority
- g_thread_use_default_impl
- g_threads_got_initialized
- g_timeout_add
- g_timeout_add_full
- g_timeout_source_new
- g_timer_destroy
- g_timer_elapsed
- g_timer_new
- g_timer_reset
- g_timer_start
- g_timer_stop
- g_trash_stack_height
- g_trash_stack_peek
- g_trash_stack_pop
- g_trash_stack_push
- g_tree_destroy
- g_tree_height
- g_tree_insert
- g_tree_lookup
- g_tree_new
- g_tree_nnodes
- g_tree_remove
- g_tree_search
- g_tree_traverse
- g_try_malloc
- g_try_realloc
- g_tuples_destroy
- g_tuples_index
- g_ucs4_to_utf16
- g_ucs4_to_utf8
- g_unichar_break_type
- g_unichar_digit_value
- g_unichar_isalnum
- g_unichar_isalpha
- g_unichar_iscntrl
- g_unichar_isdefined
- g_unichar_isdigit
- g_unichar_isgraph
- g_unichar_islower
- g_unichar_isprint
- g_unichar_ispunct
- g_unichar_isspace
- g_unichar_istitle
- g_unichar_isupper
- g_unichar_iswide
- g_unichar_isxdigit
- g_unichar_to_utf8
- g_unichar_tolower
- g_unichar_totitle
- g_unichar_toupper
- g_unichar_type
- g_unichar_validate
- g_unichar_xdigit_value
- g_unicode_canonical_decomposition
- g_unicode_canonical_ordering
- g_usleep
- g_utf16_to_ucs4
- g_utf16_to_utf8
- g_utf8_find_next_char
- g_utf8_find_prev_char
- g_utf8_get_char
- g_utf8_offset_to_pointer
- g_utf8_pointer_to_offset
- g_utf8_prev_char
- g_utf8_skip
- g_utf8_strchr
- g_utf8_strlen
- g_utf8_strncpy
- g_utf8_to_ucs4
- g_utf8_to_ucs4_fast
- g_utf8_to_utf16
- g_utf8_validate
- g_vsnprintf
- g_win32_closedir
- g_win32_error_message
- g_win32_ftruncate
- g_win32_get_package_installation_directory
- g_win32_get_package_installation_subdirectory
- g_win32_getlocale
- g_win32_opendir
- g_win32_readdir
- g_win32_rewinddir
- glib_binary_age
- glib_interface_age
- glib_major_version
- glib_mem_profiler_table
- glib_micro_version
- glib_minor_version
-
-; compatibility for older win32 apps, which should
-; not need an update because of simple function renaming
-; and vice versa, i.e.:
-; compatibility of Dia 0.87 with tml's latest Gtk+ version (2000-12-26)
- g_dirname=g_path_get_dirname
- g_string_sprintfa=g_string_printfa
- g_string_sprintf=g_string_printf
return g_io_win32_create_watch (channel, condition, select_thread);
}
-/* Some functions prototypes so win32 will (hopefully) still compile FIXME */
-
GIOChannel *
g_io_channel_new_file (const gchar *filename,
- GIOFileMode mode,
+ const gchar *mode,
GError **error)
{
- g_warning("Function unimplemented: %s", G_GNUC_FUNCTION);
+ int fid, flags;
+ GIOChannel *channel;
- return NULL;
+ enum { /* Cheesy hack */
+ MODE_R = 1 << 0,
+ MODE_W = 1 << 1,
+ MODE_A = 1 << 2,
+ MODE_PLUS = 1 << 3,
+ } mode_num;
+
+ g_return_val_if_fail (filename != NULL, NULL);
+ g_return_val_if_fail (mode != NULL, NULL);
+ g_return_val_if_fail ((error == NULL) || (*error == NULL), NULL);
+
+ switch (mode[0])
+ {
+ case 'r':
+ mode_num = MODE_R;
+ break;
+ case 'w':
+ mode_num = MODE_W;
+ break;
+ case 'a':
+ mode_num = MODE_A;
+ break;
+ default:
+ g_warning ("Invalid GIOFileMode %s.\n", mode);
+ return NULL;
+ }
+
+ switch (mode[1])
+ {
+ case '\0':
+ break;
+ case '+':
+ if (mode[2] == '\0')
+ {
+ mode_num |= MODE_PLUS;
+ break;
+ }
+ /* Fall through */
+ default:
+ g_warning ("Invalid GIOFileMode %s.\n", mode);
+ return NULL;
+ }
+
+ switch (mode_num)
+ {
+ case MODE_R:
+ flags = O_RDONLY;
+ break;
+ case MODE_W:
+ flags = O_WRONLY | O_TRUNC | O_CREAT;
+ break;
+ case MODE_A:
+ flags = O_WRONLY | O_APPEND | O_CREAT;
+ break;
+ case MODE_R | MODE_PLUS:
+ flags = O_RDWR;
+ break;
+ case MODE_W | MODE_PLUS:
+ flags = O_RDWR | O_TRUNC | O_CREAT;
+ break;
+ case MODE_A | MODE_PLUS:
+ flags = O_RDWR | O_APPEND | O_CREAT;
+ break;
+ default:
+ g_assert_not_reached ();
+ flags = 0;
+ }
+
+
+ fid = open (filename, flags);
+ if (fid < 0)
+ {
+ g_set_error (error, G_FILE_ERROR,
+ g_file_error_from_errno (errno),
+ strerror (errno));
+ return (GIOChannel *)NULL;
+ }
+
+ channel = g_io_channel_win32_new_fd (fid);
+
+ /* XXX: move this to g_io_channel_win32_new_fd () */
+ channel->close_on_unref = TRUE;
+ channel->is_seekable = TRUE;
+
+ switch (mode_num)
+ {
+ case MODE_R:
+ channel->is_readable = TRUE;
+ channel->is_writeable = FALSE;
+ break;
+ case MODE_W:
+ case MODE_A:
+ channel->is_readable = FALSE;
+ channel->is_writeable = TRUE;
+ break;
+ case MODE_R | MODE_PLUS:
+ case MODE_W | MODE_PLUS:
+ case MODE_A | MODE_PLUS:
+ channel->is_readable = TRUE;
+ channel->is_writeable = TRUE;
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ if (((GIOWin32Channel *)channel)->debug)
+ g_print ("g_io_channel_win32_new_file: fd = %ud\n", fid);
+
+ return channel;
}
GIOStatus
GIOFlags flags,
GError **err)
{
- g_message("Function %s unimplemented.\n", G_GNUC_FUNCTION);
+ GIOWin32Channel *win32_channel = (GIOWin32Channel *)channel;
+
+ g_set_error (err,
+ G_IO_CHANNEL_ERROR,
+ g_file_error_from_errno (EACCES),
+ _("Channel set flags unsupported"));
+ return G_IO_STATUS_ERROR;
+}
+
+GIOFlags
+g_io_win32_fd_get_flags (GIOChannel *channel)
+{
+ GIOFlags flags = 0;
+ struct _stat st;
+ GIOWin32Channel *win32_channel = (GIOWin32Channel *)channel;
- return G_IO_STATUS_NORMAL; /* Can't return error, haven't set err */
+ g_return_val_if_fail (win32_channel != NULL, 0);
+ g_return_val_if_fail (win32_channel->type == G_IO_WIN32_FILE_DESC, 0);
+
+ if (0 == _fstat (win32_channel->fd, &st))
+ {
+ /* XXX: G_IO_FLAG_APPEND */
+ /* XXX: G_IO_FLAG_NONBLOCK */
+ if (st.st_mode & _S_IREAD) flags |= G_IO_FLAG_IS_READABLE;
+ if (st.st_mode & _S_IWRITE) flags |= G_IO_FLAG_IS_WRITEABLE;
+ /* XXX: */
+ if (!(st.st_mode & _S_IFIFO)) flags |= G_IO_FLAG_IS_SEEKABLE;
+ }
+
+ return flags;
}
+/*
+ * Generic implementation, just translating createion flags
+ */
GIOFlags
g_io_win32_get_flags (GIOChannel *channel)
{
- g_message("Function %s unimplemented.\n", G_GNUC_FUNCTION);
+ GIOFlags flags;
- return 0;
+ flags = (channel->is_readable ? G_IO_FLAG_IS_READABLE : 0)
+ | (channel->is_writeable ? G_IO_FLAG_IS_READABLE : 0)
+ | (channel->is_seekable ? G_IO_FLAG_IS_SEEKABLE : 0);
+
+ return flags;
}
static GIOFuncs win32_channel_msg_funcs = {
g_io_win32_fd_create_watch,
g_io_win32_free,
g_io_win32_set_flags,
- g_io_win32_get_flags,
+ g_io_win32_fd_get_flags,
};
static GIOFuncs win32_channel_sock_funcs = {
win32_channel->type = G_IO_WIN32_WINDOWS_MESSAGES;
win32_channel->hwnd = (HWND) hwnd;
- /* FIXME set is_readable, is_writeable */
+ /* XXX: check this. */
+ channel->is_readable = IsWindow (win32_channel->hwnd);
+ channel->is_writeable = IsWindow (win32_channel->hwnd);
channel->is_seekable = FALSE;
win32_channel->type = G_IO_WIN32_FILE_DESC;
win32_channel->fd = fd;
- /* FIXME set is_readable, is_writeable */
- channel->is_seekable = TRUE;
+ channel->is_readable = !!(st.st_mode & _S_IREAD);
+ channel->is_writeable = !!(st.st_mode & _S_IWRITE);
+ /* XXX: pipes aren't seeakable, are they ? */
+ channel->is_seekable = !(st.st_mode & _S_IFIFO);
return channel;
}
win32_channel->type = G_IO_WIN32_SOCKET;
win32_channel->fd = socket;
- /* FIXME set is_readable, is_writeable */
-
+ /* XXX: check this */
+ channel->is_readable = TRUE;
+ channel->is_writeable = TRUE;
channel->is_seekable = FALSE;
return channel;
g_cache_new
g_cache_remove
g_cache_value_foreach
- g_channel_error_quark
- g_channel_error_from_errno
g_clear_error
g_completion_add_items
g_completion_clear_items
g_io_add_watch
g_io_add_watch_full
g_io_channel_close
+ g_io_channel_error_from_errno
+ g_io_channel_error_quark
g_io_channel_flush
g_io_channel_get_buffer_condition
g_io_channel_get_buffer_size
+ g_io_channel_get_buffered
g_io_channel_get_encoding
g_io_channel_get_flags
g_io_channel_get_line_term
g_io_channel_seek
g_io_channel_seek_position
g_io_channel_set_buffer_size
+ g_io_channel_set_buffered
g_io_channel_set_encoding
g_io_channel_set_flags
g_io_channel_set_line_term
date-test.exe \
dirname-test.exe\
gio-test.exe \
+ iochannel-test.exe \
hash-test.exe \
list-test.exe \
mainloop-test.exe\