equal
deleted
inserted
replaced
94 }; |
94 }; |
95 |
95 |
96 #define LOG_PREFIX(fn, ...) \ |
96 #define LOG_PREFIX(fn, ...) \ |
97 template <> struct LogPrefix<__VA_ARGS__> { \ |
97 template <> struct LogPrefix<__VA_ARGS__> { \ |
98 static size_t prefix(char* buf, size_t len) { \ |
98 static size_t prefix(char* buf, size_t len) { \ |
99 DEBUG_ONLY(buf[0] = '\0';) \ |
|
100 size_t ret = fn(buf, len); \ |
99 size_t ret = fn(buf, len); \ |
101 assert(ret == strlen(buf), "Length mismatch ret (" SIZE_FORMAT ") != buf length (" SIZE_FORMAT ")", ret, strlen(buf)); \ |
100 /* Either prefix did fit (strlen(buf) == ret && ret < len) */ \ |
|
101 /* or the prefix didn't fit in buffer (ret > len && strlen(buf) < len) */ \ |
|
102 assert(ret == 0 || strlen(buf) < len, \ |
|
103 "Buffer overrun by prefix function."); \ |
|
104 assert(ret == 0 || strlen(buf) == ret || ret >= len, \ |
|
105 "Prefix function should return length of prefix written," \ |
|
106 " or the intended length of prefix if the buffer was too small."); \ |
102 return ret; \ |
107 return ret; \ |
103 } \ |
108 } \ |
104 }; |
109 }; |
105 LOG_PREFIX_LIST |
110 LOG_PREFIX_LIST |
106 #undef LOG_PREFIX |
111 #undef LOG_PREFIX |