blob: ec2a3ce7cab4fdb33d0fd7ea299306e3c5db4673 [file] [log] [blame]
#include <u.h>
#include <libc.h>
#include <ip.h>
#include <ctype.h>
#include "dat.h"
#include "protos.h"
static char tohex[16] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f'
};
static int
p_seprint(Msg *m)
{
int c, i, n, isstring;
uchar *ps = m->ps;
char *p = m->p;
char *e = m->e;
n = m->pe - ps;
if(n > Nflag)
n = Nflag;
isstring = 1;
for(i = 0; i < n; i++){
c = ps[i];
if(!isprint(c) && !isspace(c)){
isstring = 0;
break;
}
}
if(isstring){
for(i = 0; i < n && p+1<e; i++){
c = ps[i];
switch(c){
case '\t':
*p++ = '\\';
*p++ = 't';
break;
case '\r':
*p++ = '\\';
*p++ = 'r';
break;
case '\n':
*p++ = '\\';
*p++ = 'n';
break;
default:
*p++ = c;
}
}
} else {
for(i = 0; i < n && p+1<e; i++){
c = ps[i];
*p++ = tohex[c>>4];
*p++ = tohex[c&0xf];
}
}
m->pr = nil;
m->p = p;
m->ps = ps;
return 0;
}
Proto dump =
{
"dump",
nil,
nil,
p_seprint,
nil,
nil,
nil,
defaultframer
};