1 /* GLIB - Library of useful routines for C programming 2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the 16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 * Boston, MA 02111-1307, USA. 18 */ 19 20 /* 21 * Modified by the GLib Team and others 1997-2000. See the AUTHORS 22 * file for a list of people on the GLib Team. See the ChangeLog 23 * files for a list of changes. These files are distributed with 24 * GLib at ftp://ftp.gtk.org/pub/gtk/. 25 */ 26 27 #undef G_DISABLE_ASSERT 28 #undef G_LOG_DOMAIN 29 30 #include <stdio.h> 31 #include <string.h> 32 #include "glib.h" 33 34 int array[10000]; 35 gboolean failed = FALSE; 36 37 #define TEST(m,cond) G_STMT_START { failed = !(cond); \ 38 if (failed) \ 39 { if (!m) \ 40 g_print ("\n(%s:%d) failed for: %s\n", __FILE__, __LINE__, ( # cond )); \ 41 else \ 42 g_print ("\n(%s:%d) failed for: %s: (%s)\n", __FILE__, __LINE__, ( # cond ), (gchar*)m); \ 43 } \ 44 else \ 45 g_print ("."); fflush (stdout); \ 46 } G_STMT_END 47 48 #define C2P(c) ((gpointer) ((long) (c))) 49 #define P2C(p) ((gchar) ((long) (p))) 50 51 #define GLIB_TEST_STRING "el dorado " 52 #define GLIB_TEST_STRING_5 "el do" 53 54 int 55 main (int argc, 56 char *argv[]) 57 { 58 gint i; 59 struct { 60 gchar *filename; 61 gchar *dirname; 62 } dirname_checks[] = { 63 { "/", "/" }, 64 { "////", "/" }, 65 { ".////", "." }, 66 { ".", "." }, 67 { "..", "." }, 68 { "../", ".." }, 69 { "..////", ".." }, 70 { "", "." }, 71 { "a/b", "a" }, 72 { "a/b/", "a/b" }, 73 { "c///", "c" }, 74 { "/a/b", "/a" }, 75 { "/a/b/", "/a/b" }, 76 #ifdef G_OS_WIN32 77 { "\\", "\\" }, 78 { ".\\\\\\\\", "." }, 79 { ".\\/\\/", "." }, 80 { ".", "." }, 81 { "..", "." }, 82 { "..\\", ".." }, 83 { "..\\\\\\\\", ".." }, 84 { "..\\//\\", ".." }, 85 { "", "." }, 86 { "a\\b", "a" }, 87 { "a\\b\\", "a\\b" }, 88 { "\\a\\b", "\\a" }, 89 { "\\a\\b\\", "\\a\\b" }, 90 { "c\\\\\\", "c" }, 91 { "c/\\\\", "c" }, 92 { "a:", "a:." }, 93 { "a:foo", "a:." }, 94 { "a:foo\\bar", "a:foo" }, 95 { "a:/foo", "a:/" }, 96 { "a:/foo/bar", "a:/foo" }, 97 { "a:/", "a:/" }, 98 { "a://", "a:/" }, 99 { "a:\\foo", "a:\\" }, 100 { "a:\\", "a:\\" }, 101 { "a:\\\\", "a:\\" }, 102 { "a:\\/", "a:\\" }, 103 #endif 104 }; 105 guint n_dirname_checks = sizeof (dirname_checks) / sizeof (dirname_checks[0]); 106 107 for (i = 0; i < n_dirname_checks; i++) 108 { 109 gchar *dirname; 110 111 dirname = g_path_get_dirname (dirname_checks[i].filename); 112 if (strcmp (dirname, dirname_checks[i].dirname) != 0) 113 g_error ("%s returned %s, should return %s", 114 dirname_checks[i].filename, dirname, 115 dirname_checks[i].dirname); 116 g_free (dirname); 117 } 118 119 return 0; 120 } 121 122