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