This source file includes following definitions.
- is_device
- gl_msvc_invalid_parameter_handler
- is_open
- main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #define __need_system_sys_stat_h
20 #include <config.h>
21
22
23
24 #include <sys/types.h>
25 #include <sys/stat.h>
26 #undef __need_system_sys_stat_h
27
28
29 static int
30 is_device (int fd)
31 {
32 #if defined _WIN32 && ! defined __CYGWIN__
33 struct _stat st;
34 return _fstat (fd, &st) >= 0 && !((st.st_mode & S_IFMT) == S_IFREG);
35 #else
36 struct stat st;
37 return fstat (fd, &st) >= 0 && !S_ISREG (st.st_mode);
38 #endif
39 }
40
41
42 #include <fcntl.h>
43 #include <signal.h>
44 #include <stdbool.h>
45 #include <stdint.h>
46 #include <stdio.h>
47 #include <stdlib.h>
48 #include <string.h>
49 #include <unistd.h>
50
51 #if defined _WIN32 && ! defined __CYGWIN__
52
53 # define WIN32_LEAN_AND_MEAN
54 # include <windows.h>
55
56 # include <io.h>
57 #endif
58
59
60 #undef atoi
61 #undef close
62 #undef fcntl
63 #undef fflush
64 #undef fgetc
65 #undef fprintf
66 #undef fputs
67 #undef getcwd
68 #undef isatty
69 #undef open
70 #undef raise
71 #undef read
72 #undef sprintf
73 #undef strcasestr
74 #undef strcmp
75 #undef strlen
76 #undef strstr
77 #undef write
78
79 #include "qemu.h"
80
81 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER
82 static void __cdecl
83 gl_msvc_invalid_parameter_handler (const wchar_t *expression,
84 const wchar_t *function,
85 const wchar_t *file,
86 unsigned int line,
87 uintptr_t dummy)
88 {
89 }
90 #endif
91
92
93 static int
94 is_open (int fd)
95 {
96 #if defined _WIN32 && ! defined __CYGWIN__
97
98
99
100 return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE;
101 #else
102 # ifndef F_GETFL
103 # error Please port fcntl to your platform
104 # endif
105 return 0 <= fcntl (fd, F_GETFL);
106 #endif
107 }
108
109 int
110 main (int argc, char *argv[])
111 {
112 if (argc == 1)
113
114 return 40;
115
116 int test = atoi (argv[1]);
117 switch (test)
118 {
119 case 2:
120
121 return !(argc == 12
122 && strcmp (argv[2], "abc def") == 0
123 && strcmp (argv[3], "abc\"def\"ghi") == 0
124 && strcmp (argv[4], "xyz\"") == 0
125 && strcmp (argv[5], "abc\\def\\ghi") == 0
126 && strcmp (argv[6], "xyz\\") == 0
127 && strcmp (argv[7], "???") == 0
128 && strcmp (argv[8], "***") == 0
129 && strcmp (argv[9], "") == 0
130 && strcmp (argv[10], "foo") == 0
131 && strcmp (argv[11], "") == 0);
132 #if !(defined _WIN32 && !defined __CYGWIN__)
133 case 3:
134
135 case 4:
136
137 raise (SIGPIPE);
138 return 71;
139 #endif
140 case 5:
141
142 raise (SIGINT);
143 return 71;
144 case 6:
145
146 return !(fgetc (stdin) == 'F' && fgetc (stdin) == 'o');
147 case 7:
148
149 return !(fgetc (stdin) == EOF);
150 case 8:
151
152 return !(fputs ("bar", stdout) != EOF && fflush (stdout) == 0);
153 case 9:
154
155 case 10:
156
157 return !is_device (STDOUT_FILENO);
158 case 11:
159
160 return !(fputs ("bar", stderr) != EOF && fflush (stderr) == 0);
161 case 12:
162
163 case 13:
164
165 return !is_device (STDERR_FILENO);
166 case 14:
167 case 15:
168
169 case 16:
170
171 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER
172
173 _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler);
174 #endif
175 {
176
177
178 bool is_qemu = is_running_under_qemu_user ();
179 char buf[300];
180 buf[0] = '\0';
181 char *p = buf;
182 int fd;
183 for (fd = 0; fd < 20; fd++)
184 if (is_open (fd) && !(is_qemu && fd == 3))
185 {
186 sprintf (p, "%d ", fd);
187 p += strlen (p);
188 }
189 const char *expected = (test < 16 ? "0 1 2 10 " : "0 1 2 ");
190 if (strcmp (buf, expected) == 0)
191 return 0;
192 else
193 {
194 fprintf (stderr, "Test case %d: %s\n", test, buf); fflush (stderr);
195 return 1;
196 }
197 }
198 case 17:
199
200
201 {
202 char buf[6];
203 int n = read (10, buf, sizeof (buf));
204 return !(n == 4 && memcmp (buf, "obar", 4) == 0);
205 }
206 case 18:
207
208
209 {
210 int n = write (10, "bar", 3);
211 return !(n == 3);
212 }
213 case 19:
214
215
216 case 20:
217
218
219 {
220 #if defined _WIN32 && ! defined __CYGWIN__
221 return 4 + 2 * (_isatty (10) != 0) + (_isatty (11) != 0);
222 #else
223 return 4 + 2 * (isatty (10) != 0) + (isatty (11) != 0);
224 #endif
225 }
226 case 21:
227
228 {
229 char cwd[1024];
230 #if defined _WIN32 && ! defined __CYGWIN__
231 if (_chdir ("..") != 0)
232 return 1;
233 if (_getcwd (cwd, sizeof (cwd)) == NULL)
234 return 2;
235 #else
236 if (chdir ("..") != 0)
237 return 1;
238 if (getcwd (cwd, sizeof (cwd)) == NULL)
239 return 2;
240 #endif
241 return (argc == 3 && strcmp (argv[2], cwd) == 0 ? 0 : 3);
242 }
243 default:
244 abort ();
245 }
246 }