Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int osc_message_add_string(struct osc_message *msg, const char *data){
- unsigned int length_data = strlen(data) + 4 - (strlen(data) % 4);
- unsigned int length = osc_message_argc(msg); //typetag
- unsigned int overall_length = osc_message_serialized_length (msg);
- unsigned int address_length = length_address(msg);
- if (length % 4 == 2){
- void *ptr = realloc (msg->raw_data, overall_length + 8 + length_data);
- if (!ptr) {
- return 1;
- }
- msg->raw_data = ptr;
- msg->address = ((char *)msg->raw_data + 4); // + 4 pointer na adresu
- msg->typetag = msg->address + address_length;
- memcpy (msg->typetag + length + 6, msg->typetag + 2, overall_length - address_length - length);
- *(msg->typetag + length + 1) = OSC_TT_STRING;
- memcpy (msg->typetag + length + 2, "s\0\0\0\0", 4);
- memcpy (msg->address + overall_length + 4, &data, length_data - 4 -(strlen(data)%4));
- memset (msg->address + overall_length + 4 + length_data -4 - (strlen(data) % 4),'\0',length_data - 4 - strlen(data) % 4);
- } else {
- void *ptr = realloc (msg->raw_data, overall_length + 4 + length_data);
- if (!ptr) {
- return 1;
- }
- msg->raw_data = ptr;
- msg->address = ((char *)msg->raw_data + 4);
- msg->typetag = msg->address + address_length;
- memcpy (msg->address + overall_length, &data, length_data - 4 - (strlen(data)%4));
- memset (msg->address + overall_length + length_data - 4 -strlen(data)%4, '\0', length_data - 4 - strlen(data) % 4);
- *(msg->typetag + length + 1) = OSC_TT_STRING;
- }
- *(int32_t *) msg->raw_data = overall_length + length_data;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement