Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Factorize the system-specific function shims like snprintf #54

Merged
merged 7 commits into from
Jul 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions crnlib/crn_arealist.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,7 @@ static void area_fatal_error(const char*, const char* pMsg, ...) {
va_start(args, pMsg);

char buf[512];
#if defined(_WIN32)
vsnprintf_s(buf, sizeof(buf), pMsg, args);
#else
vsnprintf(buf, sizeof(buf), pMsg, args);
#endif
crnlib_vsnprintf(buf, sizeof(buf), pMsg, args);

va_end(args);

Expand Down
6 changes: 3 additions & 3 deletions crnlib/crn_assert.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ void crnlib_enable_fail_exceptions(bool enabled) {
void crnlib_assert(const char* pExp, const char* pFile, unsigned line) {
char buf[512];

sprintf_s(buf, sizeof(buf), "%s(%u): Assertion failed: \"%s\"\n", pFile, line, pExp);
crnlib_snprintf(buf, sizeof(buf), "%s(%u): Assertion failed: \"%s\"\n", pFile, line, pExp);

crnlib_output_debug_string(buf);

Expand All @@ -28,7 +28,7 @@ void crnlib_assert(const char* pExp, const char* pFile, unsigned line) {
void crnlib_fail(const char* pExp, const char* pFile, unsigned line) {
char buf[512];

sprintf_s(buf, sizeof(buf), "%s(%u): Failure: \"%s\"\n", pFile, line, pExp);
crnlib_snprintf(buf, sizeof(buf), "%s(%u): Failure: \"%s\"\n", pFile, line, pExp);

crnlib_output_debug_string(buf);

Expand All @@ -49,7 +49,7 @@ void crnlib_fail(const char* pExp, const char* pFile, unsigned line) {
void trace(const char* pFmt, va_list args) {
if (crnlib_is_debugger_present()) {
char buf[512];
vsprintf_s(buf, sizeof(buf), pFmt, args);
crnlib_snprintf(buf, sizeof(buf), pFmt, args);

crnlib_output_debug_string(buf);
}
Expand Down
2 changes: 1 addition & 1 deletion crnlib/crn_console.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ void console::vprintf(eConsoleMessageType type, const char* p, va_list args) {
m_num_messages[type]++;

char buf[cConsoleBufSize];
vsprintf_s(buf, cConsoleBufSize, p, args);
crnlib_vsnprintf(buf, cConsoleBufSize, p, args);

bool handled = false;

Expand Down
20 changes: 6 additions & 14 deletions crnlib/crn_dynamic_string.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ void dynamic_string::optimize() {
int dynamic_string::compare(const char* p, bool case_sensitive) const {
CRNLIB_ASSERT(p);

const int result = (case_sensitive ? strcmp : crn_stricmp)(get_ptr_priv(), p);
const int result = (case_sensitive ? strcmp : crnlib_stricmp)(get_ptr_priv(), p);

if (result < 0)
return -1;
Expand Down Expand Up @@ -236,22 +236,14 @@ dynamic_string& dynamic_string::truncate(uint new_len) {

dynamic_string& dynamic_string::tolower() {
if (m_len) {
#if defined(_WIN32)
_strlwr_s(get_ptr_priv(), m_buf_size);
#else
strlwr(get_ptr_priv());
#endif
crnlib_strnlwr(get_ptr_priv(), m_buf_size);
}
return *this;
}

dynamic_string& dynamic_string::toupper() {
if (m_len) {
#if defined(_WIN32)
_strupr_s(get_ptr_priv(), m_buf_size);
#else
strupr(get_ptr_priv());
#endif
crnlib_strnupr(get_ptr_priv(), m_buf_size);
}
return *this;
}
Expand Down Expand Up @@ -303,7 +295,7 @@ dynamic_string& dynamic_string::format_args(const char* p, va_list args) {
#if defined(_WIN32)
int l = vsnprintf_s(buf, cBufSize, _TRUNCATE, p, args);
#else
int l = vsnprintf(buf, cBufSize, p, args);
int l = crnlib_vsnprintf(buf, cBufSize, p, args);
#endif
if (l <= 0)
clear();
Expand Down Expand Up @@ -387,7 +379,7 @@ int dynamic_string::find_left(const char* p, bool case_sensitive) const {
const int p_len = (int)strlen(p);

for (int i = 0; i <= (m_len - p_len); i++)
if ((case_sensitive ? strncmp : _strnicmp)(p, &m_pStr[i], p_len) == 0)
if ((case_sensitive ? strncmp : crnlib_strnicmp)(p, &m_pStr[i], p_len) == 0)
return i;

return -1;
Expand Down Expand Up @@ -424,7 +416,7 @@ int dynamic_string::find_right(const char* p, bool case_sensitive) const {
const int p_len = (int)strlen(p);

for (int i = m_len - p_len; i >= 0; i--)
if ((case_sensitive ? strncmp : _strnicmp)(p, &m_pStr[i], p_len) == 0)
if ((case_sensitive ? strncmp : crnlib_strnicmp)(p, &m_pStr[i], p_len) == 0)
return i;

return -1;
Expand Down
39 changes: 4 additions & 35 deletions crnlib/crn_platform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,49 +7,18 @@
#endif

#if !defined(_WIN32)
int sprintf_s(char* buffer, size_t sizeOfBuffer, const char* format, ...) {
if (!sizeOfBuffer)
return 0;

va_list args;
va_start(args, format);
int c = vsnprintf(buffer, sizeOfBuffer, format, args);
va_end(args);

buffer[sizeOfBuffer - 1] = '\0';

if (c < 0)
return sizeOfBuffer - 1;

return CRNLIB_MIN(c, (int)sizeOfBuffer - 1);
}

int vsprintf_s(char* buffer, size_t sizeOfBuffer, const char* format, va_list args) {
if (!sizeOfBuffer)
return 0;

int c = vsnprintf(buffer, sizeOfBuffer, format, args);

buffer[sizeOfBuffer - 1] = '\0';

if (c < 0)
return sizeOfBuffer - 1;

return CRNLIB_MIN(c, (int)sizeOfBuffer - 1);
}

char* strlwr(char* p) {
char* crnlib_strnlwr(char* p, size_t n) {
char* q = p;
while (*q) {
for (size_t i = 0; i < n && *q; i++) {
char c = *q;
*q++ = tolower(c);
}
return p;
}

char* strupr(char* p) {
char* crnlib_strnupr(char* p, size_t n) {
char* q = p;
while (*q) {
for (size_t i = 0; i < n && *q; i++) {
char c = *q;
*q++ = toupper(c);
}
Expand Down
21 changes: 14 additions & 7 deletions crnlib/crn_platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,20 @@ const bool c_crnlib_big_endian_platform = !c_crnlib_little_endian_platform;

#define CRNLIB_GET_ALIGNMENT(v) ((!sizeof(v)) ? 1 : (__alignof(v) ? __alignof(v) : sizeof(uint32)))

#if !defined(_WIN32)
int sprintf_s(char* buffer, size_t sizeOfBuffer, const char* format, ...);
int vsprintf_s(char* buffer, size_t sizeOfBuffer, const char* format, va_list args);
char* strlwr(char* p);
char* strupr(char* p);
#define _stricmp strcasecmp
#define _strnicmp strncasecmp
#if defined(_WIN32)
#define crnlib_snprintf sprintf_s
#define crnlib_vsnprintf vsprintf_s
#define crnlib_strnlwr _strlwr_s
#define crnlib_strnupr _strupr_s
#define crnlib_stricmp _stricmp
#define crnlib_strnicmp _strnicmp
#else
#define crnlib_snprintf snprintf
#define crnlib_vsnprintf vsnprintf
char* crnlib_strnlwr(char* p, size_t n);
char* crnlib_strnupr(char* p, size_t n);
#define crnlib_stricmp strcasecmp
#define crnlib_strnicmp strncasecmp
#endif

inline bool crnlib_is_little_endian() {
Expand Down
2 changes: 1 addition & 1 deletion crnlib/crn_resample_filters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ const int g_num_resample_filters = sizeof(g_resample_filters) / sizeof(g_resampl

int find_resample_filter(const char* pName) {
for (int i = 0; i < g_num_resample_filters; i++)
if (_stricmp(pName, g_resample_filters[i].name) == 0)
if (crnlib_stricmp(pName, g_resample_filters[i].name) == 0)
return i;
return cInvalidIndex;
}
Expand Down
8 changes: 2 additions & 6 deletions crnlib/crn_strutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@ char* crn_strdup(const char* pStr) {
return p;
}

int crn_stricmp(const char* p, const char* q) {
return _stricmp(p, q);
}

char* strcpy_safe(char* pDst, uint dst_len, const char* pSrc) {
CRNLIB_ASSERT(pDst && pSrc && dst_len);
if (!dst_len)
Expand Down Expand Up @@ -310,10 +306,10 @@ bool string_to_bool(const char* p, bool& value) {

value = false;

if (_stricmp(p, "false") == 0)
if (crnlib_stricmp(p, "false") == 0)
return true;

if (_stricmp(p, "true") == 0) {
if (crnlib_stricmp(p, "true") == 0) {
value = true;
return true;
}
Expand Down
1 change: 0 additions & 1 deletion crnlib/crn_strutils.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

namespace crnlib {
char* crn_strdup(const char* pStr);
int crn_stricmp(const char* p, const char* q);

char* strcpy_safe(char* pDst, uint dst_len, const char* pSrc);

Expand Down
4 changes: 2 additions & 2 deletions crnlib/crn_value.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,10 +166,10 @@ class value {
return false;
}

if (_stricmp(p, "false") == 0) {
if (crnlib_stricmp(p, "false") == 0) {
set_bool(false);
return true;
} else if (_stricmp(p, "true") == 0) {
} else if (crnlib_stricmp(p, "true") == 0) {
set_bool(true);
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion crnlib/lzham_timer.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class scoped_perf_section {
: m_start_ticks(lzham_timer::get_ticks()) {
va_list args;
va_start(args, pName);
vsprintf_s(m_name, sizeof(m_name), pName, args);
crnlib_vsnprintf(m_name, sizeof(m_name), pName, args);
va_end(args);

lzham_buffered_printf("Thread: 0x%08X, BEGIN Time: %3.3fms, Section: %s\n", GetCurrentThreadId(), lzham_timer::ticks_to_ms(m_start_ticks), m_name);
Expand Down
2 changes: 1 addition & 1 deletion crunch/crunch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1137,7 +1137,7 @@ class crunch {
static bool check_for_option(int argc, char* argv[], const char* pOption) {
for (int i = 1; i < argc; i++) {
if ((argv[i][0] == '/') || (argv[i][0] == '-')) {
if (crn_stricmp(&argv[i][1], pOption) == 0)
if (crnlib_stricmp(&argv[i][1], pOption) == 0)
return true;
}
}
Expand Down
Loading