Jan Breuer
2015-01-18 40fb36f5705e29a37e9fb0fbe62dbd667514a2ee
Update longToStr and update tests
3个文件已修改
73 ■■■■ 已修改文件
libscpi/src/utils.c 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/test/test_parser.c 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/test/test_scpi_utils.c 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/src/utils.c
@@ -75,32 +75,59 @@
 * @return number of bytes written to str (without '\0')
 */
size_t longToStr(int32_t val, char * str, size_t len, int8_t base) {
    uint32_t x = 1000000000L;
    const char digits[] = "0123456789ABCDEF";
#define ADD_CHAR(c) if (pos < len) str[pos++] = (c)
    uint32_t x = 0;
    int_fast8_t digit;
    size_t pos = 0;
    uint32_t uval = val;
    if (val == 0) {
        if (pos < len) str[pos++] = '0';
    if (uval == 0) {
        ADD_CHAR('0');
    } else {
        if (val < 0) {
            val = -val;
            if (pos < len) str[pos++] = '-';
        switch (base) {
            case 2:
                x = 0x80000000L;
                break;
            case 8:
                x = 0x40000000L;
                break;
            case 10:
                x = 1000000000L;
                break;
            case 0x10:
                x = 0x10000000L;
                break;
            default:
                x = 1000000000L;
                base = 10;
                break;
        }
        while ((val / x) == 0) {
        // add sign for numbers in base 10
        if ((val < 0) && (base == 10)) {
            uval = -val;
            ADD_CHAR('-');
        }
        // remove leading zeros
        while ((uval / x) == 0) {
            x /= base;
        }
        do {
            digit = (uint8_t) (val / x);
            if (pos < len) str[pos++] = digit + '0';
            val -= digit * x;
            digit = (uint8_t) (uval / x);
            ADD_CHAR(digits[digit]);
            uval -= digit * x;
            x /= base;
        } while (x && (pos < len));
    }
    if (pos < len) str[pos] = 0;
    return pos;
#undef ADD_CHAR
}
/**
@@ -178,7 +205,7 @@
        result = TRUE;
    }
    for (i = len1; i<len2; i++) {
    for (i = len1; i < len2; i++) {
        if (!isdigit(str2[i])) {
            result = FALSE;
            break;
@@ -316,7 +343,7 @@
    if (cmd_ptr[0] == ':') {
        /* handle errornouse ":*IDN?" */
        if((cmd_len >= 2) && (cmd_ptr[1] != '*')) {
        if ((cmd_len >= 2) && (cmd_ptr[1] != '*')) {
            cmd_len--;
            cmd_ptr++;
        }
@@ -435,12 +462,13 @@
#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++);
    for (; n != 0; n--) {
        c1 = tolower((unsigned char) *s1++);
        c2 = tolower((unsigned char) *s2++);
        if (c1 != c2) {
            return c1 - c2;
        }
libscpi/test/test_parser.c
@@ -68,9 +68,10 @@
    (void)context;
}
scpi_result_t SCPI_Test(scpi_t * context)
int32_t SCPI_Test(scpi_t * context)
{
    (void)context;
    (void)context;
    return 0;
}
scpi_result_t SCPI_Flush(scpi_t * context)
libscpi/test/test_scpi_utils.c
@@ -82,6 +82,16 @@
    CU_ASSERT(str[3] == '0');
    CU_ASSERT(str[4] == '\0');
    len = longToStr(10, str, 32, 16);
    CU_ASSERT(len == 1);
    CU_ASSERT(str[0] == 'A');
    CU_ASSERT(str[1] == '\0');
    len = longToStr(10, str, 32, 8);
    CU_ASSERT(len == 2);
    CU_ASSERT(str[0] == '1');
    CU_ASSERT(str[1] == '2');
    CU_ASSERT(str[2] == '\0');
}
void test_doubleToStr() {