Index: wicontrol.c =================================================================== RCS file: /home/cvsJail/OpenBSD_cvs/cvs/src/sbin/wicontrol/wicontrol.c,v retrieving revision 1.57 diff -u -r1.57 wicontrol.c --- wicontrol.c 24 Nov 2004 18:11:15 -0000 1.57 +++ wicontrol.c 2 May 2005 10:15:48 -0000 @@ -60,6 +60,7 @@ #include #include #include +#include #include #include #include @@ -153,29 +154,23 @@ void wi_printstr(struct wi_req *wreq) { - char *ptr; - int i, max; + char *ptr = NULL, *visptr = NULL; + int visrtrn; if (wreq->wi_type == WI_RID_SERIALNO) { ptr = (char *)&wreq->wi_val; - max = MIN(sizeof(wreq->wi_val) - 1, (wreq->wi_len - 1) * 2); - for (i = 0; i < max; i++) { - if (ptr[i] == '\0') - ptr[i] = ' '; - } + if ((visptr = malloc( 4 * strlen(ptr) + 1 )) == NULL) + err(1, NULL); + visrtrn = strvisx(visptr, ptr, strlen(ptr), VIS_WHITE | VIS_SAFE); } else { - int len = letoh16(wreq->wi_val[0]); - ptr = (char *)&wreq->wi_val[1]; - max = MIN(sizeof(wreq->wi_val) - 1, len); - for (i = 0; i < max; i++) { - if (ptr[i] == '\0') - ptr[i] = ' '; - } + if ((visptr = malloc( 4 * strlen(ptr) + 1 )) == NULL) + err(1, NULL); + visrtrn = strvisx(visptr, ptr, MIN(sizeof(wreq->wi_val) - 1, + letoh16(wreq->wi_val[0])), VIS_TAB | VIS_NL | VIS_SAFE); } - - ptr[i] = '\0'; - printf("[ %s ]", ptr); + printf("[ %s ]", visptr); + free(visptr); } void