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