ref: a029cb11d3d19b4064aa0c739707cd4b36742887
dir: /sys/src/libventi/string.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; }