mirror of
https://github.com/mariusgreuel/avrdude.git
synced 2025-09-27 22:45:27 +00:00
Protect terminal dump from vagaries of C libray implementation of isalpha() etc
Some C libraries assign true to isalpha(0xff), isdigit(0xff) or ispunct(0xff), which means that the Operating System terminal sees a character 0xff which it may not have a useful display character for. This commit only outputs printable ASCII characters for an AVRDUDE terminal dump reducing the risk of the OS terminal not being able to print the character properly.
This commit is contained in:
10
src/term.c
10
src/term.c
@@ -198,13 +198,9 @@ static int chardump_line(char * buffer, unsigned char * p, int n, int pad)
|
||||
n = n < 1? 1: n > sizeof b? sizeof b: n;
|
||||
|
||||
memcpy(b, p, n);
|
||||
for (int i = 0; i < n; i++) {
|
||||
buffer[i] = '.';
|
||||
if (isalpha(b[i]) || isdigit(b[i]) || ispunct(b[i]))
|
||||
buffer[i] = b[i];
|
||||
else if (isspace(b[i]))
|
||||
buffer[i] = ' ';
|
||||
}
|
||||
for (int i = 0; i < n; i++)
|
||||
buffer[i] = isascii(b[i]) && isspace(b[i])? ' ':
|
||||
isascii(b[i]) && isgraph(b[i])? b[i]: '.';
|
||||
|
||||
for (i = n; i < pad; i++)
|
||||
buffer[i] = ' ';
|
||||
|
Reference in New Issue
Block a user