51 lines
737 B
C
51 lines
737 B
C
#include <u.h>
|
|
#include <libc.h>
|
|
#include <venti.h>
|
|
|
|
int
|
|
vtputstring(Packet *p, char *s)
|
|
{
|
|
uchar buf[2];
|
|
int n;
|
|
|
|
if(s == nil){
|
|
werrstr("null string in packet");
|
|
return -1;
|
|
}
|
|
n = strlen(s);
|
|
if(n > VtMaxStringSize){
|
|
werrstr("string too long in packet");
|
|
return -1;
|
|
}
|
|
buf[0] = n>>8;
|
|
buf[1] = n;
|
|
packetappend(p, buf, 2);
|
|
packetappend(p, (uchar*)s, n);
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
vtgetstring(Packet *p, char **ps)
|
|
{
|
|
uchar buf[2];
|
|
int n;
|
|
char *s;
|
|
|
|
if(packetconsume(p, buf, 2) < 0)
|
|
return -1;
|
|
n = (buf[0]<<8) + buf[1];
|
|
if(n > VtMaxStringSize) {
|
|
werrstr("string too long in packet");
|
|
return -1;
|
|
}
|
|
s = vtmalloc(n+1);
|
|
if(packetconsume(p, (uchar*)s, n) < 0){
|
|
vtfree(s);
|
|
return -1;
|
|
}
|
|
s[n] = 0;
|
|
*ps = s;
|
|
return 0;
|
|
}
|
|
|