diff options
| author | nakanon <none@none> | 2007-11-02 13:27:31 -0700 |
|---|---|---|
| committer | nakanon <none@none> | 2007-11-02 13:27:31 -0700 |
| commit | 85298dc181bc16dc378c47f19f3785559903a8b9 (patch) | |
| tree | 9b6534a2b68b6cc27f0fc06631b3a89acdb45769 | |
| parent | 0466663da6b0a593ef1920d9be1bbc3918f40d86 (diff) | |
| download | illumos-joyent-85298dc181bc16dc378c47f19f3785559903a8b9.tar.gz | |
6579524 praudit produces garbled characters for text token by always stripping MSB off
| -rw-r--r-- | usr/src/cmd/praudit/format.c | 49 |
1 files changed, 22 insertions, 27 deletions
diff --git a/usr/src/cmd/praudit/format.c b/usr/src/cmd/praudit/format.c index d5a0cc819e..44920d8584 100644 --- a/usr/src/cmd/praudit/format.c +++ b/usr/src/cmd/praudit/format.c @@ -1636,7 +1636,6 @@ int pa_adr_string(pr_context_t *context, int status, int flag) { char *c; - char *p; short length; int returnstat; uval_t uval; @@ -1652,21 +1651,15 @@ pa_adr_string(pr_context_t *context, int status, int flag) return (returnstat); if ((c = (char *)malloc(length + 1)) == NULL) return (-1); - if ((p = (char *)malloc((length * 2) + 1)) == NULL) { - free(c); - return (-1); - } if ((returnstat = pr_adr_char(context, c, length)) != 0) { free(c); - free(p); return (returnstat); } - convertascii(p, c, length - 1); + uval.uvaltype = PRA_STRING; - uval.string_val = p; + uval.string_val = c; returnstat = pa_print(context, &uval, flag); free(c); - free(p); return (returnstat); } @@ -1698,7 +1691,7 @@ pa_file_string(pr_context_t *context, int status, int flag) return (returnstat); if ((c = (char *)malloc(length + 1)) == NULL) return (-1); - if ((p = (char *)malloc((length * 2) + 1)) == NULL) { + if ((p = (char *)malloc((length * 4) + 1)) == NULL) { free(c); return (-1); } @@ -2832,31 +2825,33 @@ static int cntrl_map_entries = sizeof (cntrl_map) void convertascii(char *p, char *c, int size) { - register int i; - register int j, match; + int i, j, uc; for (i = 0; i < size; i++) { - *(c + i) = (char)toascii(*(c + i)); - if ((int)iscntrl(*(c + i))) { - for (j = match = 0; j < cntrl_map_entries; j++) - if (cntrl_map[j].from == *(c + i)) { - *p++ = '\\'; - *p++ = cntrl_map[j].to; - match = 1; + uc = (unsigned char)*(c + i); + if (isascii(uc)) { + if (iscntrl(uc)) { + for (j = 0; j < cntrl_map_entries; j++) { + if (cntrl_map[j].from == uc) { + *p++ = '\\'; + *p++ = cntrl_map[j].to; + break; + } + } + if (j == cntrl_map_entries) { + *p++ = '^'; + *p++ = (char)(uc ^ 0100); } - if (!match) { - *p++ = '^'; - *p++ = (char)(*(c + i) + 0x40); + } else { + *p++ = (char)uc; } - } else - *p++ = *(c + i); + } else { + p += sprintf(p, "\\%03o", uc); + } } - *p = '\0'; - } - /* * ----------------------------------------------------------------------- * pa_xgeneric: Process Xobject token and display contents |
