Skip to content

Commit 837a2bc

Browse files
committed
Update cute_aseprite
1 parent bc8e034 commit 837a2bc

File tree

2 files changed

+75
-79
lines changed

2 files changed

+75
-79
lines changed

include/cute_aseprite.h

Lines changed: 54 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -344,9 +344,9 @@ struct ase_t
344344
#define CUTE_ASEPRITE_ASSERT assert
345345
#endif
346346

347-
#if !defined(CUTE_ASEPRITE_FILEIO)
347+
#if !defined(CUTE_ASEPRITE_STDIO)
348348
#include <stdio.h> // fopen
349-
#define CUTE_ASEPRITE_FILEIO
349+
#define CUTE_ASEPRITE_STDIO
350350
#define CUTE_ASEPRITE_SEEK_SET SEEK_SET
351351
#define CUTE_ASEPRITE_SEEK_END SEEK_END
352352
#define CUTE_ASEPRITE_FILE FILE
@@ -357,13 +357,13 @@ struct ase_t
357357
#define CUTE_ASEPRITE_FCLOSE fclose
358358
#endif
359359

360-
static int s_error_cline; // The line in cute_aseprite.h where the error was triggered.
361360
static const char* s_error_file = NULL; // The filepath of the file being parsed. NULL if from memory.
362361
static const char* s_error_reason; // Used to capture errors during DEFLATE parsing.
363362

364363
#if !defined(CUTE_ASEPRITE_WARNING)
365364
#define CUTE_ASEPRITE_WARNING(msg) cute_aseprite_warning(msg, __LINE__)
366365

366+
static int s_error_cline; // The line in cute_aseprite.h where the error was triggered.
367367
void cute_aseprite_warning(const char* warning, int line)
368368
{
369369
s_error_cline = line;
@@ -453,7 +453,7 @@ static uint64_t s_peak_bits(deflate_t* s, int num_bits_to_read)
453453
static uint32_t s_consume_bits(deflate_t* s, int num_bits_to_read)
454454
{
455455
CUTE_ASEPRITE_ASSERT(s->count >= num_bits_to_read);
456-
uint32_t bits = s->bits & (((uint64_t)1 << num_bits_to_read) - 1);
456+
uint32_t bits = (uint32_t)(s->bits & (((uint64_t)1 << num_bits_to_read) - 1));
457457
s->bits >>= num_bits_to_read;
458458
s->count -= num_bits_to_read;
459459
s->bits_left -= num_bits_to_read;
@@ -482,9 +482,10 @@ static uint32_t s_rev16(uint32_t a)
482482
}
483483

484484
// RFC 1951 section 3.2.2
485-
static int s_build(deflate_t* s, uint32_t* tree, uint8_t* lens, int sym_count)
485+
static uint32_t s_build(deflate_t* s, uint32_t* tree, uint8_t* lens, int sym_count)
486486
{
487487
int n, codes[16], first[16], counts[16] = { 0 };
488+
CUTE_ASEPRITE_UNUSED(s);
488489

489490
// Frequency count
490491
for (n = 0; n < sym_count; n++) counts[lens[n]]++;
@@ -499,19 +500,18 @@ static int s_build(deflate_t* s, uint32_t* tree, uint8_t* lens, int sym_count)
499500

500501
for (int i = 0; i < sym_count; ++i)
501502
{
502-
int len = lens[i];
503+
uint8_t len = lens[i];
503504

504505
if (len != 0)
505506
{
506507
CUTE_ASEPRITE_ASSERT(len < 16);
507-
uint32_t code = codes[len]++;
508-
uint32_t slot = first[len]++;
509-
tree[slot] = (code << (32 - len)) | (i << 4) | len;
508+
uint32_t code = (uint32_t)codes[len]++;
509+
uint32_t slot = (uint32_t)first[len]++;
510+
tree[slot] = (code << (32 - (uint32_t)len)) | (i << 4) | len;
510511
}
511512
}
512513

513-
int max_index = first[15];
514-
return max_index;
514+
return (uint32_t)first[15];
515515
}
516516

517517
static int s_stored(deflate_t* s)
@@ -561,8 +561,7 @@ static int s_decode(deflate_t* s, uint32_t* tree, int hi)
561561
uint32_t len = (32 - (key & 0xF));
562562
CUTE_ASEPRITE_ASSERT((search >> len) == (key >> len));
563563

564-
int code = s_consume_bits(s, key & 0xF);
565-
(void)code;
564+
s_consume_bits(s, key & 0xF);
566565
return (key >> 4) & 0xFFF;
567566
}
568567

