nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 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, see <http://www.gnu.org/licenses/>. |
||
16 | */ |
||
17 | |||
18 | /* |
||
19 | * Modified by the GLib Team and others 1997-2000. See the AUTHORS |
||
20 | * file for a list of people on the GLib Team. See the ChangeLog |
||
21 | * files for a list of changes. These files are distributed with |
||
22 | * GLib at ftp://ftp.gtk.org/pub/gtk/. |
||
23 | */ |
||
24 | |||
25 | #undef G_DISABLE_ASSERT |
||
26 | #undef G_LOG_DOMAIN |
||
27 | |||
28 | #ifdef GLIB_COMPILATION |
||
29 | #undef GLIB_COMPILATION |
||
30 | #endif |
||
31 | |||
32 | #include <string.h> |
||
33 | |||
34 | #include <glib.h> |
||
35 | |||
36 | #include <gstdio.h> |
||
37 | |||
38 | #include <fcntl.h> /* For open() */ |
||
39 | |||
40 | #ifdef G_OS_UNIX |
||
41 | #include <unistd.h> |
||
42 | #endif |
||
43 | #ifdef G_OS_WIN32 |
||
44 | #include <io.h> /* For read(), write() etc */ |
||
45 | #endif |
||
46 | |||
47 | static void |
||
48 | test_mkstemp (void) |
||
49 | { |
||
50 | char template[32]; |
||
51 | int fd; |
||
52 | int i; |
||
53 | const char hello[] = "Hello, World"; |
||
54 | const int hellolen = sizeof (hello) - 1; |
||
55 | char chars[62]; |
||
56 | |||
57 | strcpy (template, "foobar"); |
||
58 | fd = g_mkstemp (template); |
||
59 | if (fd != -1) |
||
60 | { |
||
61 | g_warning ("g_mkstemp works even if template doesn't contain XXXXXX"); |
||
62 | close (fd); |
||
63 | } |
||
64 | |||
65 | strcpy (template, "foobarXXX"); |
||
66 | fd = g_mkstemp (template); |
||
67 | if (fd != -1) |
||
68 | { |
||
69 | g_warning ("g_mkstemp works even if template contains less than six X"); |
||
70 | close (fd); |
||
71 | } |
||
72 | |||
73 | strcpy (template, "fooXXXXXX"); |
||
74 | fd = g_mkstemp (template); |
||
75 | g_assert (fd != -1 && "g_mkstemp didn't work for template fooXXXXXX"); |
||
76 | i = write (fd, hello, hellolen); |
||
77 | g_assert (i != -1 && "write() failed"); |
||
78 | g_assert (i == hellolen && "write() has written too few bytes"); |
||
79 | |||
80 | lseek (fd, 0, 0); |
||
81 | i = read (fd, chars, sizeof (chars)); |
||
82 | g_assert (i != -1 && "read() failed: %s"); |
||
83 | g_assert (i == hellolen && "read() has got wrong number of bytes"); |
||
84 | |||
85 | chars[i] = 0; |
||
86 | g_assert (strcmp (chars, hello) == 0 && "read() didn't get same string back"); |
||
87 | |||
88 | close (fd); |
||
89 | remove (template); |
||
90 | |||
91 | strcpy (template, "fooXXXXXX.pdf"); |
||
92 | fd = g_mkstemp (template); |
||
93 | g_assert (fd != -1 && "g_mkstemp didn't work for template fooXXXXXX.pdf"); |
||
94 | |||
95 | close (fd); |
||
96 | remove (template); |
||
97 | } |
||
98 | |||
99 | static void |
||
100 | test_mkdtemp (void) |
||
101 | { |
||
102 | char template[32], *retval; |
||
103 | int fd; |
||
104 | int i; |
||
105 | |||
106 | strcpy (template, "foodir"); |
||
107 | retval = g_mkdtemp (template); |
||
108 | if (retval != NULL) |
||
109 | { |
||
110 | g_warning ("g_mkdtemp works even if template doesn't contain XXXXXX"); |
||
111 | g_rmdir (retval); |
||
112 | } |
||
113 | |||
114 | strcpy (template, "foodir"); |
||
115 | retval = g_mkdtemp (template); |
||
116 | if (retval != NULL) |
||
117 | { |
||
118 | g_warning ("g_mkdtemp works even if template contains less than six X"); |
||
119 | g_rmdir (retval); |
||
120 | } |
||
121 | |||
122 | strcpy (template, "fooXXXXXX"); |
||
123 | retval = g_mkdtemp (template); |
||
124 | g_assert (retval != NULL && "g_mkdtemp didn't work for template fooXXXXXX"); |
||
125 | g_assert (retval == template && "g_mkdtemp allocated the resulting string?"); |
||
126 | g_assert (!g_file_test (template, G_FILE_TEST_IS_REGULAR)); |
||
127 | g_assert (g_file_test (template, G_FILE_TEST_IS_DIR)); |
||
128 | |||
129 | strcat (template, "/abc"); |
||
130 | fd = g_open (template, O_WRONLY | O_CREAT, 0600); |
||
131 | g_assert (fd != -1 && "couldn't open file in temporary directory"); |
||
132 | close (fd); |
||
133 | g_assert (g_file_test (template, G_FILE_TEST_IS_REGULAR)); |
||
134 | i = g_unlink (template); |
||
135 | g_assert (i != -1 && "couldn't unlink file in temporary directory"); |
||
136 | |||
137 | template[9] = '\0'; |
||
138 | i = g_rmdir (template); |
||
139 | g_assert (i != -1 && "couldn't remove temporary directory"); |
||
140 | |||
141 | strcpy (template, "fooXXXXXX.dir"); |
||
142 | retval = g_mkdtemp (template); |
||
143 | g_assert (retval != NULL && "g_mkdtemp didn't work for template fooXXXXXX.dir"); |
||
144 | g_assert (g_file_test (template, G_FILE_TEST_IS_DIR)); |
||
145 | g_rmdir (template); |
||
146 | } |
||
147 | |||
148 | static void |
||
149 | test_readlink (void) |
||
150 | { |
||
151 | #ifdef HAVE_SYMLINK |
||
152 | FILE *file; |
||
153 | int result; |
||
154 | char *filename = "file-test-data"; |
||
155 | char *link1 = "file-test-link1"; |
||
156 | char *link2 = "file-test-link2"; |
||
157 | char *link3 = "file-test-link3"; |
||
158 | char *data; |
||
159 | GError *error; |
||
160 | |||
161 | file = fopen (filename, "w"); |
||
162 | g_assert (file != NULL && "fopen() failed"); |
||
163 | fclose (file); |
||
164 | |||
165 | result = symlink (filename, link1); |
||
166 | g_assert (result == 0 && "symlink() failed"); |
||
167 | result = symlink (link1, link2); |
||
168 | g_assert (result == 0 && "symlink() failed"); |
||
169 | |||
170 | error = NULL; |
||
171 | data = g_file_read_link (link1, &error); |
||
172 | g_assert (data != NULL && "couldn't read link1"); |
||
173 | g_assert (strcmp (data, filename) == 0 && "link1 contains wrong data"); |
||
174 | g_free (data); |
||
175 | |||
176 | error = NULL; |
||
177 | data = g_file_read_link (link2, &error); |
||
178 | g_assert (data != NULL && "couldn't read link2"); |
||
179 | g_assert (strcmp (data, link1) == 0 && "link2 contains wrong data"); |
||
180 | g_free (data); |
||
181 | |||
182 | error = NULL; |
||
183 | data = g_file_read_link (link3, &error); |
||
184 | g_assert (data == NULL && "could read link3"); |
||
185 | g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_NOENT); |
||
186 | g_error_free (error); |
||
187 | |||
188 | error = NULL; |
||
189 | data = g_file_read_link (filename, &error); |
||
190 | g_assert (data == NULL && "could read regular file as link"); |
||
191 | g_assert_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL); |
||
192 | g_error_free (error); |
||
193 | |||
194 | remove (filename); |
||
195 | remove (link1); |
||
196 | remove (link2); |
||
197 | #endif |
||
198 | } |
||
199 | |||
200 | static void |
||
201 | test_get_contents (void) |
||
202 | { |
||
203 | const gchar *text = "abcdefghijklmnopqrstuvwxyz"; |
||
204 | const gchar *filename = "file-test-get-contents"; |
||
205 | gchar *contents; |
||
206 | gsize len; |
||
207 | FILE *f; |
||
208 | GError *error = NULL; |
||
209 | |||
210 | f = g_fopen (filename, "w"); |
||
211 | fwrite (text, 1, strlen (text), f); |
||
212 | fclose (f); |
||
213 | |||
214 | g_assert (g_file_test (filename, G_FILE_TEST_IS_REGULAR)); |
||
215 | |||
216 | if (! g_file_get_contents (filename, &contents, &len, &error)) |
||
217 | g_error ("g_file_get_contents() failed: %s", error->message); |
||
218 | |||
219 | g_assert (strcmp (text, contents) == 0 && "content mismatch"); |
||
220 | |||
221 | g_free (contents); |
||
222 | } |
||
223 | |||
224 | int |
||
225 | main (int argc, char *argv[]) |
||
226 | { |
||
227 | test_mkstemp (); |
||
228 | test_mkdtemp (); |
||
229 | test_readlink (); |
||
230 | test_get_contents (); |
||
231 | |||
232 | return 0; |
||
233 | } |