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