od: sometime ago I landed BIG od implementation

from coreutils. My fault. This commit contains
cleanups and size reductions.
This commit is contained in:
Denis Vlasenko 2006-11-28 23:37:46 +00:00
parent df38188367
commit 601ae1378b
3 changed files with 628 additions and 762 deletions

File diff suppressed because it is too large Load Diff

View File

@ -671,7 +671,7 @@ static char *encodeString(const char *string)
* *
* $Parameters: * $Parameters:
* (char *) string . . . The first string to decode. * (char *) string . . . The first string to decode.
* (int) flag . . . 1 if require decode '+' as ' ' for CGI * (int) flag . . . 1 if need to decode '+' as ' ' for CGI
* *
* $Return: (char *) . . . . A pointer to the decoded string (same as input). * $Return: (char *) . . . . A pointer to the decoded string (same as input).
* *
@ -685,14 +685,18 @@ static char *decodeString(char *orig, int flag_plus_to_space)
char *ptr = string; char *ptr = string;
while (*ptr) { while (*ptr) {
if (*ptr == '+' && flag_plus_to_space) { *string++ = ' '; ptr++; } if (*ptr == '+' && flag_plus_to_space) {
else if (*ptr != '%') *string++ = *ptr++; *string++ = ' ';
else { ptr++;
} else if (*ptr != '%') {
*string++ = *ptr++;
} else {
unsigned int value1, value2; unsigned int value1, value2;
ptr++; ptr++;
if (sscanf(ptr, "%1X", &value1) != 1 || if (sscanf(ptr, "%1X", &value1) != 1
sscanf(ptr+1, "%1X", &value2) != 1) { || sscanf(ptr+1, "%1X", &value2) != 1
) {
if (!flag_plus_to_space) if (!flag_plus_to_space)
return NULL; return NULL;
*string++ = '%'; *string++ = '%';