From 8d0c3e84f244b1398666800beb65c11d5634c138 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Fri, 5 Mar 2021 11:23:48 +0100 Subject: [PATCH] make cropng compile with mingw. --- cropng.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/cropng.c b/cropng.c index 36780a1..51446da 100644 --- a/cropng.c +++ b/cropng.c @@ -1,12 +1,21 @@ -#define _DEFAULT_SOURCE #include #include #include #include #include -#include #include +uint32_t endianswap( uint32_t n ) +{ + // if we're in a big endian system, we don't need this + uint16_t testme = 0x1234; + if ( *(uint8_t*)(&testme) == 0x12 ) return n; + uint32_t on; + for ( int i=0; i<4; i++ ) + *(((uint8_t*)(&on))+i) = *(((uint8_t*)(&n))+(3-i)); + return on; +} + const char* fmtname( int bd, int col ) { if ( col == PNG_COLOR_TYPE_PALETTE ) @@ -118,13 +127,13 @@ int loadpng( const char *fname, uint8_t **idata, uint32_t *w, uint32_t *h, int32 if ( memcmp(unk[i].name,"grAb",4) ) continue; if ( unk[i].size != 8 ) { - fprintf(stderr," grAb chunk has invalid size '%lu' ('8' expected).\n",unk[i].size); + fprintf(stderr," grAb chunk has invalid size '%zu' ('8' expected).\n",unk[i].size); png_destroy_read_struct(&pngp,&infp,0); fclose(pf); return 0; } - *x = be32toh(*(uint32_t*)unk[i].data); - *y = be32toh(*(uint32_t*)(unk[i].data+4)); + *x = endianswap(*(uint32_t*)unk[i].data); + *y = endianswap(*(uint32_t*)(unk[i].data+4)); } if ( *x || *y ) printf(" Read %ux%u%s image with offsets %+d,%+d.\n",*w,*h,fmtname(*bd,*col),*x,*y); else printf(" Read %ux%u%s image.\n",*w,*h,fmtname(*bd,*col)); @@ -178,8 +187,8 @@ int savepng( const char *fname, uint8_t *odata, uint32_t w, uint32_t h, int32_t if ( x || y ) { uint32_t grabs[2]; - grabs[0] = htobe32(x); - grabs[1] = htobe32(y); + grabs[0] = endianswap(x); + grabs[1] = endianswap(y); png_unknown_chunk grab = { .name = "grAb",