@@ -571,31 +570,31 @@ static int s_dynamic(deflate_t* s)
571570
{
572571
uint8_t lenlens[19] = { 0 };
573572

574-
int nlit = 257 + s_read_bits(s, 5);
575-
int ndst = 1 + s_read_bits(s, 5);
576-
int nlen = 4 + s_read_bits(s, 4);
573+
uint32_t nlit = 257 + s_read_bits(s, 5);
574+
uint32_t ndst = 1 + s_read_bits(s, 5);
575+
uint32_t nlen = 4 + s_read_bits(s, 4);
577576

578-
for (int i = 0 ; i < nlen; ++i)
577+
for (uint32_t i = 0 ; i < nlen; ++i)
579578
lenlens[s_permutation_order[i]] = (uint8_t)s_read_bits(s, 3);
580579

581580
// Build the tree for decoding code lengths
582581
s->nlen = s_build(0, s->len, lenlens, 19);
583582
uint8_t lens[288 + 32];
584583

585-
for (int n = 0; n < nlit + ndst;)
584+
for (uint32_t n = 0; n < nlit + ndst;)
586585
{
587-
int sym = s_decode(s, s->len, s->nlen);
586+
int sym = s_decode(s, s->len, (int)s->nlen);
588587
switch (sym)
589588
{
590-
case 16: for (int i = 3 + s_read_bits(s, 2); i; --i, ++n) lens[n] = lens[n - 1]; break;
591-
case 17: for (int i = 3 + s_read_bits(s, 3); i; --i, ++n) lens[n] = 0; break;
592-
case 18: for (int i = 11 + s_read_bits(s, 7); i; --i, ++n) lens[n] = 0; break;
589+
case 16: for (uint32_t i = 3 + s_read_bits(s, 2); i; --i, ++n) lens[n] = lens[n - 1]; break;
590+
case 17: for (uint32_t i = 3 + s_read_bits(s, 3); i; --i, ++n) lens[n] = 0; break;
591+
case 18: for (uint32_t i = 11 + s_read_bits(s, 7); i; --i, ++n) lens[n] = 0; break;
593592
default: lens[n++] = (uint8_t)sym; break;
594593
}
595594
}
596595

597-
s->nlit = s_build(s, s->lit, lens, nlit);
598-
s->ndst = s_build(0, s->dst, lens + nlit, ndst);
596+
s->nlit = s_build(s, s->lit, lens, (int)nlit);
597+
s->ndst = s_build(0, s->dst, lens + nlit, (int)ndst);
599598
return 1;
600599
}
601600

