diff options
| -rw-r--r-- | src/bplist.c | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/src/bplist.c b/src/bplist.c index 94b0793..f1bfcc0 100644 --- a/src/bplist.c +++ b/src/bplist.c | |||
| @@ -884,22 +884,13 @@ static void write_date(bytearray_t * bplist, double val) | |||
| 884 | 884 | ||
| 885 | static void write_raw_data(bytearray_t * bplist, uint8_t mark, uint8_t * val, uint64_t size) | 885 | static void write_raw_data(bytearray_t * bplist, uint8_t mark, uint8_t * val, uint64_t size) |
| 886 | { | 886 | { |
| 887 | uint8_t *buff = NULL; | ||
| 888 | uint8_t marker = mark | (size < 15 ? size : 0xf); | 887 | uint8_t marker = mark | (size < 15 ? size : 0xf); |
| 889 | byte_array_append(bplist, &marker, sizeof(uint8_t)); | 888 | byte_array_append(bplist, &marker, sizeof(uint8_t)); |
| 890 | if (size >= 15) | 889 | if (size >= 15) { |
| 891 | { | 890 | write_int(bplist, size); |
| 892 | bytearray_t *int_buff = byte_array_new(); | ||
| 893 | write_int(int_buff, size); | ||
| 894 | byte_array_append(bplist, int_buff->data, int_buff->len); | ||
| 895 | byte_array_free(int_buff); | ||
| 896 | } | 891 | } |
| 897 | //stupid unicode buffer length | 892 | if (BPLIST_UNICODE==mark) size <<= 1; |
| 898 | if (BPLIST_UNICODE==mark) size *= 2; | 893 | byte_array_append(bplist, val, size); |
| 899 | buff = (uint8_t *) malloc(size); | ||
| 900 | memcpy(buff, val, size); | ||
| 901 | byte_array_append(bplist, buff, size); | ||
| 902 | free(buff); | ||
| 903 | } | 894 | } |
| 904 | 895 | ||
| 905 | static void write_data(bytearray_t * bplist, uint8_t * val, uint64_t size) | 896 | static void write_data(bytearray_t * bplist, uint8_t * val, uint64_t size) |
| @@ -916,12 +907,10 @@ static void write_string(bytearray_t * bplist, char *val) | |||
| 916 | static void write_unicode(bytearray_t * bplist, uint16_t * val, uint64_t size) | 907 | static void write_unicode(bytearray_t * bplist, uint16_t * val, uint64_t size) |
| 917 | { | 908 | { |
| 918 | uint64_t i = 0; | 909 | uint64_t i = 0; |
| 919 | uint64_t size2 = size * sizeof(uint16_t); | 910 | uint16_t *buff = (uint16_t*)malloc(size << 1); |
| 920 | uint8_t *buff = (uint8_t *) malloc(size2); | ||
| 921 | memcpy(buff, val, size2); | ||
| 922 | for (i = 0; i < size; i++) | 911 | for (i = 0; i < size; i++) |
| 923 | byte_convert(buff + i * sizeof(uint16_t), sizeof(uint16_t)); | 912 | buff[i] = be16toh(val[i]); |
| 924 | write_raw_data(bplist, BPLIST_UNICODE, buff, size); | 913 | write_raw_data(bplist, BPLIST_UNICODE, (uint8_t*)buff, size); |
| 925 | free(buff); | 914 | free(buff); |
| 926 | } | 915 | } |
| 927 | 916 | ||
