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