This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8694

-- gerrit

commit 4b0cff00043b1d07b3525633ace3be3cb45ddbc6
Author: John Lupien <jlup...@draper.com>
Date:   Mon Jan 6 17:35:06 2025 +0100

    ctype functions: pass int type in input
    
    All the functions in ctype.h like tolower() or isalnum() require
    their input parameter of type 'int'.
    The OpenOCD code is not always compliant with this requirement,
    causing build warnings.
    
    Cast the input parameter to 'int', eventually passing through the
    type 'unsigned char' when needed.
    
    Change-Id: I4a15a286f1e4198832606f86671ec7691f8c1abc
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>
    Signed-off-by: John Lupien <jlup...@draper.com>

diff --git a/src/flash/nor/fm4.c b/src/flash/nor/fm4.c
index 2db79ef502..949e67c559 100644
--- a/src/flash/nor/fm4.c
+++ b/src/flash/nor/fm4.c
@@ -605,7 +605,8 @@ static bool fm4_name_match(const char *s, const char 
*pattern)
                if (!pattern[i])
                        return true;
                /* Use x as wildcard */
-               if (pattern[i] != 'x' && tolower(s[i]) != tolower(pattern[i]))
+               if (pattern[i] != 'x'
+                       && tolower((int)(unsigned char)s[i]) != 
tolower((int)(unsigned char)pattern[i]))
                        return false;
                i++;
        }
diff --git a/src/flash/nor/nrf5.c b/src/flash/nor/nrf5.c
index 5cb552aa94..1e3e9a7d72 100644
--- a/src/flash/nor/nrf5.c
+++ b/src/flash/nor/nrf5.c
@@ -642,8 +642,10 @@ static bool nrf5_info_variant_to_str(uint32_t variant, 
char *bf, bool swap)
        else
                h_u32_to_be(b, variant);
 
