Jan Breuer
2013-10-22 e098c2b8d02db042d701480760ee664eae5c0ce1
Merge strncasecmp detection from 'master'
3个文件已修改
48 ■■■■■ 已修改文件
libscpi/inc/scpi/config.h 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/src/utils.c 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/src/utils.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/inc/scpi/config.h
@@ -41,10 +41,26 @@
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 ======== */
@@ -55,6 +71,10 @@
#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
@@ -63,11 +83,13 @@
#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
libscpi/src/utils.c
@@ -391,3 +391,21 @@
}
#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
libscpi/src/utils.h
@@ -68,6 +68,10 @@
    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))