1272343Sngie#!/bin/sh
2272343Sngie
3272343Sngiecat << _EOF > $2
4272343Sngie#include <sys/types.h>
5272343Sngie#include <sys/time.h>
6272343Sngie#include <stdio.h>
7272343Sngie#include <stdarg.h>
8272343Sngie#include <stdint.h>
9272343Sngie#include <string.h>
10272343Sngie#include <sha2.h>
11272343Sngie
12272343Sngie#include <atf-c.h>
13272343Sngie
14272343Sngie/* Avoid SSP re-definitions */
15272343Sngie#undef snprintf
16272343Sngie#undef vsnprintf
17272343Sngie#undef sprintf
18272343Sngie#undef vsprintf
19272343Sngie
20272343Sngie#define KPRINTF_BUFSIZE 1024
21272343Sngie#undef putchar
22272343Sngie#define putchar xputchar
23272343Sngie
24272343Sngiestatic int putchar(char c, int foo, void *b)
25272343Sngie{
26272343Sngie	return fputc(c, stderr);
27272343Sngie}
28272343Sngie
29272343Sngie#define TOBUFONLY 1
30272343Sngiestatic const char HEXDIGITS[] = "0123456789ABCDEF";
31272343Sngiestatic const char hexdigits[] = "0123456789abcdef";
32272343Sngie
33272343Sngietypedef int device_t;
34272343Sngie
35272343Sngie#if 0
36272343Sngiestatic SHA512_CTX kprnd_sha;
37272343Sngie#endif
38272343Sngie
39272343Sngie#define timespec timeval
40272343Sngie#define nanotime(ts) gettimeofday(ts, NULL)
41272343Sngie
42272343Sngie#define device_xname(a) ""
43272343Sngieint kprintf(const char *, int, void *, char *, va_list) __printflike(1, 0);
44272343Sngievoid device_printf(device_t, const char *, ...) __printflike(2, 3);
45272343Sngie
46272343Sngiestatic void
47272343Sngieempty(void)
48272343Sngie{
49272343Sngie}
50272343Sngie
51272343Sngiestatic void (*v_flush)(void) = empty;
52272343Sngie
53272343SngieATF_TC(snprintf_print);
54272343SngieATF_TC_HEAD(snprintf_print, tc)
55272343Sngie{
56272343Sngie        atf_tc_set_md_var(tc, "descr", "checks snprintf print");
57272343Sngie}
58272343Sngie 
59272343SngieATF_TC_BODY(snprintf_print, tc)
60272343Sngie{
61272343Sngie	char buf[10];
62272343Sngie	int i;
63272343Sngie
64272343Sngie	memset(buf, 'x', sizeof(buf));
65272343Sngie	i = snprintf(buf, sizeof(buf), "number %d", 10);
66272343Sngie	ATF_CHECK_EQ(i, 9);
67272343Sngie	ATF_CHECK_STREQ(buf, "number 10");
68272343Sngie}
69272343Sngie
70272343SngieATF_TC(snprintf_print_overflow);
71272343SngieATF_TC_HEAD(snprintf_print_overflow, tc)
72272343Sngie{
73272343Sngie        atf_tc_set_md_var(tc, "descr", "checks snprintf print with overflow");
74272343Sngie}
75272343Sngie 
76272343SngieATF_TC_BODY(snprintf_print_overflow, tc)
77272343Sngie{
78272343Sngie	char buf[10];
79272343Sngie	int i;
80272343Sngie
81272343Sngie	memset(buf, 'x', sizeof(buf));
82272343Sngie	i = snprintf(buf, sizeof(buf), "fjsdfsdjfsdf %d\n", 10);
83272343Sngie	ATF_CHECK_EQ(i, 16);
84272343Sngie	ATF_CHECK_STREQ(buf, "fjsdfsdjf");
85272343Sngie}
86272343Sngie
87272343SngieATF_TC(snprintf_count);
88272343SngieATF_TC_HEAD(snprintf_count, tc)
89272343Sngie{
90272343Sngie        atf_tc_set_md_var(tc, "descr", "checks snprintf count");
91272343Sngie}
92272343Sngie 
93272343SngieATF_TC_BODY(snprintf_count, tc)
94272343Sngie{
95272343Sngie	int i;
96272343Sngie	
97272343Sngie	i = snprintf(NULL, 20, "number %d", 10);
98272343Sngie	ATF_CHECK_EQ(i, 9);
99272343Sngie}
100272343Sngie
101272343SngieATF_TC(snprintf_count_overflow);
102272343SngieATF_TC_HEAD(snprintf_count_overflow, tc)
103272343Sngie{
104272343Sngie        atf_tc_set_md_var(tc, "descr", "checks snprintf count with overflow");
105272343Sngie}
106272343Sngie 
107272343SngieATF_TC_BODY(snprintf_count_overflow, tc)
108272343Sngie{
109272343Sngie	int i;
110272343Sngie
111272343Sngie	i = snprintf(NULL, 10, "fjsdfsdjfsdf %d\n", 10);
112272343Sngie	ATF_CHECK_EQ(i, 16);
113272343Sngie}
114272343Sngie
115272343SngieATF_TP_ADD_TCS(tp)
116272343Sngie{
117272343Sngie        ATF_TP_ADD_TC(tp, snprintf_print);
118272343Sngie        ATF_TP_ADD_TC(tp, snprintf_print_overflow);
119272343Sngie        ATF_TP_ADD_TC(tp, snprintf_count);
120272343Sngie        ATF_TP_ADD_TC(tp, snprintf_count_overflow);
121272343Sngie
122272343Sngie        return atf_no_error();
123272343Sngie}
124272343Sngie_EOF
125272343Sngie
126272343Sngieawk '
127272343Sngie/^snprintf\(/ {
128272343Sngie	print prevline
129272343Sngie	out = 1
130272343Sngie}
131272343Sngie{
132272343Sngie	if (out) print
133272343Sngie	else prevline = $0
134272343Sngie}' $1 >>$2
135