xref: /netbsd-src/tests/kernel/gen_t_subr_prf (revision 7ab3f5c310175aa4495c4c16065b60d55046b11f)
1408524deSchristos#!/bin/sh
2408524deSchristos
3408524deSchristoscat << _EOF > $2
4408524deSchristos#include <sys/types.h>
5ea6af427Stls#include <sys/time.h>
6408524deSchristos#include <stdio.h>
7408524deSchristos#include <stdarg.h>
8408524deSchristos#include <stdint.h>
98b2a560aSkre#include <stdlib.h>
10408524deSchristos#include <string.h>
11ea6af427Stls#include <sha2.h>
12408524deSchristos
13408524deSchristos#include <atf-c.h>
14408524deSchristos
15a1801097Schristos/* Avoid SSP re-definitions */
16a1801097Schristos#undef snprintf
17a1801097Schristos#undef vsnprintf
18a1801097Schristos#undef sprintf
19a1801097Schristos#undef vsprintf
208b2a560aSkre#undef vasprintf
21a1801097Schristos
22408524deSchristos#define KPRINTF_BUFSIZE 1024
23408524deSchristos#undef putchar
24408524deSchristos#define putchar xputchar
25ea6af427Stls
268b2a560aSkre#define kmem_alloc(n, f)	malloc(n)
278b2a560aSkre
28*7ab3f5c3Smrg#define kprintf_lock()		__nothing
29*7ab3f5c3Smrg#define kprintf_unlock()	__nothing
30*7ab3f5c3Smrg
31*7ab3f5c3Smrg/* Arbitrary */
32*7ab3f5c3Smrg#define TOCONS	1
33*7ab3f5c3Smrg#define TOLOG	2
34*7ab3f5c3Smrg
35*7ab3f5c3Smrg#define kprintf_internal(f, i1, i2, i3, ...) \
36*7ab3f5c3Smrg	printf(f, __VA_ARGS__)
37*7ab3f5c3Smrg
38408524deSchristosstatic int putchar(char c, int foo, void *b)
39408524deSchristos{
40408524deSchristos	return fputc(c, stderr);
41408524deSchristos}
42408524deSchristos
43408524deSchristos#define TOBUFONLY 1
44408524deSchristosstatic const char HEXDIGITS[] = "0123456789ABCDEF";
45408524deSchristosstatic const char hexdigits[] = "0123456789abcdef";
46408524deSchristos
47408524deSchristostypedef int device_t;
48408524deSchristos
49ea6af427Stls#if 0
50ea6af427Stlsstatic SHA512_CTX kprnd_sha;
51ea6af427Stls#endif
52ea6af427Stls
53ea6af427Stls#define timespec timeval
54ea6af427Stls#define nanotime(ts) gettimeofday(ts, NULL)
55ea6af427Stls
56408524deSchristos#define device_xname(a) ""
5766dd2755Sjoergint kprintf(const char *, int, void *, char *, va_list) __printflike(1, 0);
5866dd2755Sjoergvoid device_printf(device_t, const char *, ...) __printflike(2, 3);
59408524deSchristos
60408524deSchristosstatic void
61408524deSchristosempty(void)
62408524deSchristos{
63408524deSchristos}
64408524deSchristos
65408524deSchristosstatic void (*v_flush)(void) = empty;
66408524deSchristos
67408524deSchristosATF_TC(snprintf_print);
68408524deSchristosATF_TC_HEAD(snprintf_print, tc)
69408524deSchristos{
70408524deSchristos	atf_tc_set_md_var(tc, "descr", "checks snprintf print");
71408524deSchristos}
72408524deSchristos 
73408524deSchristosATF_TC_BODY(snprintf_print, tc)
74408524deSchristos{
7537649e40Smrg	char buf[13];
76408524deSchristos	int i;
77408524deSchristos
78408524deSchristos	memset(buf, 'x', sizeof(buf));
79408524deSchristos	i = snprintf(buf, sizeof(buf), "number %d", 10);
80408524deSchristos	ATF_CHECK_EQ(i, 9);
81408524deSchristos	ATF_CHECK_STREQ(buf, "number 10");
82408524deSchristos}
83408524deSchristos
84408524deSchristosATF_TC(snprintf_print_overflow);
85408524deSchristosATF_TC_HEAD(snprintf_print_overflow, tc)
86408524deSchristos{
87408524deSchristos	atf_tc_set_md_var(tc, "descr", "checks snprintf print with overflow");
88408524deSchristos}
89408524deSchristos 
90408524deSchristosATF_TC_BODY(snprintf_print_overflow, tc)
91408524deSchristos{
92408524deSchristos	char buf[10];
93408524deSchristos	int i;
94408524deSchristos
95408524deSchristos	memset(buf, 'x', sizeof(buf));
96408524deSchristos	i = snprintf(buf, sizeof(buf), "fjsdfsdjfsdf %d\n", 10);
97408524deSchristos	ATF_CHECK_EQ(i, 16);
98408524deSchristos	ATF_CHECK_STREQ(buf, "fjsdfsdjf");
99408524deSchristos}
100408524deSchristos
101408524deSchristosATF_TC(snprintf_count);
102408524deSchristosATF_TC_HEAD(snprintf_count, tc)
103408524deSchristos{
104408524deSchristos	atf_tc_set_md_var(tc, "descr", "checks snprintf count");
105408524deSchristos}
106408524deSchristos 
107408524deSchristosATF_TC_BODY(snprintf_count, tc)
108408524deSchristos{
109408524deSchristos	int i;
110408524deSchristos	
111408524deSchristos	i = snprintf(NULL, 20, "number %d", 10);
112408524deSchristos	ATF_CHECK_EQ(i, 9);
113408524deSchristos}
114408524deSchristos
115408524deSchristosATF_TC(snprintf_count_overflow);
116408524deSchristosATF_TC_HEAD(snprintf_count_overflow, tc)
117408524deSchristos{
118408524deSchristos	atf_tc_set_md_var(tc, "descr", "checks snprintf count with overflow");
119408524deSchristos}
120408524deSchristos 
121408524deSchristosATF_TC_BODY(snprintf_count_overflow, tc)
122408524deSchristos{
123408524deSchristos	int i;
124408524deSchristos
125408524deSchristos	i = snprintf(NULL, 10, "fjsdfsdjfsdf %d\n", 10);
126408524deSchristos	ATF_CHECK_EQ(i, 16);
127408524deSchristos}
128408524deSchristos
1298b2a560aSkreATF_TC(vasprintf_print);
1308b2a560aSkreATF_TC_HEAD(vasprintf_print, tc)
1318b2a560aSkre{
1328b2a560aSkre	atf_tc_set_md_var(tc, "descr", "checks vasprintf works");
1338b2a560aSkre}
1348b2a560aSkre
13538217df3Schristosstatic int __printflike(2, 3)
1368b2a560aSkrevasp_helper(char **buf, const char *fmt, ...)
1378b2a560aSkre{
1388b2a560aSkre	va_list ap;
1398b2a560aSkre	int ret;
1408b2a560aSkre
1418b2a560aSkre	va_start(ap, fmt);
1428b2a560aSkre	ret = vasprintf(buf, fmt, ap);
1438b2a560aSkre	va_end(ap);
1448b2a560aSkre	return ret;
1458b2a560aSkre}
1468b2a560aSkre
1478b2a560aSkreATF_TC_BODY(vasprintf_print, tc)
1488b2a560aSkre{
1498b2a560aSkre	int i;
1508b2a560aSkre	char *buf;
1518b2a560aSkre
1528b2a560aSkre	buf = NULL;
1538b2a560aSkre	i =  vasp_helper(&buf, "N=%d C=%c S=%s", 7, 'x', "abc");
1548b2a560aSkre	ATF_CHECK_EQ(i, 13);
1558b2a560aSkre	ATF_CHECK(buf != NULL);
1568b2a560aSkre	ATF_CHECK_STREQ(buf, "N=7 C=x S=abc");
1578b2a560aSkre	free(buf);
1588b2a560aSkre}
1598b2a560aSkre
160408524deSchristosATF_TP_ADD_TCS(tp)
161408524deSchristos{
162408524deSchristos	ATF_TP_ADD_TC(tp, snprintf_print);
163408524deSchristos	ATF_TP_ADD_TC(tp, snprintf_print_overflow);
164408524deSchristos	ATF_TP_ADD_TC(tp, snprintf_count);
165408524deSchristos	ATF_TP_ADD_TC(tp, snprintf_count_overflow);
1668b2a560aSkre	ATF_TP_ADD_TC(tp, vasprintf_print);
167408524deSchristos
168408524deSchristos	return atf_no_error();
169408524deSchristos}
170408524deSchristos_EOF
171408524deSchristos
172408524deSchristosawk '
173408524deSchristos/^snprintf\(/ {
174408524deSchristos	print prevline
175408524deSchristos	out = 1
176408524deSchristos}
177408524deSchristos{
178408524deSchristos	if (out) print
179408524deSchristos	else prevline = $0
180408524deSchristos}' $1 >>$2
181