summaryrefslogtreecommitdiff
path: root/toxcore/Messenger.c
diff options
context:
space:
mode:
Diffstat (limited to 'toxcore/Messenger.c')
-rw-r--r--toxcore/Messenger.c53
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
577int 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
577int m_set_avatar(Messenger *m, uint8_t format, const uint8_t *data, uint32_t length) 595int 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