@@ -604,7 +603,7 @@ static int s_block(deflate_t* s)
604603
{
605604
while (1)
606605
{
607-
int symbol = s_decode(s, s->lit, s->nlit);
606+
int symbol = s_decode(s, s->lit, (int)s->nlit);
608607

609608
if (symbol < 256)
610609
{
@@ -616,9 +615,9 @@ static int s_block(deflate_t* s)
616615
else if (symbol > 256)
617616
{
618617
symbol -= 257;
619-
int length = s_read_bits(s, s_len_extra_bits[symbol]) + s_len_base[symbol];
620-
int distance_symbol = s_decode(s, s->dst, s->ndst);
621-
int backwards_distance = s_read_bits(s, s_dist_extra_bits[distance_symbol]) + s_dist_base[distance_symbol];
618+
uint32_t length = s_read_bits(s, (int)(s_len_extra_bits[symbol])) + s_len_base[symbol];
619+
int distance_symbol = s_decode(s, s->dst, (int)s->ndst);
620+
uint32_t backwards_distance = s_read_bits(s, s_dist_extra_bits[distance_symbol]) + s_dist_base[distance_symbol];
622621
CUTE_ASEPRITE_CHECK(s->out - backwards_distance >= s->begin, "Attempted to write before out buffer (invalid backwards distance).");
623622
CUTE_ASEPRITE_CHECK(s->out + length <= s->out_end, "Attempted to overwrite out buffer while outputting a string.");
624623
char* src = s->out - backwards_distance;
@@ -628,7 +627,7 @@ static int s_block(deflate_t* s)
628627
switch (backwards_distance)
629628
{
630629
case 1: // very common in images
631-
CUTE_ASEPRITE_MEMSET(dst, *src, length);
630+
CUTE_ASEPRITE_MEMSET(dst, *src, (size_t)length);
632631
break;
633632
default: while (length--) *dst++ = *src++;
634633
}
@@ -646,6 +645,7 @@ static int s_block(deflate_t* s)
646645
// 3.2.3
647646
static int s_inflate(const void* in, int in_bytes, void* out, int out_bytes, void* mem_ctx)
648647
{
648+
CUTE_ASEPRITE_UNUSED(mem_ctx);
649649
deflate_t* s = (deflate_t*)CUTE_ASEPRITE_ALLOC(sizeof(deflate_t), mem_ctx);
650650
s->bits = 0;
651651
s->count = 0;
@@ -664,7 +664,7 @@ static int s_inflate(const void* in, int in_bytes, void* out, int out_bytes, voi
664664
s->final_word_available = last_bytes ? 1 : 0;
665665
s->final_word = 0;
666666
for(int i = 0; i < last_bytes; i++)
667-
s->final_word |= ((uint8_t*)in)[in_bytes - last_bytes+i] << (i * 8);
667+
s->final_word |= ((uint8_t*)in)[in_bytes - last_bytes + i] << (i * 8);
668668

669669
s->count = first_bytes * 8;
670670

@@ -673,11 +673,11 @@ static int s_inflate(const void* in, int in_bytes, void* out, int out_bytes, voi
673673
s->begin = (char*)out;
674674

675675
int count = 0;
676-
int bfinal;
676+
uint32_t bfinal;
677677
do
678678
{
679679
bfinal = s_read_bits(s, 1);
680-
int btype = s_read_bits(s, 2);
680+
uint32_t btype = s_read_bits(s, 2);
681681

682682
switch (btype)
683683
{
@@ -747,6 +747,8 @@ static uint32_t s_read_uint32(ase_state_t* s)
747747
return value;
748748
}
749749

750+
#ifdef CUTE_ASPRITE_S_READ_UINT64
751+
// s_read_uint64() is not currently used.
750752
static uint64_t s_read_uint64(ase_state_t* s)
751753
{
752754
CUTE_ASEPRITE_ASSERT(s->in <= s->end + sizeof(uint64_t));
@@ -763,23 +765,27 @@ static uint64_t s_read_uint64(ase_state_t* s)
763765
*p += 8;
764766
return value;
765767
}
768+
#endif
766769

767770
static int16_t s_read_int16(ase_state_t* s) { return (int16_t)s_read_uint16(s); }
768771
static int16_t s_read_int32(ase_state_t* s) { return (int32_t)s_read_uint32(s); }
769772

773+
#ifdef CUTE_ASPRITE_S_READ_BYTES
774+
// s_read_bytes() is not currently used.
770775
static void s_read_bytes(ase_state_t* s, uint8_t* bytes, int num_bytes)
771776
{
772777
for (int i = 0; i < num_bytes; ++i) {
773778
bytes[i] = s_read_uint8(s);
774779
}
775780
}
781+
#endif
776782

777783
static const char* s_read_string(ase_state_t* s)
778784
{
779785
int len = (int)s_read_uint16(s);
780786
char* bytes = (char*)CUTE_ASEPRITE_ALLOC(len + 1, s->mem_ctx);
781787
for (int i = 0; i < len; ++i) {
782-
bytes[i] = s_read_uint8(s);
788+
bytes[i] = (char)s_read_uint8(s);
783789
}
784790
bytes[len] = 0;
785791
return bytes;
@@ -836,7 +842,7 @@ static int s_mul_un8(int a, int b)
836842

837843
static ase_color_t s_blend(ase_color_t src, ase_color_t dst, uint8_t opacity)
838844
{
839-
src.a = s_mul_un8(src.a, opacity);
845+
src.a = (uint8_t)s_mul_un8(src.a, opacity);
840846
int a = src.a + dst.a - s_mul_un8(src.a, dst.a);
841847
int r, g, b;
842848
if (a == 0) {
@@ -919,8 +925,8 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct
919925
ase->grid_h = (int)s_read_uint16(s);
920926
s_skip(s, 84); // For future use (set to zero).
921927

922-
ase->frames = (ase_frame_t*)CUTE_ASEPRITE_ALLOC(sizeof(ase_frame_t) * ase->frame_count, mem_ctx);
923-
CUTE_ASEPRITE_MEMSET(ase->frames, 0, sizeof(ase_frame_t) * ase->frame_count);
928+
ase->frames = (ase_frame_t*)CUTE_ASEPRITE_ALLOC((int)(sizeof(ase_frame_t)) * ase->frame_count, mem_ctx);
929+
CUTE_ASEPRITE_MEMSET(ase->frames, 0, sizeof(ase_frame_t) * (size_t)ase->frame_count);
924930

925931
ase_udata_t* last_udata = NULL;
926932

@@ -935,13 +941,13 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct
935941
frame->duration_milliseconds = s_read_uint16(s);
936942
if (frame->duration_milliseconds == 0) frame->duration_milliseconds = speed;
937943
s_skip(s, 2); // For future use (set to zero).
938-
int new_chunk_count = s_read_uint32(s);
939-
if (new_chunk_count) chunk_count = new_chunk_count;
944+
uint32_t new_chunk_count = s_read_uint32(s);
945+
if (new_chunk_count) chunk_count = (int)new_chunk_count;
940946

941947
for (int j = 0; j < chunk_count; ++j) {
942948
uint32_t chunk_size = s_read_uint32(s);
943949
uint16_t chunk_type = s_read_uint16(s);
944-
chunk_size -= sizeof(uint32_t) + sizeof(uint16_t);
950+
chunk_size -= (uint32_t)(sizeof(uint32_t) + sizeof(uint16_t));
945951
uint8_t* chunk_start = s->in;
946952

947953
switch (chunk_type) {
@@ -978,7 +984,7 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct
978984
cel->w = s_read_uint16(s);
979985
cel->h = s_read_uint16(s);
980986
cel->pixels = CUTE_ASEPRITE_ALLOC(cel->w * cel->h * bpp, mem_ctx);
981-
CUTE_ASEPRITE_MEMCPY(cel->pixels, s->in, cel->w * cel->h * bpp);
987+
CUTE_ASEPRITE_MEMCPY(cel->pixels, s->in, (size_t)(cel->w * cel->h * bpp));
982988
s_skip(s, cel->w * cel->h * bpp);
983989
break;
984990

@@ -993,7 +999,7 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct
993999
cel->h = s_read_uint16(s);
9941000
int zlib_byte0 = s_read_uint8(s);
9951001
int zlib_byte1 = s_read_uint8(s);
996-
int deflate_bytes = chunk_size - (int)(s->in - chunk_start);
1002+
int deflate_bytes = (int)chunk_size - (int)(s->in - chunk_start);
9971003
void* pixels = s->in;
9981004
CUTE_ASEPRITE_ASSERT((zlib_byte0 & 0x0F) == 0x08); // Only zlib compression method (RFC 1950) is supported.
9991005
CUTE_ASEPRITE_ASSERT((zlib_byte0 & 0xF0) <= 0x70); // Innapropriate window size detected.
@@ -1059,8 +1065,8 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct
10591065
case 0x2019: // Palette chunk.
10601066
{
10611067
ase->palette.entry_count = (int)s_read_uint32(s);
1062-
int first_index = s_read_uint32(s);
1063-
int last_index = s_read_uint32(s);
1068+
int first_index = (int)s_read_uint32(s);
1069+
int last_index = (int)s_read_uint32(s);
10641070
s_skip(s, 8); // For future (set to zero).
10651071
for (int k = first_index; k <= last_index; ++k) {
10661072
int has_name = s_read_uint16(s);
@@ -1087,7 +1093,6 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct
10871093
last_udata->text = s_read_string(s);
10881094
}
10891095
if (flags & 2) {
1090-
last_udata->has_color;
10911096
last_udata->color.r = s_read_uint8(s);
10921097
last_udata->color.g = s_read_uint8(s);
10931098
last_udata->color.b = s_read_uint8(s);
@@ -1098,8 +1103,8 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct
10981103

10991104
case 0x2022: // Slice chunk.
11001105
{
1101-
int slice_count = s_read_uint32(s);
1102-
int flags = s_read_uint32(s);
1106+
int slice_count = (int)s_read_uint32(s);
1107+
int flags = (int)s_read_uint32(s);
11031108
s_skip(s, sizeof(uint32_t)); // Reserved.
11041109
const char* name = s_read_string(s);
11051110
for (int k = 0; k < (int)slice_count; ++k) {
@@ -1130,7 +1135,7 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct
11301135
} break;
11311136

11321137
default:
1133-
s_skip(s, chunk_size);
1138+
s_skip(s, (int)chunk_size);
11341139
break;
11351140
}
11361141
}
@@ -1139,8 +1144,8 @@ ase_t* cute_aseprite_load_from_memory(const void* memory, int size, void* mem_ct
11391144
// Blend all cel pixels into each of their respective frames, for convenience.
11401145
for (int i = 0; i < ase->frame_count; ++i) {
11411146
ase_frame_t* frame = ase->frames + i;
1142-
frame->pixels = (ase_color_t*)CUTE_ASEPRITE_ALLOC(sizeof(ase_color_t) * ase->w * ase->h, mem_ctx);
1143-
CUTE_ASEPRITE_MEMSET(frame->pixels, 0, sizeof(ase_color_t) * ase->w * ase->h);
1147+
frame->pixels = (ase_color_t*)CUTE_ASEPRITE_ALLOC((int)(sizeof(ase_color_t)) * ase->w * ase->h, mem_ctx);
1148+
CUTE_ASEPRITE_MEMSET(frame->pixels, 0, sizeof(ase_color_t) * (size_t)ase->w * (size_t)ase->h);
11441149
ase_color_t* dst = frame->pixels;
11451150
for (int j = 0; j < frame->cel_count; ++j) {
11461151
ase_cel_t* cel = frame->cels + j;

0 commit comments

Comments
 (0)