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