Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. int osc_message_add_string(struct osc_message *msg, const char *data){
  2. unsigned int length_data = strlen(data);
  3. unsigned int length = osc_message_argc(msg); //typetag
  4. unsigned int overall_length = osc_message_serialized_length (msg);
  5. unsigned int address_length = length_address(msg);
  6. if (length % 4 == 2){
  7. void *ptr = realloc (msg->raw_data, overall_length + 8 + length_data + 4 - (strlen(data) % 4));
  8. if (!ptr) {
  9. return 1;
  10. }
  11. msg->raw_data = ptr;
  12. msg->address = ((char *)msg->raw_data + 4); // + 4 pointer na adresu
  13. msg->typetag = msg->address + address_length;
  14.  
  15. memmove(msg->typetag + 6 + length, msg->typetag + length + 2,
  16. overall_length - address_length - length - 2);
  17. *(msg->typetag + length + 1) = OSC_TT_STRING;
  18. memcpy (msg->typetag + length + 2, "s\0\0\0\0", 4);
  19. memcpy (msg->address + overall_length + 4, &data, length_data);
  20. memset (msg->address + overall_length + 4 + length_data,'\0', 4 - strlen(data) % 4);
  21. } else {
  22. void *ptr = realloc (msg->raw_data, overall_length + 4 + length_data);
  23. if (!ptr) {
  24. return 1;
  25. }
  26. msg->raw_data = ptr;
  27. msg->address = ((char *)msg->raw_data + 4);
  28. msg->typetag = msg->address + address_length;
  29. memcpy (msg->address + overall_length, &data, length_data);
  30. memset (msg->address + overall_length + length_data, '\0', 4 - strlen(data) % 4);
  31. *(msg->typetag + length + 1) = OSC_TT_STRING;
  32. }
  33. *(int32_t *) msg->raw_data = overall_length + length_data;
  34. return 0;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement