diff --git a/basin/src/game.c b/basin/src/game.c index a06cc20..d9a845a 100644 --- a/basin/src/game.c +++ b/basin/src/game.c @@ -29,6 +29,7 @@ #include #include "tileentity.h" #include +#include "xstring.h" void flush_outgoing(struct player* player) { if (player->conn == NULL) return; diff --git a/basin/src/util.c b/basin/src/util.c index 8d749f5..2fb829c 100644 --- a/basin/src/util.c +++ b/basin/src/util.c @@ -12,7 +12,6 @@ #include #include #include -#include void* xmalloc(size_t size) { if (size > 10485760) { @@ -117,22 +116,3 @@ int memseq(const unsigned char* mem, size_t mem_size, const unsigned char c) { } return 1; } - -size_t varstrlen(const char* fmt, const va_list args) { - va_list args_cpy ; - va_copy(args_cpy, args); - - size_t len = strlen(fmt) + 64; - for (const char* p = fmt; *p != '\0'; p++) { - if (*p != '%') - continue; - switch (*++p) { - case 's': - len += strlen(va_arg(args_cpy, char *)); - break; - default: - va_arg(args_cpy, int); // pop from list - } - } - return len; -} \ No newline at end of file diff --git a/basin/src/util.h b/basin/src/util.h index dc3c23b..5af56e8 100644 --- a/basin/src/util.h +++ b/basin/src/util.h @@ -30,7 +30,4 @@ int memeq(const unsigned char* mem1, size_t mem1_size, const unsigned char* mem2 int memseq(const unsigned char* mem, size_t mem_size, const unsigned char c); -// Estimates vararg string length based on format string and STRING ARGS ONLY -size_t varstrlen(const char* fmt, const va_list args); - #endif /* UTIL_H_ */ diff --git a/basin/src/xstring.c b/basin/src/xstring.c index 1051f62..1dc7a96 100644 --- a/basin/src/xstring.c +++ b/basin/src/xstring.c @@ -10,6 +10,7 @@ #include #include #include "util.h" +#include char* trim(char* str) { if (str == NULL) return NULL; @@ -269,3 +270,20 @@ int strisunum(const char* str) { return 1; } +size_t varstrlen(const char* fmt, const va_list args) { + va_list args_cpy; + va_copy(args_cpy, args); + + size_t len = strlen(fmt) + 64; + for (const char* p = fmt; *p != '\0'; p++) { + if (*p != '%') continue; + switch (*++p) { + case 's': + len += strlen(va_arg(args_cpy, char *)); + break; + default: + va_arg(args_cpy, int); // pop from list + } +} +return len; +} diff --git a/basin/src/xstring.h b/basin/src/xstring.h index ecea58c..518848d 100644 --- a/basin/src/xstring.h +++ b/basin/src/xstring.h @@ -40,4 +40,6 @@ char* replace_nocase(char* str, char* from, char* to); int strisunum(const char* str); +size_t varstrlen(const char* fmt, const va_list args); + #endif /* XSTRING_H_ */