-       if (isalnum(b[0]) && isalnum(b[1]) && isalnum(b[2]) &&
-                (isalnum(b[3]) || b[3] == 0)) {
+       if (isalnum((int)(unsigned char)b[0])
+               && isalnum((int)(unsigned char)b[1])
+               && isalnum((int)(unsigned char)b[2])
+               && (isalnum((int)(unsigned char)b[3]) || b[3] == 0)) {
                memcpy(bf, b, 4);
                bf[4] = 0;
                return true;
diff --git a/src/flash/nor/sim3x.c b/src/flash/nor/sim3x.c
index 58d7913c26..b27bd3602e 100644
--- a/src/flash/nor/sim3x.c
+++ b/src/flash/nor/sim3x.c
@@ -657,7 +657,7 @@ static int sim3x_read_deviceid(struct flash_bank *bank)
        part_number = atoi(part_num_string);
 
        /* Part Number should be between 100 and 999 */
-       if (!isalpha(device_id >> 24) || part_number < 100 || part_number > 999)
+       if (!isalpha((int)(device_id >> 24)) || part_number < 100 || 
part_number > 999)
                return ERROR_FAIL;
 
        sim3x_info->part_family = device_id >> 24;
diff --git a/src/helper/log.c b/src/helper/log.c
index 9ad00ce628..b18b5f17ef 100644
--- a/src/helper/log.c
+++ b/src/helper/log.c
@@ -508,7 +508,7 @@ void log_socket_error(const char *socket_desc)
 const char *find_nonprint_char(const char *buf, unsigned int buf_len)
 {
        for (unsigned int i = 0; i < buf_len; i++) {
-               if (!isprint(buf[i]))
+               if (!isprint((int)(unsigned char)buf[i]))
                        return buf + i;
        }
        return NULL;
diff --git a/src/jtag/adapter.c b/src/jtag/adapter.c
index 04942f753b..d4ead4f7de 100644
--- a/src/jtag/adapter.c
+++ b/src/jtag/adapter.c
@@ -950,7 +950,7 @@ COMMAND_HANDLER(adapter_gpio_config_handler)
        while (i < CMD_ARGC) {
                LOG_DEBUG("Processing %s", CMD_ARGV[i]);
 
-               if (isdigit(*CMD_ARGV[i])) {
+               if (isdigit((int)(unsigned char)*CMD_ARGV[i])) {
                        COMMAND_PARSE_NUMBER(uint, CMD_ARGV[i], 
gpio_config->gpio_num);
                        ++i;
                        continue;
diff --git a/src/jtag/drivers/arm-jtag-ew.c b/src/jtag/drivers/arm-jtag-ew.c
index aaed16db6e..4f6b5b85b2 100644
--- a/src/jtag/drivers/arm-jtag-ew.c
+++ b/src/jtag/drivers/arm-jtag-ew.c
@@ -447,7 +447,7 @@ static int armjtagew_get_version_info(void)
                "ARM-JTAG-EW firmware version %d.%d, hardware revision %c, 
SN=%s, Additional info: %s",
                usb_in_buffer[1],
                usb_in_buffer[0],
-               isgraph(usb_in_buffer[2]) ? usb_in_buffer[2] : 'X',
+               isgraph((int)(unsigned char)usb_in_buffer[2]) ? 
usb_in_buffer[2] : 'X',
                sn,
                auxinfo);
 
diff --git a/src/jtag/drivers/usb_blaster/usb_blaster.c 
b/src/jtag/drivers/usb_blaster/usb_blaster.c
index 496466ca3d..8dc7580f9d 100644
--- a/src/jtag/drivers/usb_blaster/usb_blaster.c
+++ b/src/jtag/drivers/usb_blaster/usb_blaster.c
@@ -956,7 +956,7 @@ COMMAND_HANDLER(ublast_handle_pin_command)
 
                if (strlen(pin_value) > 1)
                        val = '?';
-               switch (tolower((unsigned char)val)) {
+               switch (tolower((int)(unsigned char)val)) {
                case '0':
                        *steer = FIXED_0;
                        break;
diff --git a/src/jtag/drivers/vdebug.c b/src/jtag/drivers/vdebug.c
index 691e576e53..5b0b016e17 100644
--- a/src/jtag/drivers/vdebug.c
+++ b/src/jtag/drivers/vdebug.c
@@ -1249,7 +1249,7 @@ COMMAND_HANDLER(vdebug_set_batching)
        if (CMD_ARGC != 1)
                return ERROR_COMMAND_SYNTAX_ERROR;
 
-       if (isdigit((unsigned char)CMD_ARGV[0][0]))
+       if (isdigit((int)(unsigned char)CMD_ARGV[0][0]))
                vdc.trans_batch = (CMD_ARGV[0][0] == '0' ? 0 : (CMD_ARGV[0][0] 
== '1' ? 1 : 2));
        else if (CMD_ARGV[0][0] == 'r')
                vdc.trans_batch = VD_BATCH_WR;
diff --git a/src/pld/efinix.c b/src/pld/efinix.c
index b6e5f9e477..d7824745d6 100644
--- a/src/pld/efinix.c
+++ b/src/pld/efinix.c
@@ -82,7 +82,8 @@ static int efinix_read_bit_file(struct raw_bit_file 
*bit_file, const char *filen
                        return ERROR_PLD_FILE_LOAD_FAILED;
                }
 
-               if (!isxdigit(buffer[0]) || !isxdigit(buffer[1])) {
+               if (!isxdigit((int)(unsigned char)buffer[0])
+                       || !isxdigit((int)(unsigned char)buffer[1])) {
                        fclose(input_file);
                        free(bit_file->data);
                        bit_file->data = NULL;
diff --git a/src/pld/gatemate.c b/src/pld/gatemate.c
index f35b39ad21..9fc4088e7e 100644
--- a/src/pld/gatemate.c
+++ b/src/pld/gatemate.c
@@ -57,7 +57,8 @@ static int gatemate_read_cfg_line(struct gatemate_bit_file 
*bit_file, const char
                } else if (line_buffer[idx] == 0) {
                        break;
                } else if (idx + 1 < nread) {
-                       if (isxdigit(line_buffer[idx]) && 
isxdigit(line_buffer[idx + 1])) {
+                       if (isxdigit((int)(unsigned char)line_buffer[idx])
+                               && isxdigit((int)(unsigned char)line_buffer[idx 
+ 1])) {
                                uint8_t byte;
                                unhexify(&byte, line_buffer + idx, 2);
                                int retval = 
gatemate_add_byte_to_bitfile(bit_file, byte);
diff --git a/src/server/telnet_server.c b/src/server/telnet_server.c
index 7818af2dbb..32163fc051 100644
--- a/src/server/telnet_server.c
+++ b/src/server/telnet_server.c
@@ -601,7 +601,7 @@ static void telnet_auto_complete(struct connection 
*connection)
 
        /* user command position in the line, ignore leading spaces */
        size_t usr_cmd_pos = seq_start;
-       while ((usr_cmd_pos < t_con->line_cursor) && 
isspace(t_con->line[usr_cmd_pos]))
+       while ((usr_cmd_pos < t_con->line_cursor) && isspace((int)(unsigned 
char)t_con->line[usr_cmd_pos]))
                usr_cmd_pos++;
 
        /* check user command length */
@@ -616,8 +616,9 @@ static void telnet_auto_complete(struct connection 
*connection)
        size_t optimized_spaces = 0;
        char query[usr_cmd_len + 1];
        for (size_t i = 0; i < usr_cmd_len; i++) {
-               if ((i < usr_cmd_len - 1) && isspace(t_con->line[usr_cmd_pos + 
i])
-                               && isspace(t_con->line[usr_cmd_pos + i + 1])) {
+               if ((i < usr_cmd_len - 1)
+                       && isspace((int)(unsigned char)t_con->line[usr_cmd_pos 
+ i])
+                       && isspace((int)(unsigned char)t_con->line[usr_cmd_pos 
+ i + 1])) {
                        optimized_spaces++;
                        continue;
                }
@@ -770,7 +771,7 @@ static int telnet_input(struct connection *connection)
                                if (*buf_p == 0xff) {
                                        t_con->state = TELNET_STATE_IAC;
                                } else {
-                                       if (isprint(*buf_p)) {  /* printable 
character */
+                                       if (isprint((int)(unsigned 
char)*buf_p)) {      /* printable character */
                                                telnet_insert(connection, 
buf_p, 1);
                                        } else { /* non-printable */
                                                if (*buf_p == 0x1b) {   /* 
escape */
diff --git a/src/svf/svf.c b/src/svf/svf.c
index 9dd2463c0a..585574d019 100644
--- a/src/svf/svf.c
+++ b/src/svf/svf.c
@@ -761,7 +761,8 @@ static int svf_read_command_from_file(FILE *fd)
                                if ('(' == ch)
                                        svf_command_buffer[cmd_pos++] = ' ';
 
-                               svf_command_buffer[cmd_pos++] = 
(char)toupper(ch);
+                               svf_command_buffer[cmd_pos++] =
+                                       (char)toupper((int)(unsigned char)ch);
 
                                /* insert a space after ')' */
                                if (')' == ch)
@@ -796,7 +797,7 @@ static int svf_parse_cmd_string(char *str, int len, char 
**argus, int *num_of_ar
                                goto parse_char;
                        default:
 parse_char:
-                               if (!in_bracket && isspace((int) str[pos])) {
+                               if (!in_bracket && isspace((int)(unsigned 
char)str[pos])) {
                                        space_found = 1;
                                        str[pos] = '\0';
                                } else if (space_found) {
@@ -883,7 +884,7 @@ static int svf_copy_hexstring_to_binary(char *str, uint8_t 
**bin, int orig_bit_l
                         * require line ends for correctness, since there is
                         * a hard limit on line length.
                         */
-                       if (!isspace(ch)) {
+                       if (!isspace((int)(unsigned char)ch)) {
                                if ((ch >= '0') && (ch <= '9')) {
                                        ch = ch - '0';
                                        break;
@@ -912,7 +913,7 @@ static int svf_copy_hexstring_to_binary(char *str, uint8_t 
**bin, int orig_bit_l
 
        /* consume optional leading '0' MSBs or whitespace */
        while (str_len > 0 && ((str[str_len - 1] == '0')
-                       || isspace((int) str[str_len - 1])))
+                       || isspace((int)(unsigned char)str[str_len - 1])))
                str_len--;
 
        /* check validity: we must have consumed everything */
diff --git a/src/target/image.c b/src/target/image.c
index e8ac066fdd..638cf1e63b 100644
--- a/src/target/image.c
+++ b/src/target/image.c
@@ -69,20 +69,20 @@ static int autodetect_image_type(struct image *image, const 
char *url)
                LOG_DEBUG("ELF image detected.");
                image->type = IMAGE_ELF;
        } else if ((buffer[0] == ':')   /* record start byte */
-               && (isxdigit(buffer[1]))
-               && (isxdigit(buffer[2]))
-               && (isxdigit(buffer[3]))
-               && (isxdigit(buffer[4]))
-               && (isxdigit(buffer[5]))
-               && (isxdigit(buffer[6]))
+               && (isxdigit((int)(unsigned char)buffer[1]))
+               && (isxdigit((int)(unsigned char)buffer[2]))
+               && (isxdigit((int)(unsigned char)buffer[3]))
+               && (isxdigit((int)(unsigned char)buffer[4]))
+               && (isxdigit((int)(unsigned char)buffer[5]))
+               && (isxdigit((int)(unsigned char)buffer[6]))
                && (buffer[7] == '0')   /* record type : 00 -> 05 */
                && (buffer[8] >= '0') && (buffer[8] < '6')) {
                LOG_DEBUG("IHEX image detected.");
                image->type = IMAGE_IHEX;
        } else if ((buffer[0] == 'S')   /* record start byte */
-               && (isxdigit(buffer[1]))
-               && (isxdigit(buffer[2]))
-               && (isxdigit(buffer[3]))
+               && (isxdigit((int)(unsigned char)buffer[1]))
+               && (isxdigit((int)(unsigned char)buffer[2]))
+               && (isxdigit((int)(unsigned char)buffer[3]))
                && (buffer[1] >= '0') && (buffer[1] < '9')) {
                LOG_DEBUG("S19 image detected.");
                image->type = IMAGE_SRECORD;
diff --git a/src/target/mips32.c b/src/target/mips32.c
index dd40558a18..4b16af95d4 100644
--- a/src/target/mips32.c
+++ b/src/target/mips32.c
@@ -1695,7 +1695,7 @@ COMMAND_HANDLER(mips32_handle_cp0_command)
                        break;
                case 2: /* 2 args => get cp0 reg/sel value or set value by name 
*/
                        tmp = *CMD_ARGV[0];
-                       if (isdigit(tmp)) /* starts from number then args are 
#reg and #sel */
+                       if (isdigit((int)(unsigned char)tmp)) /* starts from 
number then args are #reg and #sel */
                                retval = mips32_cp0_get_reg_by_number(CMD, 
ejtag_info);
                        else /* or set value by register name */
                                retval = mips32_cp0_set_reg_by_name(CMD, 
mips32, ejtag_info);
@@ -2270,7 +2270,7 @@ COMMAND_HANDLER(mips32_handle_dsp_command)
                        break;
                case 2:
                        tmp = *CMD_ARGV[0];
-                       if (isdigit(tmp)) {
+                       if (isdigit((int)(unsigned char)tmp)) {
                                command_print(CMD, "Error: invalid dsp command 
format");
                                retval = ERROR_COMMAND_ARGUMENT_INVALID;
                        } else {

-- 

Reply via email to