string.c 737 B

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