POSIX says that octal escapes have the format \ddd in the format string,
but \0ddd in a %b argument, with a length restriction of 3 octal digits in either case. This seems silly, but it needs to be right so it's possible to write an octal escape followed by an ordinary digit. Solaris printf(1) and GNU printf(1) also behave this way. Example: "printf '\0752'" now produces "=2" instead of garbage.
This commit is contained in:
parent
1192a80ed1
commit
9d65050e7b
@ -408,7 +408,8 @@ escape(char *fmt, int percent, size_t *len)
|
||||
/* octal constant */
|
||||
case '0': case '1': case '2': case '3':
|
||||
case '4': case '5': case '6': case '7':
|
||||
for (c = *fmt == '0' ? 4 : 3, value = 0;
|
||||
c = (!percent && *fmt == '0') ? 4 : 3;
|
||||
for (value = 0;
|
||||
c-- && *fmt >= '0' && *fmt <= '7'; ++fmt) {
|
||||
value <<= 3;
|
||||
value += *fmt - '0';
|
||||
|
Loading…
x
Reference in New Issue
Block a user