|  | #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; | 
|  | } | 
|  |  |