1 /* $NetBSD: msyslog.c,v 1.1.1.5 2016/01/08 21:21:33 christos Exp $ */ 2 3 #include "config.h" 4 5 #include "ntp_stdlib.h" 6 7 #include "unity.h" 8 9 #ifndef VSNPRINTF_PERCENT_M 10 // format_errmsg() is normally private to msyslog.c 11 void format_errmsg(char *, size_t, const char *, int); 12 #endif 13 14 15 void setUp(void); 16 void test_msnprintf(void); 17 void test_msnprintfLiteralPercentm(void); 18 void test_msnprintfBackslashLiteralPercentm(void); 19 void test_msnprintfBackslashPercent(void); 20 void test_msnprintfHangingPercent(void); 21 void test_format_errmsgHangingPercent(void); 22 void test_msnprintfNullTarget(void); 23 void test_msnprintfTruncate(void); 24 25 26 void 27 setUp(void) 28 { 29 init_lib(); 30 31 return; 32 } 33 34 35 void 36 test_msnprintf(void) { 37 #define FMT_PREFIX "msyslog.cpp ENOENT: " 38 char exp_buf[512]; 39 char act_buf[512]; 40 int exp_cnt; 41 int act_cnt; 42 43 exp_cnt = snprintf(exp_buf, sizeof(exp_buf), FMT_PREFIX "%s", 44 strerror(ENOENT)); 45 errno = ENOENT; 46 act_cnt = msnprintf(act_buf, sizeof(act_buf), FMT_PREFIX "%m"); 47 48 TEST_ASSERT_EQUAL(exp_cnt, act_cnt); 49 TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); 50 } 51 52 void 53 test_msnprintfLiteralPercentm(void) 54 { 55 char exp_buf[32]; 56 char act_buf[32]; 57 int exp_cnt; 58 int act_cnt; 59 60 exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "%%m"); 61 errno = ENOENT; 62 act_cnt = msnprintf(act_buf, sizeof(act_buf), "%%m"); 63 64 TEST_ASSERT_EQUAL(exp_cnt, act_cnt); 65 TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); 66 } 67 68 void 69 test_msnprintfBackslashLiteralPercentm(void) { 70 char exp_buf[32]; 71 char act_buf[32]; 72 int exp_cnt; 73 int act_cnt; 74 75 exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "\%%m"); 76 errno = ENOENT; 77 act_cnt = msnprintf(act_buf, sizeof(act_buf), "\%%m"); 78 79 TEST_ASSERT_EQUAL(exp_cnt, act_cnt); 80 TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); 81 } 82 83 void 84 test_msnprintfBackslashPercent(void) { 85 char exp_buf[32]; 86 char act_buf[32]; 87 int exp_cnt; 88 int act_cnt; 89 90 exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "\%s", 91 strerror(ENOENT)); 92 errno = ENOENT; 93 act_cnt = msnprintf(act_buf, sizeof(act_buf), "\%m"); 94 95 TEST_ASSERT_EQUAL(exp_cnt, act_cnt); 96 TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); 97 } 98 99 void 100 test_msnprintfHangingPercent(void) { 101 static char fmt[] = "percent then nul term then non-nul %\0oops!"; 102 char exp_buf[64]; 103 char act_buf[64]; 104 int exp_cnt; 105 int act_cnt; 106 107 ZERO(exp_buf); 108 ZERO(act_buf); 109 exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "%s", fmt); 110 act_cnt = msnprintf(act_buf, sizeof(act_buf), "%s", fmt); 111 112 TEST_ASSERT_EQUAL(exp_cnt, act_cnt); 113 TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); 114 TEST_ASSERT_EQUAL_STRING("", act_buf + 1 + strlen(act_buf)); 115 } 116 117 void 118 test_format_errmsgHangingPercent(void) { 119 #ifndef VSNPRINTF_PERCENT_M 120 static char fmt[] = "percent then nul term then non-nul %\0oops!"; 121 char act_buf[64]; 122 123 ZERO(act_buf); 124 format_errmsg(act_buf, sizeof(act_buf), fmt, ENOENT); 125 126 TEST_ASSERT_EQUAL_STRING(fmt, act_buf); 127 TEST_ASSERT_EQUAL_STRING("", act_buf + 1 + strlen(act_buf)); 128 #else 129 TEST_IGNORE_MESSAGE("VSNPRINTF_PERCENT_M is defined") 130 #endif 131 } 132 133 void 134 test_msnprintfNullTarget(void) { 135 int exp_cnt; 136 int act_cnt; 137 138 exp_cnt = snprintf(NULL, 0, "%d", 123); 139 errno = ENOENT; 140 act_cnt = msnprintf(NULL, 0, "%d", 123); 141 142 TEST_ASSERT_EQUAL(exp_cnt, act_cnt); 143 } 144 145 void 146 test_msnprintfTruncate(void) { 147 char undist[] = "undisturbed"; 148 char exp_buf[512]; 149 char act_buf[512]; 150 int exp_cnt; 151 int act_cnt; 152 153 memcpy(exp_buf + 3, undist, sizeof(undist)); 154 memcpy(act_buf + 3, undist, sizeof(undist)); 155 exp_cnt = snprintf(exp_buf, 3, "%s", strerror(ENOENT)); 156 errno = ENOENT; 157 act_cnt = msnprintf(act_buf, 3, "%m"); 158 159 TEST_ASSERT_EQUAL('\0', exp_buf[2]); 160 TEST_ASSERT_EQUAL('\0', act_buf[2]); 161 TEST_ASSERT_TRUE(act_cnt > 0); 162 TEST_ASSERT_EQUAL(exp_cnt, act_cnt); 163 TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf); 164 TEST_ASSERT_EQUAL_STRING(exp_buf + 3, undist); 165 TEST_ASSERT_EQUAL_STRING(act_buf + 3, undist); 166 } 167