Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.71 KB | None | 0 0
  1. int osc_message_add_string(struct osc_message *msg, const char *data){
  2.     unsigned int length_data = strlen(data) + 4 - (strlen(data) % 4);
  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);
  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.         memcpy (msg->typetag + length + 6, msg->typetag + 2, overall_length - address_length - length);
  15.         *(msg->typetag + length + 1) = OSC_TT_STRING;
  16.         memcpy (msg->typetag + length + 2, "s\0\0\0\0", 4);
  17.         memcpy (msg->address + overall_length + 4, &data, length_data - 4 -(strlen(data)%4));
  18.         memset (msg->address + overall_length + 4 + length_data -4 - (strlen(data) % 4),'\0',length_data - 4 - strlen(data) % 4);
  19.     } else {
  20.         void *ptr = realloc (msg->raw_data, overall_length + 4 + length_data);
  21.         if (!ptr) {
  22.             return 1;
  23.         }
  24.         msg->raw_data = ptr;
  25.         msg->address = ((char *)msg->raw_data + 4);
  26.         msg->typetag = msg->address + address_length;
  27.         memcpy (msg->address + overall_length, &data, length_data - 4 - (strlen(data)%4));
  28.         memset (msg->address + overall_length + length_data - 4 -strlen(data)%4, '\0', length_data - 4 - strlen(data) % 4);
  29.         *(msg->typetag + length + 1) = OSC_TT_STRING;
  30.     }
  31.     *(int32_t *) msg->raw_data = overall_length + length_data;
  32.     return 0;
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement