diff options
author | Tor Lillqvist <tml@novell.com> | 2005-06-22 09:43:37 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 2005-06-22 09:43:37 +0000 |
commit | 1833a93dddaaa77b11761a92d8961bba67217d94 (patch) | |
tree | 4978351be84b47dbf92117585c964f5bc4009b60 /tests/testglib.c | |
parent | adb066fa110346c26c5f5392b6489c6285f1cbc1 (diff) |
New function. Creates a directory including intermediate parent
2005-06-22 Tor Lillqvist <tml@novell.com>
* glib/gfileutils.c (g_makepath): New function. Creates a
directory including intermediate parent directories as
needed. (#60509)
* glib/gfileutils.h: Declare it.
* glib/glib.symbols: Add it.
* tests/testglib.c: Test it.
Diffstat (limited to 'tests/testglib.c')
-rw-r--r-- | tests/testglib.c | 118 |
1 files changed, 117 insertions, 1 deletions
diff --git a/tests/testglib.c b/tests/testglib.c index 00f14cce3..02504088e 100644 --- a/tests/testglib.c +++ b/tests/testglib.c @@ -38,6 +38,7 @@ #include <errno.h> #include "glib.h" +#include "gstdio.h" #ifdef HAVE_UNISTD_H #include <unistd.h> @@ -318,6 +319,119 @@ find_first_that(gpointer key, } +static gboolean +test_g_makepath_1 (const gchar *base) +{ + char *p0 = g_build_filename (base, "fum", NULL); + char *p1 = g_build_filename (p0, "tem", NULL); + char *p2 = g_build_filename (p1, "zap", NULL); + FILE *f; + + g_remove (p2); + g_remove (p1); + g_remove (p0); + + if (g_file_test (p0, G_FILE_TEST_EXISTS)) + { + g_print ("failed, %s exists, cannot test g_makepath\n", p0); + return FALSE; + } + + if (g_file_test (p1, G_FILE_TEST_EXISTS)) + { + g_print ("failed, %s exists, cannot test g_makepath\n", p1); + return FALSE; + } + + if (g_file_test (p2, G_FILE_TEST_EXISTS)) + { + g_print ("failed, %s exists, cannot test g_makepath\n", p2); + return FALSE; + } + + if (g_makepath (p2, 0666) == -1) + { + g_print ("failed, g_makepath(%s) failed: %s\n", p2, g_strerror (errno)); + return FALSE; + } + + if (!g_file_test (p2, G_FILE_TEST_IS_DIR)) + { + g_print ("failed, g_makepath(%s) succeeded, but %s is not a directory\n", p2, p2); + return FALSE; + } + + if (!g_file_test (p1, G_FILE_TEST_IS_DIR)) + { + g_print ("failed, g_makepath(%s) succeeded, but %s is not a directory\n", p2, p1); + return FALSE; + } + + if (!g_file_test (p0, G_FILE_TEST_IS_DIR)) + { + g_print ("failed, g_makepath(%s) succeeded, but %s is not a directory\n", p2, p0); + return FALSE; + } + + g_rmdir (p2); + if (g_file_test (p2, G_FILE_TEST_EXISTS)) + { + g_print ("failed, did g_rmdir(%s), but %s is still there\n", p2, p2); + return FALSE; + } + + g_rmdir (p1); + if (g_file_test (p1, G_FILE_TEST_EXISTS)) + { + g_print ("failed, did g_rmdir(%s), but %s is still there\n", p1, p1); + return FALSE; + } + + f = g_fopen (p1, "w"); + if (f == NULL) + { + g_print ("failed, couldn't create file %s\n", p1); + return FALSE; + } + fclose (f); + + if (g_makepath (p1, 0666) == 0) + { + g_print ("failed, g_makepath(%s) succeeded, even if %s is a file\n", p1, p1); + return FALSE; + } + + if (g_makepath (p2, 0666) == 0) + { + g_print ("failed, g_makepath(%s) succeeded, even if %s is a file\n", p2, p1); + return FALSE; + } + + g_remove (p2); + g_remove (p1); + g_remove (p0); + + return TRUE; +} + +static gboolean +test_g_makepath (void) +{ + g_print ("checking g_makepath()..."); + if (!test_g_makepath_1 ("hum")) + return FALSE; + g_remove ("hum"); + if (!test_g_makepath_1 ("hii///haa/hee")) + return FALSE; + g_remove ("hii/haa/hee"); + g_remove ("hii/haa"); + g_remove ("hii"); + if (!test_g_makepath_1 (g_get_current_dir ())) + return FALSE; + + return TRUE; +} + int main (int argc, char *argv[]) @@ -482,7 +596,6 @@ main (int argc, string = g_path_get_basename ("/foo/file"); g_assert (strcmp (string, "file") == 0); g_free (string); - g_print ("ok\n"); #endif g_print ("checking g_path_get_dirname()..."); @@ -526,6 +639,9 @@ main (int argc, if (n_skip_root_checks) g_print ("ok\n"); + if (test_g_makepath ()) + g_print ("ok\n"); + g_print ("checking doubly linked lists..."); list = NULL; |