]> git.proxmox.com Git - qemu.git/blame - tests/tcg/test_path.c
m25p80.c: Sync Flash chip list with Linux
[qemu.git] / tests / tcg / test_path.c
CommitLineData
7fb9a24e 1/* Test path override code */
f62cb1b6
CP
2#define _GNU_SOURCE
3#include "config-host.h"
4#include "iov.c"
5#include "cutils.c"
6#include "path.c"
7#include "trace.c"
6d8a764e 8#ifdef CONFIG_TRACE_SIMPLE
f62cb1b6 9#include "../trace/simple.c"
48118b02
PB
10#endif
11
7fb9a24e
FB
12#include <stdarg.h>
13#include <sys/stat.h>
14#include <fcntl.h>
15
48118b02
PB
16void qemu_log(const char *fmt, ...);
17
7fb9a24e 18/* Any log message kills the test. */
48118b02 19void qemu_log(const char *fmt, ...)
7fb9a24e
FB
20{
21 va_list ap;
22
23 fprintf(stderr, "FATAL: ");
24 va_start(ap, fmt);
25 vfprintf(stderr, fmt, ap);
26 va_end(ap);
27 exit(1);
28}
29
30#define NO_CHANGE(_path) \
31 do { \
32 if (strcmp(path(_path), _path) != 0) return __LINE__; \
33 } while(0)
34
35#define CHANGE_TO(_path, _newpath) \
36 do { \
37 if (strcmp(path(_path), _newpath) != 0) return __LINE__; \
38 } while(0)
39
40static void cleanup(void)
41{
42 unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE");
43 unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE2");
44 unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE3");
45 unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE4");
46 unlink("/tmp/qemu-test_path/DIR1/DIR2/FILE5");
47 rmdir("/tmp/qemu-test_path/DIR1/DIR2");
48 rmdir("/tmp/qemu-test_path/DIR1/DIR3");
49 rmdir("/tmp/qemu-test_path/DIR1");
50 rmdir("/tmp/qemu-test_path");
51}
52
53static unsigned int do_test(void)
54{
55 if (mkdir("/tmp/qemu-test_path", 0700) != 0)
56 return __LINE__;
57
58 if (mkdir("/tmp/qemu-test_path/DIR1", 0700) != 0)
59 return __LINE__;
60
61 if (mkdir("/tmp/qemu-test_path/DIR1/DIR2", 0700) != 0)
62 return __LINE__;
63
64 if (mkdir("/tmp/qemu-test_path/DIR1/DIR3", 0700) != 0)
65 return __LINE__;
66
67 if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE", 0600)) != 0)
68 return __LINE__;
69
70 if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE2", 0600)) != 0)
71 return __LINE__;
72
73 if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE3", 0600)) != 0)
74 return __LINE__;
75
76 if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE4", 0600)) != 0)
77 return __LINE__;
78
79 if (close(creat("/tmp/qemu-test_path/DIR1/DIR2/FILE5", 0600)) != 0)
80 return __LINE__;
81
82 init_paths("/tmp/qemu-test_path");
83
84 NO_CHANGE("/tmp");
85 NO_CHANGE("/tmp/");
86 NO_CHANGE("/tmp/qemu-test_path");
87 NO_CHANGE("/tmp/qemu-test_path/");
88 NO_CHANGE("/tmp/qemu-test_path/D");
89 NO_CHANGE("/tmp/qemu-test_path/DI");
90 NO_CHANGE("/tmp/qemu-test_path/DIR");
91 NO_CHANGE("/tmp/qemu-test_path/DIR1");
92 NO_CHANGE("/tmp/qemu-test_path/DIR1/");
93
94 NO_CHANGE("/D");
95 NO_CHANGE("/DI");
96 NO_CHANGE("/DIR");
97 NO_CHANGE("/DIR2");
98 NO_CHANGE("/DIR1.");
99
100 CHANGE_TO("/DIR1", "/tmp/qemu-test_path/DIR1");
101 CHANGE_TO("/DIR1/", "/tmp/qemu-test_path/DIR1");
102
103 NO_CHANGE("/DIR1/D");
104 NO_CHANGE("/DIR1/DI");
105 NO_CHANGE("/DIR1/DIR");
106 NO_CHANGE("/DIR1/DIR1");
107
108 CHANGE_TO("/DIR1/DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
109 CHANGE_TO("/DIR1/DIR2/", "/tmp/qemu-test_path/DIR1/DIR2");
110
111 CHANGE_TO("/DIR1/DIR3", "/tmp/qemu-test_path/DIR1/DIR3");
112 CHANGE_TO("/DIR1/DIR3/", "/tmp/qemu-test_path/DIR1/DIR3");
113
114 NO_CHANGE("/DIR1/DIR2/F");
115 NO_CHANGE("/DIR1/DIR2/FI");
116 NO_CHANGE("/DIR1/DIR2/FIL");
117 NO_CHANGE("/DIR1/DIR2/FIL.");
118
119 CHANGE_TO("/DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
120 CHANGE_TO("/DIR1/DIR2/FILE2", "/tmp/qemu-test_path/DIR1/DIR2/FILE2");
121 CHANGE_TO("/DIR1/DIR2/FILE3", "/tmp/qemu-test_path/DIR1/DIR2/FILE3");
122 CHANGE_TO("/DIR1/DIR2/FILE4", "/tmp/qemu-test_path/DIR1/DIR2/FILE4");
123 CHANGE_TO("/DIR1/DIR2/FILE5", "/tmp/qemu-test_path/DIR1/DIR2/FILE5");
124
125 NO_CHANGE("/DIR1/DIR2/FILE6");
126 NO_CHANGE("/DIR1/DIR2/FILE/X");
127
128 CHANGE_TO("/DIR1/../DIR1", "/tmp/qemu-test_path/DIR1");
129 CHANGE_TO("/DIR1/../DIR1/", "/tmp/qemu-test_path/DIR1");
130 CHANGE_TO("/../DIR1", "/tmp/qemu-test_path/DIR1");
131 CHANGE_TO("/../DIR1/", "/tmp/qemu-test_path/DIR1");
132 CHANGE_TO("/DIR1/DIR2/../DIR2", "/tmp/qemu-test_path/DIR1/DIR2");
133 CHANGE_TO("/DIR1/DIR2/../DIR2/../../DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
134 CHANGE_TO("/DIR1/DIR2/../DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
135
136 NO_CHANGE("/DIR1/DIR2/../DIR1");
137 NO_CHANGE("/DIR1/DIR2/../FILE");
138
139 CHANGE_TO("/./DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
140 CHANGE_TO("/././DIR1/DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
141 CHANGE_TO("/DIR1/./DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
142 CHANGE_TO("/DIR1/././DIR2/FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
143 CHANGE_TO("/DIR1/DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
144 CHANGE_TO("/DIR1/DIR2/././FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
145 CHANGE_TO("/./DIR1/./DIR2/./FILE", "/tmp/qemu-test_path/DIR1/DIR2/FILE");
146
147 return 0;
148}
149
150int main(int argc, char *argv[])
151{
152 int ret;
153
154 ret = do_test();
155 cleanup();
156 if (ret) {
157 fprintf(stderr, "test_path: failed on line %i\n", ret);
158 return 1;
159 }
160 return 0;
161}