diff options
author | J. Ali Harlow <ali@juiblex.co.uk> | 2004-03-24 16:50:56 +0000 |
---|---|---|
committer | J. Ali Harlow <j_ali@src.gnome.org> | 2004-03-24 16:50:56 +0000 |
commit | d9441cc6f31804b0cddc58eba897e0bbd56ede06 (patch) | |
tree | 37806d25430e5a7a25a62a807d20879fdc6ba34f /gtk | |
parent | 457e4c20f869c6d50fccd1a7c4d4886d728e33e2 (diff) | |
download | gdk-pixbuf-d9441cc6f31804b0cddc58eba897e0bbd56ede06.tar.gz |
Test that path is actually a directory and throw error if not. Fixed bug
2004-03-24 J. Ali Harlow <ali@juiblex.co.uk>
* gtk/gtkfilesystemwin32.c
(gtk_file_system_win32_get_folder): Test that path is actually
a directory and throw error if not. Fixed bug #137950
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkfilesystemwin32.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gtk/gtkfilesystemwin32.c b/gtk/gtkfilesystemwin32.c index c629071a8..6064a8680 100644 --- a/gtk/gtkfilesystemwin32.c +++ b/gtk/gtkfilesystemwin32.c @@ -345,6 +345,34 @@ gtk_file_system_win32_get_folder (GtkFileSystem *file_system, filename = filename_from_path (path); g_return_val_if_fail (filename != NULL, NULL); + if (!g_file_test (filename, G_FILE_TEST_IS_DIR)) + { + int save_errno = errno; + gchar *filename_utf8 = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL); + + /* If g_file_test() returned FALSE but not due to an error, it means + * that the filename is not a directory. + */ + if (save_errno == 0) + /* ENOTDIR */ + g_set_error (error, + GTK_FILE_SYSTEM_ERROR, + GTK_FILE_SYSTEM_ERROR_NOT_FOLDER, + _("%s: %s"), + filename_utf8 ? filename_utf8 : "???", + g_strerror (ENOTDIR)); + else + g_set_error (error, + GTK_FILE_SYSTEM_ERROR, + GTK_FILE_SYSTEM_ERROR_NONEXISTENT, + _("error getting information for '%s': %s"), + filename_utf8 ? filename_utf8 : "???", + g_strerror (save_errno)); + + g_free (filename_utf8); + return NULL; + } + folder_win32 = g_object_new (GTK_TYPE_FILE_FOLDER_WIN32, NULL); folder_win32->filename = filename; folder_win32->types = types; |