|  |  |  | @ -105,7 +105,7 @@ RECENT REVISION HISTORY: | 
			
		
	
		
			
				
					|  |  |  |  |     Oriol Ferrer Mesia      Josh Tobin         Matthew Gregan     github:phprus | 
			
		
	
		
			
				
					|  |  |  |  |     Julian Raschke          Gregory Mullen     Baldur Karlsson    github:poppolopoppo | 
			
		
	
		
			
				
					|  |  |  |  |     Christian Floisand      Kevin Schmidt      JR Smith           github:darealshinji | 
			
		
	
		
			
				
					|  |  |  |  |     Blazej Dariusz Roszkowski                                     github:Michaelangel007 | 
			
		
	
		
			
				
					|  |  |  |  |     Brad Weinberger         Blazej Dariusz Roszkowski             github:Michaelangel007 | 
			
		
	
		
			
				
					|  |  |  |  | */ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifndef STBI_INCLUDE_STB_IMAGE_H | 
			
		
	
	
		
			
				
					|  |  |  | @ -924,11 +924,13 @@ static int stbi__mul2sizes_valid(int a, int b) | 
			
		
	
		
			
				
					|  |  |  |  |    return a <= INT_MAX/b; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) | 
			
		
	
		
			
				
					|  |  |  |  | // returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow
 | 
			
		
	
		
			
				
					|  |  |  |  | static int stbi__mad2sizes_valid(int a, int b, int add) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow
 | 
			
		
	
		
			
				
					|  |  |  |  | static int stbi__mad3sizes_valid(int a, int b, int c, int add) | 
			
		
	
	
		
			
				
					|  |  |  | @ -946,12 +948,14 @@ static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) | 
			
		
	
		
			
				
					|  |  |  |  | // mallocs with size overflow checking
 | 
			
		
	
		
			
				
					|  |  |  |  | static void *stbi__malloc_mad2(int a, int b, int add) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    if (!stbi__mad2sizes_valid(a, b, add)) return NULL; | 
			
		
	
		
			
				
					|  |  |  |  |    return stbi__malloc(a*b + add); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static void *stbi__malloc_mad3(int a, int b, int c, int add) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
	
		
			
				
					|  |  |  | @ -1477,6 +1481,9 @@ stbi_inline static stbi_uc stbi__get8(stbi__context *s) | 
			
		
	
		
			
				
					|  |  |  |  |    return 0; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | stbi_inline static int stbi__at_eof(stbi__context *s) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    if (s->io.read) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -1488,7 +1495,11 @@ stbi_inline static int stbi__at_eof(stbi__context *s) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |    return s->img_buffer >= s->img_buffer_end; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | static void stbi__skip(stbi__context *s, int n) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    if (n < 0) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -1505,7 +1516,11 @@ static void stbi__skip(stbi__context *s, int n) | 
			
		
	
		
			
				
					|  |  |  |  |    } | 
			
		
	
		
			
				
					|  |  |  |  |    s->img_buffer += n; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    if (s->io.read) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -1529,18 +1544,27 @@ static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) | 
			
		
	
		
			
				
					|  |  |  |  |    } else | 
			
		
	
		
			
				
					|  |  |  |  |       return 0; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | static int stbi__get16be(stbi__context *s) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    int z = stbi__get8(s); | 
			
		
	
		
			
				
					|  |  |  |  |    return (z << 8) + stbi__get8(s); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | static stbi__uint32 stbi__get32be(stbi__context *s) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    stbi__uint32 z = stbi__get16be(s); | 
			
		
	
		
			
				
					|  |  |  |  |    return (z << 16) + stbi__get16be(s); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1562,7 +1586,9 @@ static stbi__uint32 stbi__get32le(stbi__context *s) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #define STBI__BYTECAST(x)  ((stbi_uc) ((x) & 255))  // truncate int to byte without warnings
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | //////////////////////////////////////////////////////////////////////////////
 | 
			
		
	
		
			
				
					|  |  |  |  | //
 | 
			
		
	
		
			
				
					|  |  |  |  | //  generic converter from built-in img_n to req_comp
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1578,7 +1604,11 @@ static stbi_uc stbi__compute_y(int r, int g, int b) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    return (stbi_uc) (((r*77) + (g*150) +  (29*b)) >> 8); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    int i,j; | 
			
		
	
	
		
			
				
					|  |  |  | @ -1622,12 +1652,20 @@ static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int r | 
			
		
	
		
			
				
					|  |  |  |  |    STBI_FREE(data); | 
			
		
	
		
			
				
					|  |  |  |  |    return good; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | static stbi__uint16 stbi__compute_y_16(int r, int g, int b) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    return (stbi__uint16) (((r*77) + (g*150) +  (29*b)) >> 8); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) | 
			
		
	
		
			
				
					|  |  |  |  | // nothing
 | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |    int i,j; | 
			
		
	
	
		
			
				
					|  |  |  | @ -1671,6 +1709,7 @@ static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int r | 
			
		
	
		
			
				
					|  |  |  |  |    STBI_FREE(data); | 
			
		
	
		
			
				
					|  |  |  |  |    return good; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifndef STBI_NO_LINEAR | 
			
		
	
		
			
				
					|  |  |  |  | static float   *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) | 
			
		
	
	
		
			
				
					|  |  |  | 
 |