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 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 38static int putchar(char c, int foo, void *b) 39{ 40 return fputc(c, stderr); 41} 42 43#define TOBUFONLY 1 44static const char HEXDIGITS[] = "0123456789ABCDEF"; 45static const char hexdigits[] = "0123456789abcdef"; 46 47typedef int device_t; 48 49#if 0 50static SHA512_CTX kprnd_sha; 51#endif 52 53#define timespec timeval 54#define nanotime(ts) gettimeofday(ts, NULL) 55 56#define device_xname(a) "" 57int kprintf(const char *, int, void *, char *, va_list) __printflike(1, 0); 58void device_printf(device_t, const char *, ...) __printflike(2, 3); 59 60static void 61empty(void) 62{ 63} 64 65static void (*v_flush)(void) = empty; 66 67ATF_TC(snprintf_print); 68ATF_TC_HEAD(snprintf_print, tc) 69{ 70 atf_tc_set_md_var(tc, "descr", "checks snprintf print"); 71} 72 73ATF_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 84ATF_TC(snprintf_print_overflow); 85ATF_TC_HEAD(snprintf_print_overflow, tc) 86{ 87 atf_tc_set_md_var(tc, "descr", "checks snprintf print with overflow"); 88} 89 90ATF_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 101ATF_TC(snprintf_count); 102ATF_TC_HEAD(snprintf_count, tc) 103{ 104 atf_tc_set_md_var(tc, "descr", "checks snprintf count"); 105} 106 107ATF_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 115ATF_TC(snprintf_count_overflow); 116ATF_TC_HEAD(snprintf_count_overflow, tc) 117{ 118 atf_tc_set_md_var(tc, "descr", "checks snprintf count with overflow"); 119} 120 121ATF_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 129ATF_TC(vasprintf_print); 130ATF_TC_HEAD(vasprintf_print, tc) 131{ 132 atf_tc_set_md_var(tc, "descr", "checks vasprintf works"); 133} 134 135static int __printflike(2, 3) 136vasp_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 147ATF_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 160ATF_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 172awk ' 173/^snprintf\(/ { 174 print prevline 175 out = 1 176} 177{ 178 if (out) print 179 else prevline = $0 180}' $1 >>$2 181