diff options
Diffstat (limited to 'toxcore/Messenger.c')
-rw-r--r-- | toxcore/Messenger.c | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c index 99b95f67..3fc2cc63 100644 --- a/toxcore/Messenger.c +++ b/toxcore/Messenger.c | |||
@@ -574,33 +574,48 @@ int m_set_userstatus(Messenger *m, uint8_t status) | |||
574 | return 0; | 574 | return 0; |
575 | } | 575 | } |
576 | 576 | ||
577 | int m_unset_avatar(Messenger *m) | ||
578 | { | ||
579 | if (m->avatar_data != NULL) | ||
580 | free(m->avatar_data); | ||
581 | |||
582 | m->avatar_data = NULL; | ||
583 | m->avatar_data_length = 0; | ||
584 | m->avatar_format = AVATAR_FORMAT_NONE; | ||
585 | memset(m->avatar_hash, 0, AVATAR_HASH_LENGTH); | ||
586 | |||
587 | uint32_t i; | ||
588 | |||
589 | for (i = 0; i < m->numfriends; ++i) | ||
590 | m->friendlist[i].avatar_info_sent = 0; | ||
591 | |||
592 | return 0; | ||
593 | } | ||
594 | |||
577 | int m_set_avatar(Messenger *m, uint8_t format, const uint8_t *data, uint32_t length) | 595 | int m_set_avatar(Messenger *m, uint8_t format, const uint8_t *data, uint32_t length) |
578 | { | 596 | { |
579 | if (length > AVATAR_MAX_DATA_LENGTH) | 597 | if (format == AVATAR_FORMAT_NONE) { |
598 | m_unset_avatar(m); | ||
599 | return 0; | ||
600 | } | ||
601 | |||
602 | if (length > AVATAR_MAX_DATA_LENGTH || length == 0) | ||
580 | return -1; | 603 | return -1; |
581 | 604 | ||
582 | if (format == AVATAR_FORMAT_NONE) { | 605 | if (data == NULL) |
583 | free(m->avatar_data); | 606 | return -1; |
584 | m->avatar_data = NULL; | ||
585 | m->avatar_data_length = 0; | ||
586 | m->avatar_format = format; | ||
587 | memset(m->avatar_hash, 0, AVATAR_HASH_LENGTH); | ||
588 | } else { | ||
589 | if (length == 0 || data == NULL) | ||
590 | return -1; | ||
591 | 607 | ||
592 | uint8_t *tmp = realloc(m->avatar_data, length); | 608 | uint8_t *tmp = realloc(m->avatar_data, length); |
593 | 609 | ||
594 | if (tmp == NULL) | 610 | if (tmp == NULL) |
595 | return -1; | 611 | return -1; |
596 | 612 | ||
597 | m->avatar_format = format; | 613 | m->avatar_format = format; |
598 | m->avatar_data = tmp; | 614 | m->avatar_data = tmp; |
599 | m->avatar_data_length = length; | 615 | m->avatar_data_length = length; |
600 | memcpy(m->avatar_data, data, length); | 616 | memcpy(m->avatar_data, data, length); |
601 | 617 | ||
602 | m_avatar_hash(m->avatar_hash, m->avatar_data, m->avatar_data_length); | 618 | m_avatar_hash(m->avatar_hash, m->avatar_data, m->avatar_data_length); |
603 | } | ||
604 | 619 | ||
605 | uint32_t i; | 620 | uint32_t i; |
606 | 621 | ||