rename
[libc-test] / src / functional / fscanf.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <errno.h>
5 #include <limits.h>
6 #include <unistd.h>
7 #include "test.h"
8
9 #define T(f, x, m) do { \
10         r = (f); \
11         if (r != (x)) \
12                 error("%s failed (got %d, expected %d, errno \"%s\") (%s)\n", \
13                         #f, r, x, errno ? strerror(errno) : "", m); \
14         errno = 0; \
15 } while (0)
16
17 #define S(s, x, m) do { \
18         if (strcmp(s, x) != 0) \
19                 error("got [%s] want [%s] (%s)\n", s, x, m); \
20 } while(0)
21
22 int main(void)
23 {
24         int r, x, y;
25         char a[100], b[100];
26         int p[2];
27         FILE *f;
28
29         T(pipe(p), 0, "open pipe");
30         T(!(f = fdopen(p[0], "rb")), 0, "fdopen pipe");
31         if (!f) {
32                 close(p[0]);
33                 close(p[1]);
34                 return test_status;
35         }
36
37         T(write(p[1], "hello, world\n", 13), 13, "write to pipe");
38         T(fscanf(f, "%s %[own]", a, b), 2, "");
39         S(a, "hello,", "wrong result for %s");
40         S(b, "wo", "wrong result for %[own]");
41         T(fgetc(f), 'r', "fgetc 'r'");
42
43         T(write(p[1], " 0x12 0x34", 10), 10, "");
44         T(fscanf(f, "ld %5i%2i", &x, &y), 1, "");
45         T(x, 0x12, "");
46         T(fgetc(f), '3', "fgetc '3'");
47
48         fclose(f);
49         close(p[1]);
50         return test_status;
51 }