1*57718be8SEnji Cooper#!/bin/sh 2*57718be8SEnji Cooper 3*57718be8SEnji Coopercat << _EOF > $2 4*57718be8SEnji Cooper#include <sys/types.h> 5*57718be8SEnji Cooper#include <sys/time.h> 6*57718be8SEnji Cooper#include <stdio.h> 7*57718be8SEnji Cooper#include <stdarg.h> 8*57718be8SEnji Cooper#include <stdint.h> 9*57718be8SEnji Cooper#include <string.h> 10*57718be8SEnji Cooper#include <sha2.h> 11*57718be8SEnji Cooper 12*57718be8SEnji Cooper#include <atf-c.h> 13*57718be8SEnji Cooper 14*57718be8SEnji Cooper/* Avoid SSP re-definitions */ 15*57718be8SEnji Cooper#undef snprintf 16*57718be8SEnji Cooper#undef vsnprintf 17*57718be8SEnji Cooper#undef sprintf 18*57718be8SEnji Cooper#undef vsprintf 19*57718be8SEnji Cooper 20*57718be8SEnji Cooper#define KPRINTF_BUFSIZE 1024 21*57718be8SEnji Cooper#undef putchar 22*57718be8SEnji Cooper#define putchar xputchar 23*57718be8SEnji Cooper 24*57718be8SEnji Cooperstatic int putchar(char c, int foo, void *b) 25*57718be8SEnji Cooper{ 26*57718be8SEnji Cooper return fputc(c, stderr); 27*57718be8SEnji Cooper} 28*57718be8SEnji Cooper 29*57718be8SEnji Cooper#define TOBUFONLY 1 30*57718be8SEnji Cooperstatic const char HEXDIGITS[] = "0123456789ABCDEF"; 31*57718be8SEnji Cooperstatic const char hexdigits[] = "0123456789abcdef"; 32*57718be8SEnji Cooper 33*57718be8SEnji Coopertypedef int device_t; 34*57718be8SEnji Cooper 35*57718be8SEnji Cooper#if 0 36*57718be8SEnji Cooperstatic SHA512_CTX kprnd_sha; 37*57718be8SEnji Cooper#endif 38*57718be8SEnji Cooper 39*57718be8SEnji Cooper#define timespec timeval 40*57718be8SEnji Cooper#define nanotime(ts) gettimeofday(ts, NULL) 41*57718be8SEnji Cooper 42*57718be8SEnji Cooper#define device_xname(a) "" 43*57718be8SEnji Cooperint kprintf(const char *, int, void *, char *, va_list) __printflike(1, 0); 44*57718be8SEnji Coopervoid device_printf(device_t, const char *, ...) __printflike(2, 3); 45*57718be8SEnji Cooper 46*57718be8SEnji Cooperstatic void 47*57718be8SEnji Cooperempty(void) 48*57718be8SEnji Cooper{ 49*57718be8SEnji Cooper} 50*57718be8SEnji Cooper 51*57718be8SEnji Cooperstatic void (*v_flush)(void) = empty; 52*57718be8SEnji Cooper 53*57718be8SEnji CooperATF_TC(snprintf_print); 54*57718be8SEnji CooperATF_TC_HEAD(snprintf_print, tc) 55*57718be8SEnji Cooper{ 56*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "checks snprintf print"); 57*57718be8SEnji Cooper} 58*57718be8SEnji Cooper 59*57718be8SEnji CooperATF_TC_BODY(snprintf_print, tc) 60*57718be8SEnji Cooper{ 61*57718be8SEnji Cooper char buf[10]; 62*57718be8SEnji Cooper int i; 63*57718be8SEnji Cooper 64*57718be8SEnji Cooper memset(buf, 'x', sizeof(buf)); 65*57718be8SEnji Cooper i = snprintf(buf, sizeof(buf), "number %d", 10); 66*57718be8SEnji Cooper ATF_CHECK_EQ(i, 9); 67*57718be8SEnji Cooper ATF_CHECK_STREQ(buf, "number 10"); 68*57718be8SEnji Cooper} 69*57718be8SEnji Cooper 70*57718be8SEnji CooperATF_TC(snprintf_print_overflow); 71*57718be8SEnji CooperATF_TC_HEAD(snprintf_print_overflow, tc) 72*57718be8SEnji Cooper{ 73*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "checks snprintf print with overflow"); 74*57718be8SEnji Cooper} 75*57718be8SEnji Cooper 76*57718be8SEnji CooperATF_TC_BODY(snprintf_print_overflow, tc) 77*57718be8SEnji Cooper{ 78*57718be8SEnji Cooper char buf[10]; 79*57718be8SEnji Cooper int i; 80*57718be8SEnji Cooper 81*57718be8SEnji Cooper memset(buf, 'x', sizeof(buf)); 82*57718be8SEnji Cooper i = snprintf(buf, sizeof(buf), "fjsdfsdjfsdf %d\n", 10); 83*57718be8SEnji Cooper ATF_CHECK_EQ(i, 16); 84*57718be8SEnji Cooper ATF_CHECK_STREQ(buf, "fjsdfsdjf"); 85*57718be8SEnji Cooper} 86*57718be8SEnji Cooper 87*57718be8SEnji CooperATF_TC(snprintf_count); 88*57718be8SEnji CooperATF_TC_HEAD(snprintf_count, tc) 89*57718be8SEnji Cooper{ 90*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "checks snprintf count"); 91*57718be8SEnji Cooper} 92*57718be8SEnji Cooper 93*57718be8SEnji CooperATF_TC_BODY(snprintf_count, tc) 94*57718be8SEnji Cooper{ 95*57718be8SEnji Cooper int i; 96*57718be8SEnji Cooper 97*57718be8SEnji Cooper i = snprintf(NULL, 20, "number %d", 10); 98*57718be8SEnji Cooper ATF_CHECK_EQ(i, 9); 99*57718be8SEnji Cooper} 100*57718be8SEnji Cooper 101*57718be8SEnji CooperATF_TC(snprintf_count_overflow); 102*57718be8SEnji CooperATF_TC_HEAD(snprintf_count_overflow, tc) 103*57718be8SEnji Cooper{ 104*57718be8SEnji Cooper atf_tc_set_md_var(tc, "descr", "checks snprintf count with overflow"); 105*57718be8SEnji Cooper} 106*57718be8SEnji Cooper 107*57718be8SEnji CooperATF_TC_BODY(snprintf_count_overflow, tc) 108*57718be8SEnji Cooper{ 109*57718be8SEnji Cooper int i; 110*57718be8SEnji Cooper 111*57718be8SEnji Cooper i = snprintf(NULL, 10, "fjsdfsdjfsdf %d\n", 10); 112*57718be8SEnji Cooper ATF_CHECK_EQ(i, 16); 113*57718be8SEnji Cooper} 114*57718be8SEnji Cooper 115*57718be8SEnji CooperATF_TP_ADD_TCS(tp) 116*57718be8SEnji Cooper{ 117*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, snprintf_print); 118*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, snprintf_print_overflow); 119*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, snprintf_count); 120*57718be8SEnji Cooper ATF_TP_ADD_TC(tp, snprintf_count_overflow); 121*57718be8SEnji Cooper 122*57718be8SEnji Cooper return atf_no_error(); 123*57718be8SEnji Cooper} 124*57718be8SEnji Cooper_EOF 125*57718be8SEnji Cooper 126*57718be8SEnji Cooperawk ' 127*57718be8SEnji Cooper/^snprintf\(/ { 128*57718be8SEnji Cooper print prevline 129*57718be8SEnji Cooper out = 1 130*57718be8SEnji Cooper} 131*57718be8SEnji Cooper{ 132*57718be8SEnji Cooper if (out) print 133*57718be8SEnji Cooper else prevline = $0 134*57718be8SEnji Cooper}' $1 >>$2 135