diff options
author | Haru <haru@dotalux.com> | 2014-01-20 15:56:09 +0100 |
---|---|---|
committer | Haru <haru@dotalux.com> | 2014-01-23 17:05:41 +0100 |
commit | 22b7f90297184775ad94d8cb4806e8664c78d934 (patch) | |
tree | 77aabfd754fe72b22b922b019b7e7da2db630a3c /src/common/strlib.c | |
parent | 0b96dc2756d97048fc8d4bf2c0eca8ae2555a82e (diff) | |
download | hercules-22b7f90297184775ad94d8cb4806e8664c78d934.tar.gz hercules-22b7f90297184775ad94d8cb4806e8664c78d934.tar.bz2 hercules-22b7f90297184775ad94d8cb4806e8664c78d934.tar.xz hercules-22b7f90297184775ad94d8cb4806e8664c78d934.zip |
Minor fixes to the strlib interface
- Fixed a typo in the strnlen() macro (was strnln)
- Initialized strlib->strnlen and strlib->strtoull to NULL on platforms
that don't require them. Please note that those two functions are
supposed to never be called directly but only through the strnlen()
and strtoull() macros, which take care of the platform abstraction.
- Removed localized versions of yes/no from config_switch (if you really
want to be able to use "oui", "ja", "si", "non", "nein", feel free to
add them back yourself following the example in strlib.c)
Signed-off-by: Haru <haru@dotalux.com>
Diffstat (limited to 'src/common/strlib.c')
-rw-r--r-- | src/common/strlib.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/common/strlib.c b/src/common/strlib.c index 0f68eb206..361595b07 100644 --- a/src/common/strlib.c +++ b/src/common/strlib.c @@ -240,16 +240,19 @@ char* _strtok_r(char *s1, const char *s2, char **lasts) { } #endif +// TODO: The _MSC_VER check can probably be removed (we no longer support VS +// versions <= 2003, do we?), but this implementation might be still necessary +// for NetBSD 5.x and possibly some Solaris versions. #if !(defined(WIN32) && defined(_MSC_VER) && _MSC_VER >= 1400) && !defined(HAVE_STRNLEN) /* Find the length of STRING, but scan at most MAXLEN characters. If no '\0' terminator is found in that many characters, return MAXLEN. */ -size_t strnlen (const char* string, size_t maxlen) -{ - const char* end = (const char*)memchr(string, '\0', maxlen); - return end ? (size_t) (end - string) : maxlen; +size_t strnlen(const char* string, size_t maxlen) { + const char* end = (const char*)memchr(string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; } #endif +// TODO: This should probably be removed, I don't think we support MSVC++ 6.0 anymore. #if defined(WIN32) && defined(_MSC_VER) && _MSC_VER <= 1200 uint64 strtoull(const char* str, char** endptr, int base) { @@ -331,13 +334,22 @@ int e_mail_check(char* email) //-------------------------------------------------- // Return numerical value of a switch configuration -// on/off, english, français, deutsch, español +// on/off, yes/no, true/false, number //-------------------------------------------------- -int config_switch(const char* str) -{ - if (strcmpi(str, "on") == 0 || strcmpi(str, "yes") == 0 || strcmpi(str, "oui") == 0 || strcmpi(str, "ja") == 0 || strcmpi(str, "si") == 0) +int config_switch(const char* str) { + size_t len = strlen(str); + if ((len == 2 && strcmpi(str, "on") == 0) + || (len == 3 && strcmpi(str, "yes") == 0) + || (len == 4 && strcmpi(str, "true") == 0) + // || (len == 3 && strcmpi(str, "oui") == 0) // Uncomment and edit to add your own localized versions + ) return 1; - if (strcmpi(str, "off") == 0 || strcmpi(str, "no") == 0 || strcmpi(str, "non") == 0 || strcmpi(str, "nein") == 0) + + if ((len == 3 && strcmpi(str, "off") == 0) + || (len == 2 && strcmpi(str, "no") == 0) + || (len == 5 && strcmpi(str, "false") == 0) + // || (len == 3 && strcmpi(str, "non") == 0) // Uncomment and edit to add your own localized versions + ) return 0; return (int)strtol(str, NULL, 0); @@ -1119,10 +1131,14 @@ void strlib_defaults(void) { #if !(defined(WIN32) && defined(_MSC_VER) && _MSC_VER >= 1400) && !defined(HAVE_STRNLEN) strlib->strnlen = strnlen; +#else + strlib->strnlen = NULL; #endif #if defined(WIN32) && defined(_MSC_VER) && _MSC_VER <= 1200 strlib->strtoull = strtoull; +#else + strlib->strtoull = NULL; #endif strlib->e_mail_check = e_mail_check; strlib->config_switch = config_switch; |