summaryrefslogtreecommitdiffstats
path: root/contrib/netbsd-tests/kernel/gen_t_subr_prf
blob: b58a6ba425d5280f78c3b7461c133085679b0d9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/sh

cat << _EOF > $2
#include <sys/types.h>
#include <sys/time.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdint.h>
#include <string.h>
#include <sha2.h>

#include <atf-c.h>

/* Avoid SSP re-definitions */
#undef snprintf
#undef vsnprintf
#undef sprintf
#undef vsprintf

#define KPRINTF_BUFSIZE 1024
#undef putchar
#define putchar xputchar

static int putchar(char c, int foo, void *b)
{
	return fputc(c, stderr);
}

#define TOBUFONLY 1
static const char HEXDIGITS[] = "0123456789ABCDEF";
static const char hexdigits[] = "0123456789abcdef";

typedef int device_t;

#if 0
static SHA512_CTX kprnd_sha;
#endif

#define timespec timeval
#define nanotime(ts) gettimeofday(ts, NULL)

#define device_xname(a) ""
int kprintf(const char *, int, void *, char *, va_list) __printflike(1, 0);
void device_printf(device_t, const char *, ...) __printflike(2, 3);

static void
empty(void)
{
}

static void (*v_flush)(void) = empty;

ATF_TC(snprintf_print);
ATF_TC_HEAD(snprintf_print, tc)
{
        atf_tc_set_md_var(tc, "descr", "checks snprintf print");
}
 
ATF_TC_BODY(snprintf_print, tc)
{
	char buf[10];
	int i;

	memset(buf, 'x', sizeof(buf));
	i = snprintf(buf, sizeof(buf), "number %d", 10);
	ATF_CHECK_EQ(i, 9);
	ATF_CHECK_STREQ(buf, "number 10");
}

ATF_TC(snprintf_print_overflow);
ATF_TC_HEAD(snprintf_print_overflow, tc)
{
        atf_tc_set_md_var(tc, "descr", "checks snprintf print with overflow");
}
 
ATF_TC_BODY(snprintf_print_overflow, tc)
{
	char buf[10];
	int i;

	memset(buf, 'x', sizeof(buf));
	i = snprintf(buf, sizeof(buf), "fjsdfsdjfsdf %d\n", 10);
	ATF_CHECK_EQ(i, 16);
	ATF_CHECK_STREQ(buf, "fjsdfsdjf");
}

ATF_TC(snprintf_count);
ATF_TC_HEAD(snprintf_count, tc)
{
        atf_tc_set_md_var(tc, "descr", "checks snprintf count");
}
 
ATF_TC_BODY(snprintf_count, tc)
{
	int i;
	
	i = snprintf(NULL, 20, "number %d", 10);
	ATF_CHECK_EQ(i, 9);
}

ATF_TC(snprintf_count_overflow);
ATF_TC_HEAD(snprintf_count_overflow, tc)
{
        atf_tc_set_md_var(tc, "descr", "checks snprintf count with overflow");
}
 
ATF_TC_BODY(snprintf_count_overflow, tc)
{
	int i;

	i = snprintf(NULL, 10, "fjsdfsdjfsdf %d\n", 10);
	ATF_CHECK_EQ(i, 16);
}

ATF_TP_ADD_TCS(tp)
{
        ATF_TP_ADD_TC(tp, snprintf_print);
        ATF_TP_ADD_TC(tp, snprintf_print_overflow);
        ATF_TP_ADD_TC(tp, snprintf_count);
        ATF_TP_ADD_TC(tp, snprintf_count_overflow);

        return atf_no_error();
}
_EOF

awk '
/^snprintf\(/ {
	print prevline
	out = 1
}
{
	if (out) print
	else prevline = $0
}' $1 >>$2
OpenPOWER on IntegriCloud