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