Merge strncasecmp detection from 'master'
| | |
| | | extern "C" { |
| | | #endif |
| | | |
| | | /* Compiler specific */ |
| | | /* 8bit PIC - PIC16, etc */ |
| | | #if defined(_MPC_) |
| | | #define HAVE_STRNLEN 0 |
| | | #define HAVE_STRNCASECMP 0 |
| | | #define HAVE_STRNICMP 1 |
| | | #endif |
| | | |
| | | /* PIC24 */ |
| | | #if defined(__C30__) |
| | | #define HAVE_STRNLEN 0 |
| | | #define HAVE_STRNCASECMP 0 |
| | | #define HAVE_STRNICMP 0 |
| | | #endif |
| | | |
| | | /* PIC32mx */ |
| | | #if defined(__C32__) |
| | | #define HAVE_STRNLEN 0 |
| | | #define HAVE_STRNCASECMP 1 |
| | | #define HAVE_STRNICMP 0 |
| | | #endif |
| | | |
| | | /* ======== test strnlen ======== */ |
| | |
| | | #ifndef HAVE_STRNCASECMP |
| | | #define HAVE_STRNCASECMP 1 |
| | | #endif |
| | | /* ======== test strnicmp ======== */ |
| | | #ifndef HAVE_STRNICMP |
| | | #define HAVE_STRNICMP 0 |
| | | #endif |
| | | |
| | | /* define local macros depending on existance of strnlen */ |
| | | #if HAVE_STRNLEN |
| | |
| | | #define SCPI_strnlen(s, l) BSD_strnlen((s), (l)) |
| | | #endif |
| | | |
| | | /* define local macros depending on existance of strncasecmp */ |
| | | /* define local macros depending on existance of strncasecmp and strnicmp */ |
| | | #if HAVE_STRNCASECMP |
| | | #define SCPI_strncasecmp(s1, s2, l) strncasecmp((s1), (s2), (l)) |
| | | #elif HAVE_STRNICMP |
| | | #define SCPI_strncasecmp(s1, s2, l) strnicmp((s1), (s2), (l)) |
| | | #else |
| | | #define SCPI_strncasecmp(s1, s2, l) strcasecmp((s1), (s2)) |
| | | #define SCPI_strncasecmp(s1, s2, l) OUR_strncasecmp((s1), (s2), (l)) |
| | | #endif |
| | | |
| | | #ifdef __cplusplus |
| | |
| | | } |
| | | #endif |
| | | |
| | | #if !HAVE_STRNCASECMP && !HAVE_STRNICMP |
| | | int OUR_strncasecmp(const char *s1, const char *s2, size_t n) { |
| | | unsigned char c1, c2; |
| | | |
| | | for(; n != 0; n--) { |
| | | c1 = tolower((unsigned char)*s1++); |
| | | c2 = tolower((unsigned char)*s2++); |
| | | if (c1 != c2) { |
| | | return c1 - c2; |
| | | } |
| | | if (c1 = '\0') { |
| | | return 0; |
| | | } |
| | | } |
| | | return 0; |
| | | } |
| | | #endif |
| | | |
| | |
| | | size_t BSD_strnlen(const char *s, size_t maxlen); |
| | | #endif |
| | | |
| | | #if !HAVE_STRNCASECMP && !HAVE_STRNICMP |
| | | int OUR_strncasecmp(const char *s1, const char *s2, size_t n); |
| | | #endif |
| | | |
| | | #define min(a, b) (((a) < (b)) ? (a) : (b)) |
| | | #define max(a, b) (((a) > (b)) ? (a) : (b)) |
| | | |