Home | History | Annotate | Line # | Download | only in kernel
      1 #!/bin/sh
      2 
      3 cat << _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 <stdlib.h>
     10 #include <string.h>
     11 #include <sha2.h>
     12 
     13 #include <atf-c.h>
     14 
     15 /* Avoid SSP re-definitions */
     16 #undef snprintf
     17 #undef vsnprintf
     18 #undef sprintf
     19 #undef vsprintf
     20 #undef vasprintf
     21 
     22 #define KPRINTF_BUFSIZE 1024
     23 #undef putchar
     24 #define putchar xputchar
     25 
     26 #define kmem_alloc(n, f)	malloc(n)
     27 
     28 #define kprintf_lock()		__nothing
     29 #define kprintf_unlock()	__nothing
     30 
     31 /* Arbitrary */
     32 #define TOCONS	1
     33 #define TOLOG	2
     34 
     35 #define kprintf_internal(f, i1, i2, i3, ...) \
     36 	printf(f, __VA_ARGS__)
     37 
     38 static int putchar(char c, int foo, void *b)
     39 {
     40 	return fputc(c, stderr);
     41 }
     42 
     43 #define TOBUFONLY 1
     44 static const char HEXDIGITS[] = "0123456789ABCDEF";
     45 static const char hexdigits[] = "0123456789abcdef";
     46 
     47 typedef int device_t;
     48 
     49 #if 0
     50 static SHA512_CTX kprnd_sha;
     51 #endif
     52 
     53 #define timespec timeval
     54 #define nanotime(ts) gettimeofday(ts, NULL)
     55 
     56 #define device_xname(a) ""
     57 int kprintf(const char *, int, void *, char *, va_list) __printflike(1, 0);
     58 void device_printf(device_t, const char *, ...) __printflike(2, 3);
     59 
     60 static void
     61 empty(void)
     62 {
     63 }
     64 
     65 static void (*v_flush)(void) = empty;
     66 
     67 ATF_TC(snprintf_print);
     68 ATF_TC_HEAD(snprintf_print, tc)
     69 {
     70 	atf_tc_set_md_var(tc, "descr", "checks snprintf print");
     71 }
     72  
     73 ATF_TC_BODY(snprintf_print, tc)
     74 {
     75 	char buf[13];
     76 	int i;
     77 
     78 	memset(buf, 'x', sizeof(buf));
     79 	i = snprintf(buf, sizeof(buf), "number %d", 10);
     80 	ATF_CHECK_EQ(i, 9);
     81 	ATF_CHECK_STREQ(buf, "number 10");
     82 }
     83 
     84 ATF_TC(snprintf_print_overflow);
     85 ATF_TC_HEAD(snprintf_print_overflow, tc)
     86 {
     87 	atf_tc_set_md_var(tc, "descr", "checks snprintf print with overflow");
     88 }
     89  
     90 ATF_TC_BODY(snprintf_print_overflow, tc)
     91 {
     92 	char buf[10];
     93 	int i;
     94 
     95 	memset(buf, 'x', sizeof(buf));
     96 	i = snprintf(buf, sizeof(buf), "fjsdfsdjfsdf %d\n", 10);
     97 	ATF_CHECK_EQ(i, 16);
     98 	ATF_CHECK_STREQ(buf, "fjsdfsdjf");
     99 }
    100 
    101 ATF_TC(snprintf_count);
    102 ATF_TC_HEAD(snprintf_count, tc)
    103 {
    104 	atf_tc_set_md_var(tc, "descr", "checks snprintf count");
    105 }
    106  
    107 ATF_TC_BODY(snprintf_count, tc)
    108 {
    109 	int i;
    110 	
    111 	i = snprintf(NULL, 20, "number %d", 10);
    112 	ATF_CHECK_EQ(i, 9);
    113 }
    114 
    115 ATF_TC(snprintf_count_overflow);
    116 ATF_TC_HEAD(snprintf_count_overflow, tc)
    117 {
    118 	atf_tc_set_md_var(tc, "descr", "checks snprintf count with overflow");
    119 }
    120  
    121 ATF_TC_BODY(snprintf_count_overflow, tc)
    122 {
    123 	int i;
    124 
    125 	i = snprintf(NULL, 10, "fjsdfsdjfsdf %d\n", 10);
    126 	ATF_CHECK_EQ(i, 16);
    127 }
    128 
    129 ATF_TC(vasprintf_print);
    130 ATF_TC_HEAD(vasprintf_print, tc)
    131 {
    132 	atf_tc_set_md_var(tc, "descr", "checks vasprintf works");
    133 }
    134 
    135 static int __printflike(2, 3)
    136 vasp_helper(char **buf, const char *fmt, ...)
    137 {
    138 	va_list ap;
    139 	int ret;
    140 
    141 	va_start(ap, fmt);
    142 	ret = vasprintf(buf, fmt, ap);
    143 	va_end(ap);
    144 	return ret;
    145 }
    146 
    147 ATF_TC_BODY(vasprintf_print, tc)
    148 {
    149 	int i;
    150 	char *buf;
    151 
    152 	buf = NULL;
    153 	i =  vasp_helper(&buf, "N=%d C=%c S=%s", 7, 'x', "abc");
    154 	ATF_CHECK_EQ(i, 13);
    155 	ATF_CHECK(buf != NULL);
    156 	ATF_CHECK_STREQ(buf, "N=7 C=x S=abc");
    157 	free(buf);
    158 }
    159 
    160 ATF_TP_ADD_TCS(tp)
    161 {
    162 	ATF_TP_ADD_TC(tp, snprintf_print);
    163 	ATF_TP_ADD_TC(tp, snprintf_print_overflow);
    164 	ATF_TP_ADD_TC(tp, snprintf_count);
    165 	ATF_TP_ADD_TC(tp, snprintf_count_overflow);
    166 	ATF_TP_ADD_TC(tp, vasprintf_print);
    167 
    168 	return atf_no_error();
    169 }
    170 _EOF
    171 
    172 awk '
    173 /^snprintf\(/ {
    174 	print prevline
    175 	out = 1
    176 }
    177 {
    178 	if (out) print
    179 	else prevline = $0
    180 }' $1 >>$2
    181