xref: /plan9/sys/src/libventi/string.c (revision 368c31ab13393dea083228fdd1c3445076f83a4b)
1 #include <u.h>
2 #include <libc.h>
3 #include <venti.h>
4 
5 int
vtputstring(Packet * p,char * s)6 vtputstring(Packet *p, char *s)
7 {
8 	uchar buf[2];
9 	int n;
10 
11 	if(s == nil){
12 		werrstr("null string in packet");
13 		return -1;
14 	}
15 	n = strlen(s);
16 	if(n > VtMaxStringSize){
17 		werrstr("string too long in packet");
18 		return -1;
19 	}
20 	buf[0] = n>>8;
21 	buf[1] = n;
22 	packetappend(p, buf, 2);
23 	packetappend(p, (uchar*)s, n);
24 	return 0;
25 }
26 
27 int
vtgetstring(Packet * p,char ** ps)28 vtgetstring(Packet *p, char **ps)
29 {
30 	uchar buf[2];
31 	int n;
32 	char *s;
33 
34 	if(packetconsume(p, buf, 2) < 0)
35 		return -1;
36 	n = (buf[0]<<8) + buf[1];
37 	if(n > VtMaxStringSize) {
38 		werrstr("string too long in packet");
39 		return -1;
40 	}
41 	s = vtmalloc(n+1);
42 	if(packetconsume(p, (uchar*)s, n) < 0){
43 		vtfree(s);
44 		return -1;
45 	}
46 	s[n] = 0;
47 	*ps = s;
48 	return 0;
49 }
50 
51