X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=mono.git;a=blobdiff_plain;f=mono%2Fmetadata%2Fw32file.c;h=f10ae499645e1afd7093c4ca76c1d731d239a85e;hp=630278f1b26841232678a578f038006f8d96ff96;hb=ab0b591ca59d99a2370bf9f579b091c5edf09ae5;hpb=87b1ca3bd8fadef8502f5c7e3fad16b2418bede7 diff --git a/mono/metadata/w32file.c b/mono/metadata/w32file.c index 630278f1b26..f10ae499645 100644 --- a/mono/metadata/w32file.c +++ b/mono/metadata/w32file.c @@ -285,36 +285,6 @@ ves_icall_System_IO_MonoIO_RemoveDirectory (MonoString *path, gint32 *error) return(ret); } -typedef struct { - MonoDomain *domain; - gchar *utf8_path; - HANDLE find_handle; -} IncrementalFind; - -static gboolean -incremental_find_check_match (IncrementalFind *handle, WIN32_FIND_DATA *data, MonoString **result, MonoError *error) -{ - error_init (error); - gchar *utf8_result; - gchar *full_name; - - if ((data->cFileName[0] == '.' && data->cFileName[1] == 0) || (data->cFileName[0] == '.' && data->cFileName[1] == '.' && data->cFileName[2] == 0)) - return FALSE; - - utf8_result = g_utf16_to_utf8 (data->cFileName, -1, NULL, NULL, NULL); - if (utf8_result == NULL) - return FALSE; - - full_name = g_build_filename (handle->utf8_path, utf8_result, NULL); - g_free (utf8_result); - *result = mono_string_new_checked (mono_domain_get (), full_name, error); - g_free (full_name); - if (!is_ok (error)) - return FALSE; - - return TRUE; -} - HANDLE ves_icall_System_IO_MonoIO_FindFirstFile (MonoString *path_with_pattern, MonoString **file_name, gint32 *file_attr, gint32 *ioerror) { @@ -371,106 +341,6 @@ ves_icall_System_IO_MonoIO_FindCloseFile (HANDLE hnd) return mono_w32file_find_close (hnd); } -/* FIXME make gc suspendable */ -MonoString * -ves_icall_System_IO_MonoIO_FindFirst (MonoString *path, - MonoString *path_with_pattern, - gint32 *result_attr, gint32 *ioerror, - gpointer *handle) -{ - MonoError error; - WIN32_FIND_DATA data; - HANDLE find_handle; - IncrementalFind *ifh; - MonoString *result; - - *ioerror = ERROR_SUCCESS; - - find_handle = mono_w32file_find_first (mono_string_chars (path_with_pattern), &data); - - if (find_handle == INVALID_HANDLE_VALUE) { - gint32 find_error = mono_w32error_get_last (); - *handle = NULL; - - if (find_error == ERROR_FILE_NOT_FOUND) - return NULL; - - *ioerror = find_error; - return NULL; - } - - ifh = g_new (IncrementalFind, 1); - ifh->find_handle = find_handle; - ifh->utf8_path = mono_string_to_utf8_checked (path, &error); - if (mono_error_set_pending_exception (&error)) { - mono_w32file_find_close (find_handle); - g_free (ifh); - return NULL; - } - ifh->domain = mono_domain_get (); - *handle = ifh; - - while (incremental_find_check_match (ifh, &data, &result, &error) == 0){ - if (!is_ok (&error)) { - mono_error_set_pending_exception (&error); - return NULL; - } - if (mono_w32file_find_next (find_handle, &data) == FALSE){ - int e = mono_w32error_get_last (); - if (e != ERROR_NO_MORE_FILES) - *ioerror = e; - return NULL; - } - } - *result_attr = data.dwFileAttributes; - - return result; -} - -/* FIXME make gc suspendable */ -MonoString * -ves_icall_System_IO_MonoIO_FindNext (gpointer handle, gint32 *result_attr, gint32 *ioerror) -{ - MonoError error; - IncrementalFind *ifh = (IncrementalFind *)handle; - WIN32_FIND_DATA data; - MonoString *result; - - error_init (&error); - *ioerror = ERROR_SUCCESS; - do { - if (!is_ok (&error)) { - mono_error_set_pending_exception (&error); - return NULL; - } - if (mono_w32file_find_next (ifh->find_handle, &data) == FALSE){ - int e = mono_w32error_get_last (); - if (e != ERROR_NO_MORE_FILES) - *ioerror = e; - return NULL; - } - } while (incremental_find_check_match (ifh, &data, &result, &error) == 0); - - *result_attr = data.dwFileAttributes; - return result; -} - -int -ves_icall_System_IO_MonoIO_FindClose (gpointer handle) -{ - IncrementalFind *ifh = (IncrementalFind *)handle; - gint32 error; - - if (mono_w32file_find_close (ifh->find_handle) == FALSE){ - error = mono_w32error_get_last (); - } else - error = ERROR_SUCCESS; - g_free (ifh->utf8_path); - g_free (ifh); - - return error; -} - MonoString * ves_icall_System_IO_MonoIO_GetCurrentDirectory (gint32 *io_error) {