diff --git a/src/flash/nor/fm4.c b/src/flash/nor/fm4.c
index 2db79ef50..6d1ab777e 100644
--- a/src/flash/nor/fm4.c
+++ b/src/flash/nor/fm4.c
@@ -605,7 +605,7 @@ 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 5cb552aa9..2fbe9335a 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 58d7913c2..b27bd3602 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 9ad00ce62..b18b5f17e 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 04942f753..d4ead4f7d 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 aaed16db6..4f6b5b85b 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 496466ca3..8dc7580f9 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 691e576e5..5b0b016e1 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 b6e5f9e47..f39174e09 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 f35b39ad2..13d30e81a 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 7818af2db..dadb0203e 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 9dd2463c0..1cbafef56 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 e8ac066fd..638cf1e63 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 dd40558a1..4b16af95d 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 {
