1408524deSchristos#!/bin/sh 2408524deSchristos 3408524deSchristoscat << _EOF > $2 4408524deSchristos#include <sys/types.h> 5ea6af427Stls#include <sys/time.h> 6408524deSchristos#include <stdio.h> 7408524deSchristos#include <stdarg.h> 8408524deSchristos#include <stdint.h> 98b2a560aSkre#include <stdlib.h> 10408524deSchristos#include <string.h> 11ea6af427Stls#include <sha2.h> 12408524deSchristos 13408524deSchristos#include <atf-c.h> 14408524deSchristos 15a1801097Schristos/* Avoid SSP re-definitions */ 16a1801097Schristos#undef snprintf 17a1801097Schristos#undef vsnprintf 18a1801097Schristos#undef sprintf 19a1801097Schristos#undef vsprintf 208b2a560aSkre#undef vasprintf 21a1801097Schristos 22408524deSchristos#define KPRINTF_BUFSIZE 1024 23408524deSchristos#undef putchar 24408524deSchristos#define putchar xputchar 25ea6af427Stls 268b2a560aSkre#define kmem_alloc(n, f) malloc(n) 278b2a560aSkre 28*7ab3f5c3Smrg#define kprintf_lock() __nothing 29*7ab3f5c3Smrg#define kprintf_unlock() __nothing 30*7ab3f5c3Smrg 31*7ab3f5c3Smrg/* Arbitrary */ 32*7ab3f5c3Smrg#define TOCONS 1 33*7ab3f5c3Smrg#define TOLOG 2 34*7ab3f5c3Smrg 35*7ab3f5c3Smrg#define kprintf_internal(f, i1, i2, i3, ...) \ 36*7ab3f5c3Smrg printf(f, __VA_ARGS__) 37*7ab3f5c3Smrg 38408524deSchristosstatic int putchar(char c, int foo, void *b) 39408524deSchristos{ 40408524deSchristos return fputc(c, stderr); 41408524deSchristos} 42408524deSchristos 43408524deSchristos#define TOBUFONLY 1 44408524deSchristosstatic const char HEXDIGITS[] = "0123456789ABCDEF"; 45408524deSchristosstatic const char hexdigits[] = "0123456789abcdef"; 46408524deSchristos 47408524deSchristostypedef int device_t; 48408524deSchristos 49ea6af427Stls#if 0 50ea6af427Stlsstatic SHA512_CTX kprnd_sha; 51ea6af427Stls#endif 52ea6af427Stls 53ea6af427Stls#define timespec timeval 54ea6af427Stls#define nanotime(ts) gettimeofday(ts, NULL) 55ea6af427Stls 56408524deSchristos#define device_xname(a) "" 5766dd2755Sjoergint kprintf(const char *, int, void *, char *, va_list) __printflike(1, 0); 5866dd2755Sjoergvoid device_printf(device_t, const char *, ...) __printflike(2, 3); 59408524deSchristos 60408524deSchristosstatic void 61408524deSchristosempty(void) 62408524deSchristos{ 63408524deSchristos} 64408524deSchristos 65408524deSchristosstatic void (*v_flush)(void) = empty; 66408524deSchristos 67408524deSchristosATF_TC(snprintf_print); 68408524deSchristosATF_TC_HEAD(snprintf_print, tc) 69408524deSchristos{ 70408524deSchristos atf_tc_set_md_var(tc, "descr", "checks snprintf print"); 71408524deSchristos} 72408524deSchristos 73408524deSchristosATF_TC_BODY(snprintf_print, tc) 74408524deSchristos{ 7537649e40Smrg char buf[13]; 76408524deSchristos int i; 77408524deSchristos 78408524deSchristos memset(buf, 'x', sizeof(buf)); 79408524deSchristos i = snprintf(buf, sizeof(buf), "number %d", 10); 80408524deSchristos ATF_CHECK_EQ(i, 9); 81408524deSchristos ATF_CHECK_STREQ(buf, "number 10"); 82408524deSchristos} 83408524deSchristos 84408524deSchristosATF_TC(snprintf_print_overflow); 85408524deSchristosATF_TC_HEAD(snprintf_print_overflow, tc) 86408524deSchristos{ 87408524deSchristos atf_tc_set_md_var(tc, "descr", "checks snprintf print with overflow"); 88408524deSchristos} 89408524deSchristos 90408524deSchristosATF_TC_BODY(snprintf_print_overflow, tc) 91408524deSchristos{ 92408524deSchristos char buf[10]; 93408524deSchristos int i; 94408524deSchristos 95408524deSchristos memset(buf, 'x', sizeof(buf)); 96408524deSchristos i = snprintf(buf, sizeof(buf), "fjsdfsdjfsdf %d\n", 10); 97408524deSchristos ATF_CHECK_EQ(i, 16); 98408524deSchristos ATF_CHECK_STREQ(buf, "fjsdfsdjf"); 99408524deSchristos} 100408524deSchristos 101408524deSchristosATF_TC(snprintf_count); 102408524deSchristosATF_TC_HEAD(snprintf_count, tc) 103408524deSchristos{ 104408524deSchristos atf_tc_set_md_var(tc, "descr", "checks snprintf count"); 105408524deSchristos} 106408524deSchristos 107408524deSchristosATF_TC_BODY(snprintf_count, tc) 108408524deSchristos{ 109408524deSchristos int i; 110408524deSchristos 111408524deSchristos i = snprintf(NULL, 20, "number %d", 10); 112408524deSchristos ATF_CHECK_EQ(i, 9); 113408524deSchristos} 114408524deSchristos 115408524deSchristosATF_TC(snprintf_count_overflow); 116408524deSchristosATF_TC_HEAD(snprintf_count_overflow, tc) 117408524deSchristos{ 118408524deSchristos atf_tc_set_md_var(tc, "descr", "checks snprintf count with overflow"); 119408524deSchristos} 120408524deSchristos 121408524deSchristosATF_TC_BODY(snprintf_count_overflow, tc) 122408524deSchristos{ 123408524deSchristos int i; 124408524deSchristos 125408524deSchristos i = snprintf(NULL, 10, "fjsdfsdjfsdf %d\n", 10); 126408524deSchristos ATF_CHECK_EQ(i, 16); 127408524deSchristos} 128408524deSchristos 1298b2a560aSkreATF_TC(vasprintf_print); 1308b2a560aSkreATF_TC_HEAD(vasprintf_print, tc) 1318b2a560aSkre{ 1328b2a560aSkre atf_tc_set_md_var(tc, "descr", "checks vasprintf works"); 1338b2a560aSkre} 1348b2a560aSkre 13538217df3Schristosstatic int __printflike(2, 3) 1368b2a560aSkrevasp_helper(char **buf, const char *fmt, ...) 1378b2a560aSkre{ 1388b2a560aSkre va_list ap; 1398b2a560aSkre int ret; 1408b2a560aSkre 1418b2a560aSkre va_start(ap, fmt); 1428b2a560aSkre ret = vasprintf(buf, fmt, ap); 1438b2a560aSkre va_end(ap); 1448b2a560aSkre return ret; 1458b2a560aSkre} 1468b2a560aSkre 1478b2a560aSkreATF_TC_BODY(vasprintf_print, tc) 1488b2a560aSkre{ 1498b2a560aSkre int i; 1508b2a560aSkre char *buf; 1518b2a560aSkre 1528b2a560aSkre buf = NULL; 1538b2a560aSkre i = vasp_helper(&buf, "N=%d C=%c S=%s", 7, 'x', "abc"); 1548b2a560aSkre ATF_CHECK_EQ(i, 13); 1558b2a560aSkre ATF_CHECK(buf != NULL); 1568b2a560aSkre ATF_CHECK_STREQ(buf, "N=7 C=x S=abc"); 1578b2a560aSkre free(buf); 1588b2a560aSkre} 1598b2a560aSkre 160408524deSchristosATF_TP_ADD_TCS(tp) 161408524deSchristos{ 162408524deSchristos ATF_TP_ADD_TC(tp, snprintf_print); 163408524deSchristos ATF_TP_ADD_TC(tp, snprintf_print_overflow); 164408524deSchristos ATF_TP_ADD_TC(tp, snprintf_count); 165408524deSchristos ATF_TP_ADD_TC(tp, snprintf_count_overflow); 1668b2a560aSkre ATF_TP_ADD_TC(tp, vasprintf_print); 167408524deSchristos 168408524deSchristos return atf_no_error(); 169408524deSchristos} 170408524deSchristos_EOF 171408524deSchristos 172408524deSchristosawk ' 173408524deSchristos/^snprintf\(/ { 174408524deSchristos print prevline 175408524deSchristos out = 1 176408524deSchristos} 177408524deSchristos{ 178408524deSchristos if (out) print 179408524deSchristos else prevline = $0 180408524deSchristos}' $1 >>$2 181