summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornakanon <none@none>2007-11-02 13:27:31 -0700
committernakanon <none@none>2007-11-02 13:27:31 -0700
commit85298dc181bc16dc378c47f19f3785559903a8b9 (patch)
tree9b6534a2b68b6cc27f0fc06631b3a89acdb45769
parent0466663da6b0a593ef1920d9be1bbc3918f40d86 (diff)
downloadillumos-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.c49
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