dtc: Cleanup \nnn and \xNN string escape handling
Several small cleanups to the handling of octal and hex string escapes: - Use strncmp() instead dof what were essentially open-coded versions of the same, with short fixed lengths. - The call path to get_oct_char() means an empty escape is not possible. So replace the error message in this case with an assert. - Use die() instead of a non-fatal error message if get_hex_char() is given an empty escape. Change error message to close match gcc's in the same circumstance. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>main
parent
3bdd393965
commit
2192d46dfd
19
data.c
19
data.c
|
@ -75,16 +75,11 @@ static char get_oct_char(const char *s, int *i)
|
||||||
long val;
|
long val;
|
||||||
|
|
||||||
x[3] = '\0';
|
x[3] = '\0';
|
||||||
x[0] = s[(*i)];
|
strncpy(x, s + *i, 3);
|
||||||
if (x[0]) {
|
|
||||||
x[1] = s[(*i)+1];
|
|
||||||
if (x[1])
|
|
||||||
x[2] = s[(*i)+2];
|
|
||||||
}
|
|
||||||
|
|
||||||
val = strtol(x, &endx, 8);
|
val = strtol(x, &endx, 8);
|
||||||
if ((endx - x) == 0)
|
|
||||||
fprintf(stderr, "Empty \\nnn escape\n");
|
assert(endx > x);
|
||||||
|
|
||||||
(*i) += endx - x;
|
(*i) += endx - x;
|
||||||
return val;
|
return val;
|
||||||
|
@ -97,13 +92,11 @@ static char get_hex_char(const char *s, int *i)
|
||||||
long val;
|
long val;
|
||||||
|
|
||||||
x[2] = '\0';
|
x[2] = '\0';
|
||||||
x[0] = s[(*i)];
|
strncpy(x, s + *i, 2);
|
||||||
if (x[0])
|
|
||||||
x[1] = s[(*i)+1];
|
|
||||||
|
|
||||||
val = strtol(x, &endx, 16);
|
val = strtol(x, &endx, 16);
|
||||||
if ((endx - x) == 0)
|
if (!(endx > x))
|
||||||
fprintf(stderr, "Empty \\x escape\n");
|
die("\\x used with no following hex digits\n");
|
||||||
|
|
||||||
(*i) += endx - x;
|
(*i) += endx - x;
|
||||||
return val;
|
return val;
|
||||||
|
|
Loading…
Reference in New Issue