gen_t_subr_prf revision 1.2.4.1 1 1.1 christos #!/bin/sh
2 1.1 christos
3 1.1 christos cat << _EOF > $2
4 1.1 christos #include <sys/types.h>
5 1.1 christos #include <stdio.h>
6 1.1 christos #include <stdarg.h>
7 1.1 christos #include <stdint.h>
8 1.1 christos #include <string.h>
9 1.1 christos
10 1.1 christos #include <atf-c.h>
11 1.1 christos
12 1.2.4.1 tls /* Avoid SSP re-definitions */
13 1.2.4.1 tls #undef snprintf
14 1.2.4.1 tls #undef vsnprintf
15 1.2.4.1 tls #undef sprintf
16 1.2.4.1 tls #undef vsprintf
17 1.2.4.1 tls
18 1.1 christos #define KPRINTF_BUFSIZE 1024
19 1.1 christos #undef putchar
20 1.1 christos #define putchar xputchar
21 1.1 christos static int putchar(char c, int foo, void *b)
22 1.1 christos {
23 1.1 christos return fputc(c, stderr);
24 1.1 christos }
25 1.1 christos
26 1.1 christos #define TOBUFONLY 1
27 1.1 christos static const char HEXDIGITS[] = "0123456789ABCDEF";
28 1.1 christos static const char hexdigits[] = "0123456789abcdef";
29 1.1 christos
30 1.1 christos typedef int device_t;
31 1.1 christos
32 1.1 christos #define device_xname(a) ""
33 1.2 joerg int kprintf(const char *, int, void *, char *, va_list) __printflike(1, 0);
34 1.2 joerg void device_printf(device_t, const char *, ...) __printflike(2, 3);
35 1.1 christos
36 1.1 christos static void
37 1.1 christos empty(void)
38 1.1 christos {
39 1.1 christos }
40 1.1 christos
41 1.1 christos static void (*v_flush)(void) = empty;
42 1.1 christos
43 1.1 christos ATF_TC(snprintf_print);
44 1.1 christos ATF_TC_HEAD(snprintf_print, tc)
45 1.1 christos {
46 1.1 christos atf_tc_set_md_var(tc, "descr", "checks snprintf print");
47 1.1 christos }
48 1.1 christos
49 1.1 christos ATF_TC_BODY(snprintf_print, tc)
50 1.1 christos {
51 1.1 christos char buf[10];
52 1.1 christos int i;
53 1.1 christos
54 1.1 christos memset(buf, 'x', sizeof(buf));
55 1.1 christos i = snprintf(buf, sizeof(buf), "number %d", 10);
56 1.1 christos ATF_CHECK_EQ(i, 9);
57 1.1 christos ATF_CHECK_STREQ(buf, "number 10");
58 1.1 christos }
59 1.1 christos
60 1.1 christos ATF_TC(snprintf_print_overflow);
61 1.1 christos ATF_TC_HEAD(snprintf_print_overflow, tc)
62 1.1 christos {
63 1.1 christos atf_tc_set_md_var(tc, "descr", "checks snprintf print with overflow");
64 1.1 christos }
65 1.1 christos
66 1.1 christos ATF_TC_BODY(snprintf_print_overflow, tc)
67 1.1 christos {
68 1.1 christos char buf[10];
69 1.1 christos int i;
70 1.1 christos
71 1.1 christos memset(buf, 'x', sizeof(buf));
72 1.1 christos i = snprintf(buf, sizeof(buf), "fjsdfsdjfsdf %d\n", 10);
73 1.1 christos ATF_CHECK_EQ(i, 16);
74 1.1 christos ATF_CHECK_STREQ(buf, "fjsdfsdjf");
75 1.1 christos }
76 1.1 christos
77 1.1 christos ATF_TC(snprintf_count);
78 1.1 christos ATF_TC_HEAD(snprintf_count, tc)
79 1.1 christos {
80 1.1 christos atf_tc_set_md_var(tc, "descr", "checks snprintf count");
81 1.1 christos }
82 1.1 christos
83 1.1 christos ATF_TC_BODY(snprintf_count, tc)
84 1.1 christos {
85 1.1 christos int i;
86 1.1 christos
87 1.1 christos i = snprintf(NULL, 20, "number %d", 10);
88 1.1 christos ATF_CHECK_EQ(i, 9);
89 1.1 christos }
90 1.1 christos
91 1.1 christos ATF_TC(snprintf_count_overflow);
92 1.1 christos ATF_TC_HEAD(snprintf_count_overflow, tc)
93 1.1 christos {
94 1.1 christos atf_tc_set_md_var(tc, "descr", "checks snprintf count with overflow");
95 1.1 christos }
96 1.1 christos
97 1.1 christos ATF_TC_BODY(snprintf_count_overflow, tc)
98 1.1 christos {
99 1.1 christos int i;
100 1.1 christos
101 1.1 christos i = snprintf(NULL, 10, "fjsdfsdjfsdf %d\n", 10);
102 1.1 christos ATF_CHECK_EQ(i, 16);
103 1.1 christos }
104 1.1 christos
105 1.1 christos ATF_TP_ADD_TCS(tp)
106 1.1 christos {
107 1.1 christos ATF_TP_ADD_TC(tp, snprintf_print);
108 1.1 christos ATF_TP_ADD_TC(tp, snprintf_print_overflow);
109 1.1 christos ATF_TP_ADD_TC(tp, snprintf_count);
110 1.1 christos ATF_TP_ADD_TC(tp, snprintf_count_overflow);
111 1.1 christos
112 1.1 christos return atf_no_error();
113 1.1 christos }
114 1.1 christos _EOF
115 1.1 christos
116 1.1 christos awk '
117 1.1 christos /^snprintf\(/ {
118 1.1 christos print prevline
119 1.1 christos out = 1
120 1.1 christos }
121 1.1 christos {
122 1.1 christos if (out) print
123 1.1 christos else prevline = $0
124 1.1 christos }' $1 >>$2
125