| @@ -277,7 +277,6 @@ OBJECTS := \ | |||||
| $(OBJDIR)/transupp.o \ | $(OBJDIR)/transupp.o \ | ||||
| $(OBJDIR)/png.o \ | $(OBJDIR)/png.o \ | ||||
| $(OBJDIR)/pngerror.o \ | $(OBJDIR)/pngerror.o \ | ||||
| $(OBJDIR)/pnggccrd.o \ | |||||
| $(OBJDIR)/pngget.o \ | $(OBJDIR)/pngget.o \ | ||||
| $(OBJDIR)/pngmem.o \ | $(OBJDIR)/pngmem.o \ | ||||
| $(OBJDIR)/pngpread.o \ | $(OBJDIR)/pngpread.o \ | ||||
| @@ -287,7 +286,6 @@ OBJECTS := \ | |||||
| $(OBJDIR)/pngrutil.o \ | $(OBJDIR)/pngrutil.o \ | ||||
| $(OBJDIR)/pngset.o \ | $(OBJDIR)/pngset.o \ | ||||
| $(OBJDIR)/pngtrans.o \ | $(OBJDIR)/pngtrans.o \ | ||||
| $(OBJDIR)/pngvcrd.o \ | |||||
| $(OBJDIR)/pngwio.o \ | $(OBJDIR)/pngwio.o \ | ||||
| $(OBJDIR)/pngwrite.o \ | $(OBJDIR)/pngwrite.o \ | ||||
| $(OBJDIR)/pngwtran.o \ | $(OBJDIR)/pngwtran.o \ | ||||
| @@ -1643,11 +1641,6 @@ $(OBJDIR)/pngerror.o: ../../src/juce_appframework/gui/graphics/imaging/image_fil | |||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CC) $(CFLAGS) -o $@ -c $< | @$(CC) $(CFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/pnggccrd.o: ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pnggccrd.c | |||||
| -@$(CMD_MKOBJDIR) | |||||
| @echo $(notdir $<) | |||||
| @$(CC) $(CFLAGS) -o $@ -c $< | |||||
| $(OBJDIR)/pngget.o: ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngget.c | $(OBJDIR)/pngget.o: ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngget.c | ||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @@ -1693,11 +1686,6 @@ $(OBJDIR)/pngtrans.o: ../../src/juce_appframework/gui/graphics/imaging/image_fil | |||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @$(CC) $(CFLAGS) -o $@ -c $< | @$(CC) $(CFLAGS) -o $@ -c $< | ||||
| $(OBJDIR)/pngvcrd.o: ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngvcrd.c | |||||
| -@$(CMD_MKOBJDIR) | |||||
| @echo $(notdir $<) | |||||
| @$(CC) $(CFLAGS) -o $@ -c $< | |||||
| $(OBJDIR)/pngwio.o: ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwio.c | $(OBJDIR)/pngwio.o: ../../src/juce_appframework/gui/graphics/imaging/image_file_formats/pnglib/pngwio.c | ||||
| -@$(CMD_MKOBJDIR) | -@$(CMD_MKOBJDIR) | ||||
| @echo $(notdir $<) | @echo $(notdir $<) | ||||
| @@ -3183,10 +3183,6 @@ | |||||
| RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngerror.c" | RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngerror.c" | ||||
| > | > | ||||
| </File> | </File> | ||||
| <File | |||||
| RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pnggccrd.c" | |||||
| > | |||||
| </File> | |||||
| <File | <File | ||||
| RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngget.c" | RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngget.c" | ||||
| > | > | ||||
| @@ -3223,10 +3219,6 @@ | |||||
| RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngtrans.c" | RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngtrans.c" | ||||
| > | > | ||||
| </File> | </File> | ||||
| <File | |||||
| RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngvcrd.c" | |||||
| > | |||||
| </File> | |||||
| <File | <File | ||||
| RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngwio.c" | RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngwio.c" | ||||
| > | > | ||||
| @@ -19,6 +19,7 @@ Changelist for version 1.45 | |||||
| - refactored the OpenGLComponent, adding new classes OpenGLPixelFormat and OpenGLContext | - refactored the OpenGLComponent, adding new classes OpenGLPixelFormat and OpenGLContext | ||||
| - A component's KeyListeners are now called before its keyPressed method, so if you want to intercept keys and stop them getting sent to the component, you can add a keylistener and comsume the events. | - A component's KeyListeners are now called before its keyPressed method, so if you want to intercept keys and stop them getting sent to the component, you can add a keylistener and comsume the events. | ||||
| - added an option to choose a Midi output device to the AudioDeviceManager and AudioDeviceSelectorComponent | - added an option to choose a Midi output device to the AudioDeviceManager and AudioDeviceSelectorComponent | ||||
| - updated the included version of libpng | |||||
| ============================================================================== | ============================================================================== | ||||
| Changelist for version 1.44 | Changelist for version 1.44 | ||||
| @@ -8,8 +8,8 @@ COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: | |||||
| If you modify libpng you may insert additional notices immediately following | If you modify libpng you may insert additional notices immediately following | ||||
| this sentence. | this sentence. | ||||
| libpng version 1.2.6, December 3, 2004, is | |||||
| Copyright (c) 2004 Glenn Randers-Pehrson, and is | |||||
| libpng versions 1.2.6, August 15, 2004, through 1.2.21, October 4, 2007, are | |||||
| Copyright (c) 2004, 2006-2007 Glenn Randers-Pehrson, and are | |||||
| distributed according to the same disclaimer and license as libpng-1.2.5 | distributed according to the same disclaimer and license as libpng-1.2.5 | ||||
| with the following individual added to the list of Contributing Authors | with the following individual added to the list of Contributing Authors | ||||
| @@ -106,4 +106,4 @@ certification mark of the Open Source Initiative. | |||||
| Glenn Randers-Pehrson | Glenn Randers-Pehrson | ||||
| glennrp at users.sourceforge.net | glennrp at users.sourceforge.net | ||||
| December 3, 2004 | |||||
| October 4, 2007 | |||||
| @@ -1,295 +1,341 @@ | |||||
| /* pngerror.c - stub functions for i/o and memory allocation | |||||
| * | |||||
| * libpng version 1.2.8 - December 3, 2004 | |||||
| * For conditions of distribution and use, see copyright notice in png.h | |||||
| * Copyright (c) 1998-2004 Glenn Randers-Pehrson | |||||
| * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | |||||
| * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | |||||
| * | |||||
| * This file provides a location for all error handling. Users who | |||||
| * need special error handling are expected to write replacement functions | |||||
| * and use png_set_error_fn() to use those functions. See the instructions | |||||
| * at each function. | |||||
| */ | |||||
| #define PNG_INTERNAL | |||||
| #include "png.h" | |||||
| static void /* PRIVATE */ | |||||
| png_default_error PNGARG((png_structp png_ptr, | |||||
| png_const_charp error_message)); | |||||
| static void /* PRIVATE */ | |||||
| png_default_warning PNGARG((png_structp png_ptr, | |||||
| png_const_charp warning_message)); | |||||
| /* This function is called whenever there is a fatal error. This function | |||||
| * should not be changed. If there is a need to handle errors differently, | |||||
| * you should supply a replacement error function and use png_set_error_fn() | |||||
| * to replace the error function at run-time. | |||||
| */ | |||||
| void PNGAPI | |||||
| png_error_nostring(png_structp png_ptr, png_const_charp error_message) | |||||
| { | |||||
| #ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| char msg[16]; | |||||
| if (png_ptr->flags&(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) | |||||
| { | |||||
| if (*error_message == '#') | |||||
| { | |||||
| int offset; | |||||
| for (offset=1; offset<15; offset++) | |||||
| if (*(error_message+offset) == ' ') | |||||
| break; | |||||
| if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT) | |||||
| { | |||||
| int i; | |||||
| for (i=0; i<offset-1; i++) | |||||
| msg[i]=error_message[i+1]; | |||||
| msg[i]='\0'; | |||||
| error_message=msg; | |||||
| } | |||||
| else | |||||
| error_message+=offset; | |||||
| } | |||||
| else | |||||
| { | |||||
| if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT) | |||||
| { | |||||
| msg[0]='0'; | |||||
| msg[1]='\0'; | |||||
| error_message=msg; | |||||
| } | |||||
| } | |||||
| } | |||||
| #endif | |||||
| if (png_ptr != NULL && png_ptr->error_fn != NULL) | |||||
| (*(png_ptr->error_fn))(png_ptr, error_message); | |||||
| /* If the custom handler doesn't exist, or if it returns, | |||||
| use the default handler, which will not return. */ | |||||
| png_default_error(png_ptr, error_message); | |||||
| } | |||||
| /* This function is called whenever there is a non-fatal error. This function | |||||
| * should not be changed. If there is a need to handle warnings differently, | |||||
| * you should supply a replacement warning function and use | |||||
| * png_set_error_fn() to replace the warning function at run-time. | |||||
| */ | |||||
| void PNGAPI | |||||
| png_warning_nostring(png_structp png_ptr, png_const_charp warning_message) | |||||
| { | |||||
| int offset = 0; | |||||
| #ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| if (png_ptr->flags&(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) | |||||
| #endif | |||||
| { | |||||
| if (*warning_message == '#') | |||||
| { | |||||
| for (offset=1; offset<15; offset++) | |||||
| if (*(warning_message+offset) == ' ') | |||||
| break; | |||||
| } | |||||
| } | |||||
| if (png_ptr != NULL && png_ptr->warning_fn != NULL) | |||||
| (*(png_ptr->warning_fn))(png_ptr, warning_message+offset); | |||||
| else | |||||
| png_default_warning(png_ptr, warning_message+offset); | |||||
| } | |||||
| /* These utilities are used internally to build an error message that relates | |||||
| * to the current chunk. The chunk name comes from png_ptr->chunk_name, | |||||
| * this is used to prefix the message. The message is limited in length | |||||
| * to 63 bytes, the name characters are output as hex digits wrapped in [] | |||||
| * if the character is invalid. | |||||
| */ | |||||
| #define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97)) | |||||
| static PNG_CONST char png_digit[16] = { | |||||
| '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', | |||||
| 'A', 'B', 'C', 'D', 'E', 'F' | |||||
| }; | |||||
| static void /* PRIVATE */ | |||||
| png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp | |||||
| error_message) | |||||
| { | |||||
| int iout = 0, iin = 0; | |||||
| while (iin < 4) | |||||
| { | |||||
| int c = png_ptr->chunk_name[iin++]; | |||||
| if (isnonalpha(c)) | |||||
| { | |||||
| buffer[iout++] = '['; | |||||
| buffer[iout++] = png_digit[(c & 0xf0) >> 4]; | |||||
| buffer[iout++] = png_digit[c & 0x0f]; | |||||
| buffer[iout++] = ']'; | |||||
| } | |||||
| else | |||||
| { | |||||
| buffer[iout++] = (png_byte)c; | |||||
| } | |||||
| } | |||||
| if (error_message == NULL) | |||||
| buffer[iout] = 0; | |||||
| else | |||||
| { | |||||
| buffer[iout++] = ':'; | |||||
| buffer[iout++] = ' '; | |||||
| png_strncpy(buffer+iout, error_message, 63); | |||||
| buffer[iout+63] = 0; | |||||
| } | |||||
| } | |||||
| void PNGAPI | |||||
| png_chunk_error_nostring(png_structp png_ptr, png_const_charp error_message) | |||||
| { | |||||
| char msg[18+64]; | |||||
| png_format_buffer(png_ptr, msg, error_message); | |||||
| png_error(png_ptr, msg); | |||||
| } | |||||
| void PNGAPI | |||||
| png_chunk_warning_nostring(png_structp png_ptr, png_const_charp warning_message) | |||||
| { | |||||
| char msg[18+64]; | |||||
| png_format_buffer(png_ptr, msg, warning_message); | |||||
| png_warning(png_ptr, msg); | |||||
| } | |||||
| /* This is the default error handling function. Note that replacements for | |||||
| * this function MUST NOT RETURN, or the program will likely crash. This | |||||
| * function is used by default, or if the program supplies NULL for the | |||||
| * error function pointer in png_set_error_fn(). | |||||
| */ | |||||
| static void /* PRIVATE */ | |||||
| png_default_error(png_structp png_ptr, png_const_charp error_message) | |||||
| { | |||||
| #ifndef PNG_NO_CONSOLE_IO | |||||
| #ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| if (*error_message == '#') | |||||
| { | |||||
| int offset; | |||||
| char error_number[16]; | |||||
| for (offset=0; offset<15; offset++) | |||||
| { | |||||
| error_number[offset] = *(error_message+offset+1); | |||||
| if (*(error_message+offset) == ' ') | |||||
| break; | |||||
| } | |||||
| if((offset > 1) && (offset < 15)) | |||||
| { | |||||
| error_number[offset-1]='\0'; | |||||
| fprintf(stderr, "libpng error no. %s: %s\n", error_number, | |||||
| error_message+offset); | |||||
| } | |||||
| else | |||||
| fprintf(stderr, "libpng error: %s, offset=%d\n", error_message,offset); | |||||
| } | |||||
| else | |||||
| #endif | |||||
| fprintf(stderr, "libpng error: %s\n", error_message); | |||||
| #endif | |||||
| #ifdef PNG_SETJMP_SUPPORTED | |||||
| # ifdef USE_FAR_KEYWORD | |||||
| { | |||||
| jmp_buf jmpbuf; | |||||
| png_memcpy(jmpbuf,png_ptr->jmpbuf,png_sizeof(jmp_buf)); | |||||
| longjmp(jmpbuf, 1); | |||||
| } | |||||
| # else | |||||
| longjmp(png_ptr->jmpbuf, 1); | |||||
| # endif | |||||
| #else | |||||
| /* make compiler happy */ ; | |||||
| if (png_ptr) | |||||
| PNG_ABORT(); | |||||
| #endif | |||||
| #ifdef PNG_NO_CONSOLE_IO | |||||
| /* make compiler happy */ ; | |||||
| if (&error_message != NULL) | |||||
| return; | |||||
| #endif | |||||
| } | |||||
| /* This function is called when there is a warning, but the library thinks | |||||
| * it can continue anyway. Replacement functions don't have to do anything | |||||
| * here if you don't want them to. In the default configuration, png_ptr is | |||||
| * not used, but it is passed in case it may be useful. | |||||
| */ | |||||
| static void /* PRIVATE */ | |||||
| png_default_warning(png_structp png_ptr, png_const_charp warning_message) | |||||
| { | |||||
| #ifndef PNG_NO_CONSOLE_IO | |||||
| # ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| if (*warning_message == '#') | |||||
| { | |||||
| int offset; | |||||
| char warning_number[16]; | |||||
| for (offset=0; offset<15; offset++) | |||||
| { | |||||
| warning_number[offset]=*(warning_message+offset+1); | |||||
| if (*(warning_message+offset) == ' ') | |||||
| break; | |||||
| } | |||||
| if((offset > 1) && (offset < 15)) | |||||
| { | |||||
| warning_number[offset-1]='\0'; | |||||
| fprintf(stderr, "libpng warning no. %s: %s\n", warning_number, | |||||
| warning_message+offset); | |||||
| } | |||||
| else | |||||
| fprintf(stderr, "libpng warning: %s\n", warning_message); | |||||
| } | |||||
| else | |||||
| # endif | |||||
| fprintf(stderr, "libpng warning: %s\n", warning_message); | |||||
| #else | |||||
| /* make compiler happy */ ; | |||||
| if (warning_message) | |||||
| return; | |||||
| #endif | |||||
| /* make compiler happy */ ; | |||||
| if (png_ptr) | |||||
| return; | |||||
| } | |||||
| /* This function is called when the application wants to use another method | |||||
| * of handling errors and warnings. Note that the error function MUST NOT | |||||
| * return to the calling routine or serious problems will occur. The return | |||||
| * method used in the default routine calls longjmp(png_ptr->jmpbuf, 1) | |||||
| */ | |||||
| void PNGAPI | |||||
| png_set_error_fn(png_structp png_ptr, png_voidp error_ptr, | |||||
| png_error_ptr error_fn, png_error_ptr warning_fn) | |||||
| { | |||||
| png_ptr->error_ptr = error_ptr; | |||||
| png_ptr->error_fn = error_fn; | |||||
| png_ptr->warning_fn = warning_fn; | |||||
| } | |||||
| /* This function returns a pointer to the error_ptr associated with the user | |||||
| * functions. The application should free any memory associated with this | |||||
| * pointer before png_write_destroy and png_read_destroy are called. | |||||
| */ | |||||
| png_voidp PNGAPI | |||||
| png_get_error_ptr(png_structp png_ptr) | |||||
| { | |||||
| return ((png_voidp)png_ptr->error_ptr); | |||||
| } | |||||
| #ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| void PNGAPI | |||||
| png_set_strip_error_numbers(png_structp png_ptr, png_uint_32 strip_mode) | |||||
| { | |||||
| if(png_ptr != NULL) | |||||
| { | |||||
| png_ptr->flags &= | |||||
| ((~(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode); | |||||
| } | |||||
| } | |||||
| #endif | |||||
| /* pngerror.c - stub functions for i/o and memory allocation | |||||
| * | |||||
| * Last changed in libpng 1.2.20 October 4, 2007 | |||||
| * For conditions of distribution and use, see copyright notice in png.h | |||||
| * Copyright (c) 1998-2007 Glenn Randers-Pehrson | |||||
| * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | |||||
| * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | |||||
| * | |||||
| * This file provides a location for all error handling. Users who | |||||
| * need special error handling are expected to write replacement functions | |||||
| * and use png_set_error_fn() to use those functions. See the instructions | |||||
| * at each function. | |||||
| */ | |||||
| #define PNG_INTERNAL | |||||
| #include "png.h" | |||||
| #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) | |||||
| static void /* PRIVATE */ | |||||
| png_default_error PNGARG((png_structp png_ptr, | |||||
| png_const_charp error_message)); | |||||
| #ifndef PNG_NO_WARNINGS | |||||
| static void /* PRIVATE */ | |||||
| png_default_warning PNGARG((png_structp png_ptr, | |||||
| png_const_charp warning_message)); | |||||
| #endif /* PNG_NO_WARNINGS */ | |||||
| /* This function is called whenever there is a fatal error. This function | |||||
| * should not be changed. If there is a need to handle errors differently, | |||||
| * you should supply a replacement error function and use png_set_error_fn() | |||||
| * to replace the error function at run-time. | |||||
| */ | |||||
| #ifndef PNG_NO_ERROR_TEXT | |||||
| void PNGAPI | |||||
| png_error(png_structp png_ptr, png_const_charp error_message) | |||||
| { | |||||
| #ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| char msg[16]; | |||||
| if (png_ptr != NULL) | |||||
| { | |||||
| if (png_ptr->flags& | |||||
| (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) | |||||
| { | |||||
| if (*error_message == '#') | |||||
| { | |||||
| int offset; | |||||
| for (offset=1; offset<15; offset++) | |||||
| if (*(error_message+offset) == ' ') | |||||
| break; | |||||
| if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT) | |||||
| { | |||||
| int i; | |||||
| for (i=0; i<offset-1; i++) | |||||
| msg[i]=error_message[i+1]; | |||||
| msg[i]='\0'; | |||||
| error_message=msg; | |||||
| } | |||||
| else | |||||
| error_message+=offset; | |||||
| } | |||||
| else | |||||
| { | |||||
| if (png_ptr->flags&PNG_FLAG_STRIP_ERROR_TEXT) | |||||
| { | |||||
| msg[0]='0'; | |||||
| msg[1]='\0'; | |||||
| error_message=msg; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| #endif | |||||
| if (png_ptr != NULL && png_ptr->error_fn != NULL) | |||||
| (*(png_ptr->error_fn))(png_ptr, error_message); | |||||
| /* If the custom handler doesn't exist, or if it returns, | |||||
| use the default handler, which will not return. */ | |||||
| png_default_error(png_ptr, error_message); | |||||
| } | |||||
| #else | |||||
| void PNGAPI | |||||
| png_err(png_structp png_ptr) | |||||
| { | |||||
| if (png_ptr != NULL && png_ptr->error_fn != NULL) | |||||
| (*(png_ptr->error_fn))(png_ptr, '\0'); | |||||
| /* If the custom handler doesn't exist, or if it returns, | |||||
| use the default handler, which will not return. */ | |||||
| png_default_error(png_ptr, '\0'); | |||||
| } | |||||
| #endif /* PNG_NO_ERROR_TEXT */ | |||||
| #ifndef PNG_NO_WARNINGS | |||||
| /* This function is called whenever there is a non-fatal error. This function | |||||
| * should not be changed. If there is a need to handle warnings differently, | |||||
| * you should supply a replacement warning function and use | |||||
| * png_set_error_fn() to replace the warning function at run-time. | |||||
| */ | |||||
| void PNGAPI | |||||
| png_warning(png_structp png_ptr, png_const_charp warning_message) | |||||
| { | |||||
| int offset = 0; | |||||
| if (png_ptr != NULL) | |||||
| { | |||||
| #ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| if (png_ptr->flags& | |||||
| (PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) | |||||
| #endif | |||||
| { | |||||
| if (*warning_message == '#') | |||||
| { | |||||
| for (offset=1; offset<15; offset++) | |||||
| if (*(warning_message+offset) == ' ') | |||||
| break; | |||||
| } | |||||
| } | |||||
| if (png_ptr != NULL && png_ptr->warning_fn != NULL) | |||||
| (*(png_ptr->warning_fn))(png_ptr, warning_message+offset); | |||||
| } | |||||
| else | |||||
| png_default_warning(png_ptr, warning_message+offset); | |||||
| } | |||||
| #endif /* PNG_NO_WARNINGS */ | |||||
| /* These utilities are used internally to build an error message that relates | |||||
| * to the current chunk. The chunk name comes from png_ptr->chunk_name, | |||||
| * this is used to prefix the message. The message is limited in length | |||||
| * to 63 bytes, the name characters are output as hex digits wrapped in [] | |||||
| * if the character is invalid. | |||||
| */ | |||||
| #define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97)) | |||||
| static PNG_CONST char png_digit[16] = { | |||||
| '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', | |||||
| 'A', 'B', 'C', 'D', 'E', 'F' | |||||
| }; | |||||
| #if !defined(PNG_NO_WARNINGS) || !defined(PNG_NO_ERROR_TEXT) | |||||
| static void /* PRIVATE */ | |||||
| png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp | |||||
| error_message) | |||||
| { | |||||
| int iout = 0, iin = 0; | |||||
| while (iin < 4) | |||||
| { | |||||
| int c = png_ptr->chunk_name[iin++]; | |||||
| if (isnonalpha(c)) | |||||
| { | |||||
| buffer[iout++] = '['; | |||||
| buffer[iout++] = png_digit[(c & 0xf0) >> 4]; | |||||
| buffer[iout++] = png_digit[c & 0x0f]; | |||||
| buffer[iout++] = ']'; | |||||
| } | |||||
| else | |||||
| { | |||||
| buffer[iout++] = (png_byte)c; | |||||
| } | |||||
| } | |||||
| if (error_message == NULL) | |||||
| buffer[iout] = 0; | |||||
| else | |||||
| { | |||||
| buffer[iout++] = ':'; | |||||
| buffer[iout++] = ' '; | |||||
| png_strncpy(buffer+iout, error_message, 63); | |||||
| buffer[iout+63] = 0; | |||||
| } | |||||
| } | |||||
| #ifdef PNG_READ_SUPPORTED | |||||
| void PNGAPI | |||||
| png_chunk_error(png_structp png_ptr, png_const_charp error_message) | |||||
| { | |||||
| char msg[18+64]; | |||||
| if (png_ptr == NULL) | |||||
| png_error(png_ptr, error_message); | |||||
| else | |||||
| { | |||||
| png_format_buffer(png_ptr, msg, error_message); | |||||
| png_error(png_ptr, msg); | |||||
| } | |||||
| } | |||||
| #endif /* PNG_READ_SUPPORTED */ | |||||
| #endif /* !defined(PNG_NO_WARNINGS) || !defined(PNG_NO_ERROR_TEXT) */ | |||||
| #ifndef PNG_NO_WARNINGS | |||||
| void PNGAPI | |||||
| png_chunk_warning(png_structp png_ptr, png_const_charp warning_message) | |||||
| { | |||||
| char msg[18+64]; | |||||
| if (png_ptr == NULL) | |||||
| png_warning(png_ptr, warning_message); | |||||
| else | |||||
| { | |||||
| png_format_buffer(png_ptr, msg, warning_message); | |||||
| png_warning(png_ptr, msg); | |||||
| } | |||||
| } | |||||
| #endif /* PNG_NO_WARNINGS */ | |||||
| /* This is the default error handling function. Note that replacements for | |||||
| * this function MUST NOT RETURN, or the program will likely crash. This | |||||
| * function is used by default, or if the program supplies NULL for the | |||||
| * error function pointer in png_set_error_fn(). | |||||
| */ | |||||
| static void /* PRIVATE */ | |||||
| png_default_error(png_structp png_ptr, png_const_charp error_message) | |||||
| { | |||||
| #ifndef PNG_NO_CONSOLE_IO | |||||
| #ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| if (*error_message == '#') | |||||
| { | |||||
| int offset; | |||||
| char error_number[16]; | |||||
| for (offset=0; offset<15; offset++) | |||||
| { | |||||
| error_number[offset] = *(error_message+offset+1); | |||||
| if (*(error_message+offset) == ' ') | |||||
| break; | |||||
| } | |||||
| if((offset > 1) && (offset < 15)) | |||||
| { | |||||
| error_number[offset-1]='\0'; | |||||
| fprintf(stderr, "libpng error no. %s: %s\n", error_number, | |||||
| error_message+offset); | |||||
| } | |||||
| else | |||||
| fprintf(stderr, "libpng error: %s, offset=%d\n", error_message,offset); | |||||
| } | |||||
| else | |||||
| #endif | |||||
| fprintf(stderr, "libpng error: %s\n", error_message); | |||||
| #endif | |||||
| #ifdef PNG_SETJMP_SUPPORTED | |||||
| if (png_ptr) | |||||
| { | |||||
| # ifdef USE_FAR_KEYWORD | |||||
| { | |||||
| jmp_buf jmpbuf; | |||||
| png_memcpy(jmpbuf, png_ptr->jmpbuf, png_sizeof(jmp_buf)); | |||||
| longjmp(jmpbuf, 1); | |||||
| } | |||||
| # else | |||||
| longjmp(png_ptr->jmpbuf, 1); | |||||
| # endif | |||||
| } | |||||
| #else | |||||
| PNG_ABORT(); | |||||
| #endif | |||||
| #ifdef PNG_NO_CONSOLE_IO | |||||
| error_message = error_message; /* make compiler happy */ | |||||
| #endif | |||||
| } | |||||
| #ifndef PNG_NO_WARNINGS | |||||
| /* This function is called when there is a warning, but the library thinks | |||||
| * it can continue anyway. Replacement functions don't have to do anything | |||||
| * here if you don't want them to. In the default configuration, png_ptr is | |||||
| * not used, but it is passed in case it may be useful. | |||||
| */ | |||||
| static void /* PRIVATE */ | |||||
| png_default_warning(png_structp png_ptr, png_const_charp warning_message) | |||||
| { | |||||
| #ifndef PNG_NO_CONSOLE_IO | |||||
| # ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| if (*warning_message == '#') | |||||
| { | |||||
| int offset; | |||||
| char warning_number[16]; | |||||
| for (offset=0; offset<15; offset++) | |||||
| { | |||||
| warning_number[offset]=*(warning_message+offset+1); | |||||
| if (*(warning_message+offset) == ' ') | |||||
| break; | |||||
| } | |||||
| if((offset > 1) && (offset < 15)) | |||||
| { | |||||
| warning_number[offset-1]='\0'; | |||||
| fprintf(stderr, "libpng warning no. %s: %s\n", warning_number, | |||||
| warning_message+offset); | |||||
| } | |||||
| else | |||||
| fprintf(stderr, "libpng warning: %s\n", warning_message); | |||||
| } | |||||
| else | |||||
| # endif | |||||
| fprintf(stderr, "libpng warning: %s\n", warning_message); | |||||
| #else | |||||
| warning_message = warning_message; /* make compiler happy */ | |||||
| #endif | |||||
| png_ptr = png_ptr; /* make compiler happy */ | |||||
| } | |||||
| #endif /* PNG_NO_WARNINGS */ | |||||
| /* This function is called when the application wants to use another method | |||||
| * of handling errors and warnings. Note that the error function MUST NOT | |||||
| * return to the calling routine or serious problems will occur. The return | |||||
| * method used in the default routine calls longjmp(png_ptr->jmpbuf, 1) | |||||
| */ | |||||
| void PNGAPI | |||||
| png_set_error_fn(png_structp png_ptr, png_voidp error_ptr, | |||||
| png_error_ptr error_fn, png_error_ptr warning_fn) | |||||
| { | |||||
| if (png_ptr == NULL) | |||||
| return; | |||||
| png_ptr->error_ptr = error_ptr; | |||||
| png_ptr->error_fn = error_fn; | |||||
| png_ptr->warning_fn = warning_fn; | |||||
| } | |||||
| /* This function returns a pointer to the error_ptr associated with the user | |||||
| * functions. The application should free any memory associated with this | |||||
| * pointer before png_write_destroy and png_read_destroy are called. | |||||
| */ | |||||
| png_voidp PNGAPI | |||||
| png_get_error_ptr(png_structp png_ptr) | |||||
| { | |||||
| if (png_ptr == NULL) | |||||
| return NULL; | |||||
| return ((png_voidp)png_ptr->error_ptr); | |||||
| } | |||||
| #ifdef PNG_ERROR_NUMBERS_SUPPORTED | |||||
| void PNGAPI | |||||
| png_set_strip_error_numbers(png_structp png_ptr, png_uint_32 strip_mode) | |||||
| { | |||||
| if(png_ptr != NULL) | |||||
| { | |||||
| png_ptr->flags &= | |||||
| ((~(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode); | |||||
| } | |||||
| } | |||||
| #endif | |||||
| #endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */ | |||||
| @@ -1,161 +1,167 @@ | |||||
| /* pngrio.c - functions for data input | |||||
| * | |||||
| * libpng 1.2.8 - December 3, 2004 | |||||
| * For conditions of distribution and use, see copyright notice in png.h | |||||
| * Copyright (c) 1998-2004 Glenn Randers-Pehrson | |||||
| * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | |||||
| * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | |||||
| * | |||||
| * This file provides a location for all input. Users who need | |||||
| * special handling are expected to write a function that has the same | |||||
| * arguments as this and performs a similar function, but that possibly | |||||
| * has a different input method. Note that you shouldn't change this | |||||
| * function, but rather write a replacement function and then make | |||||
| * libpng use it at run time with png_set_read_fn(...). | |||||
| */ | |||||
| #define PNG_INTERNAL | |||||
| #include "png.h" | |||||
| /* Read the data from whatever input you are using. The default routine | |||||
| reads from a file pointer. Note that this routine sometimes gets called | |||||
| with very small lengths, so you should implement some kind of simple | |||||
| buffering if you are using unbuffered reads. This should never be asked | |||||
| to read more then 64K on a 16 bit machine. */ | |||||
| void /* PRIVATE */ | |||||
| png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| png_debug1(4,"reading %d bytes\n", (int)length); | |||||
| if (png_ptr->read_data_fn != NULL) | |||||
| (*(png_ptr->read_data_fn))(png_ptr, data, length); | |||||
| else | |||||
| png_error(png_ptr, "Call to NULL read function"); | |||||
| } | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| /* This is the function that does the actual reading of data. If you are | |||||
| not reading from a standard C stream, you should create a replacement | |||||
| read_data function and use it at run time with png_set_read_fn(), rather | |||||
| than changing the library. */ | |||||
| #ifndef USE_FAR_KEYWORD | |||||
| void PNGAPI | |||||
| png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| png_size_t check; | |||||
| /* fread() returns 0 on error, so it is OK to store this in a png_size_t | |||||
| * instead of an int, which is what fread() actually returns. | |||||
| */ | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) | |||||
| check = 0; | |||||
| #else | |||||
| check = (png_size_t)fread(data, (png_size_t)1, length, | |||||
| (png_FILE_p)png_ptr->io_ptr); | |||||
| #endif | |||||
| if (check != length) | |||||
| png_error(png_ptr, "Read Error"); | |||||
| } | |||||
| #else | |||||
| /* this is the model-independent version. Since the standard I/O library | |||||
| can't handle far buffers in the medium and small models, we have to copy | |||||
| the data. | |||||
| */ | |||||
| #define NEAR_BUF_SIZE 1024 | |||||
| #define MIN(a,b) (a <= b ? a : b) | |||||
| static void /* PRIVATE */ | |||||
| png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| int check; | |||||
| png_byte *n_data; | |||||
| png_FILE_p io_ptr; | |||||
| /* Check if data really is near. If so, use usual code. */ | |||||
| n_data = (png_byte *)CVT_PTR_NOCHECK(data); | |||||
| io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); | |||||
| if ((png_bytep)n_data == data) | |||||
| { | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) | |||||
| check = 0; | |||||
| #else | |||||
| check = fread(n_data, 1, length, io_ptr); | |||||
| #endif | |||||
| } | |||||
| else | |||||
| { | |||||
| png_byte buf[NEAR_BUF_SIZE]; | |||||
| png_size_t read, remaining, err; | |||||
| check = 0; | |||||
| remaining = length; | |||||
| do | |||||
| { | |||||
| read = MIN(NEAR_BUF_SIZE, remaining); | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !ReadFile((HANDLE)(io_ptr), buf, read, &err, NULL) ) | |||||
| err = 0; | |||||
| #else | |||||
| err = fread(buf, (png_size_t)1, read, io_ptr); | |||||
| #endif | |||||
| png_memcpy(data, buf, read); /* copy far buffer to near buffer */ | |||||
| if(err != read) | |||||
| break; | |||||
| else | |||||
| check += err; | |||||
| data += read; | |||||
| remaining -= read; | |||||
| } | |||||
| while (remaining != 0); | |||||
| } | |||||
| if ((png_uint_32)check != (png_uint_32)length) | |||||
| png_error(png_ptr, "read Error"); | |||||
| } | |||||
| #endif | |||||
| #endif | |||||
| /* This function allows the application to supply a new input function | |||||
| for libpng if standard C streams aren't being used. | |||||
| This function takes as its arguments: | |||||
| png_ptr - pointer to a png input data structure | |||||
| io_ptr - pointer to user supplied structure containing info about | |||||
| the input functions. May be NULL. | |||||
| read_data_fn - pointer to a new input function that takes as its | |||||
| arguments a pointer to a png_struct, a pointer to | |||||
| a location where input data can be stored, and a 32-bit | |||||
| unsigned int that is the number of bytes to be read. | |||||
| To exit and output any fatal error messages the new write | |||||
| function should call png_error(png_ptr, "Error msg"). */ | |||||
| void PNGAPI | |||||
| png_set_read_fn(png_structp png_ptr, png_voidp io_ptr, | |||||
| png_rw_ptr read_data_fn) | |||||
| { | |||||
| png_ptr->io_ptr = io_ptr; | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| if (read_data_fn != NULL) | |||||
| png_ptr->read_data_fn = read_data_fn; | |||||
| else | |||||
| png_ptr->read_data_fn = png_default_read_data; | |||||
| #else | |||||
| png_ptr->read_data_fn = read_data_fn; | |||||
| #endif | |||||
| /* It is an error to write to a read device */ | |||||
| if (png_ptr->write_data_fn != NULL) | |||||
| { | |||||
| png_ptr->write_data_fn = NULL; | |||||
| png_warning(png_ptr, | |||||
| "It's an error to set both read_data_fn and write_data_fn in the "); | |||||
| png_warning(png_ptr, | |||||
| "same structure. Resetting write_data_fn to NULL."); | |||||
| } | |||||
| #if defined(PNG_WRITE_FLUSH_SUPPORTED) | |||||
| png_ptr->output_flush_fn = NULL; | |||||
| #endif | |||||
| } | |||||
| /* pngrio.c - functions for data input | |||||
| * | |||||
| * Last changed in libpng 1.2.13 November 13, 2006 | |||||
| * For conditions of distribution and use, see copyright notice in png.h | |||||
| * Copyright (c) 1998-2006 Glenn Randers-Pehrson | |||||
| * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | |||||
| * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | |||||
| * | |||||
| * This file provides a location for all input. Users who need | |||||
| * special handling are expected to write a function that has the same | |||||
| * arguments as this and performs a similar function, but that possibly | |||||
| * has a different input method. Note that you shouldn't change this | |||||
| * function, but rather write a replacement function and then make | |||||
| * libpng use it at run time with png_set_read_fn(...). | |||||
| */ | |||||
| #define PNG_INTERNAL | |||||
| #include "png.h" | |||||
| #if defined(PNG_READ_SUPPORTED) | |||||
| /* Read the data from whatever input you are using. The default routine | |||||
| reads from a file pointer. Note that this routine sometimes gets called | |||||
| with very small lengths, so you should implement some kind of simple | |||||
| buffering if you are using unbuffered reads. This should never be asked | |||||
| to read more then 64K on a 16 bit machine. */ | |||||
| void /* PRIVATE */ | |||||
| png_read_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| png_debug1(4,"reading %d bytes\n", (int)length); | |||||
| if (png_ptr->read_data_fn != NULL) | |||||
| (*(png_ptr->read_data_fn))(png_ptr, data, length); | |||||
| else | |||||
| png_error(png_ptr, "Call to NULL read function"); | |||||
| } | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| /* This is the function that does the actual reading of data. If you are | |||||
| not reading from a standard C stream, you should create a replacement | |||||
| read_data function and use it at run time with png_set_read_fn(), rather | |||||
| than changing the library. */ | |||||
| #ifndef USE_FAR_KEYWORD | |||||
| void PNGAPI | |||||
| png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| png_size_t check; | |||||
| if(png_ptr == NULL) return; | |||||
| /* fread() returns 0 on error, so it is OK to store this in a png_size_t | |||||
| * instead of an int, which is what fread() actually returns. | |||||
| */ | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) | |||||
| check = 0; | |||||
| #else | |||||
| check = (png_size_t)fread(data, (png_size_t)1, length, | |||||
| (png_FILE_p)png_ptr->io_ptr); | |||||
| #endif | |||||
| if (check != length) | |||||
| png_error(png_ptr, "Read Error"); | |||||
| } | |||||
| #else | |||||
| /* this is the model-independent version. Since the standard I/O library | |||||
| can't handle far buffers in the medium and small models, we have to copy | |||||
| the data. | |||||
| */ | |||||
| #define NEAR_BUF_SIZE 1024 | |||||
| #define MIN(a,b) (a <= b ? a : b) | |||||
| static void PNGAPI | |||||
| png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| int check; | |||||
| png_byte *n_data; | |||||
| png_FILE_p io_ptr; | |||||
| if(png_ptr == NULL) return; | |||||
| /* Check if data really is near. If so, use usual code. */ | |||||
| n_data = (png_byte *)CVT_PTR_NOCHECK(data); | |||||
| io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); | |||||
| if ((png_bytep)n_data == data) | |||||
| { | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !ReadFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) | |||||
| check = 0; | |||||
| #else | |||||
| check = fread(n_data, 1, length, io_ptr); | |||||
| #endif | |||||
| } | |||||
| else | |||||
| { | |||||
| png_byte buf[NEAR_BUF_SIZE]; | |||||
| png_size_t read, remaining, err; | |||||
| check = 0; | |||||
| remaining = length; | |||||
| do | |||||
| { | |||||
| read = MIN(NEAR_BUF_SIZE, remaining); | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !ReadFile((HANDLE)(io_ptr), buf, read, &err, NULL) ) | |||||
| err = 0; | |||||
| #else | |||||
| err = fread(buf, (png_size_t)1, read, io_ptr); | |||||
| #endif | |||||
| png_memcpy(data, buf, read); /* copy far buffer to near buffer */ | |||||
| if(err != read) | |||||
| break; | |||||
| else | |||||
| check += err; | |||||
| data += read; | |||||
| remaining -= read; | |||||
| } | |||||
| while (remaining != 0); | |||||
| } | |||||
| if ((png_uint_32)check != (png_uint_32)length) | |||||
| png_error(png_ptr, "read Error"); | |||||
| } | |||||
| #endif | |||||
| #endif | |||||
| /* This function allows the application to supply a new input function | |||||
| for libpng if standard C streams aren't being used. | |||||
| This function takes as its arguments: | |||||
| png_ptr - pointer to a png input data structure | |||||
| io_ptr - pointer to user supplied structure containing info about | |||||
| the input functions. May be NULL. | |||||
| read_data_fn - pointer to a new input function that takes as its | |||||
| arguments a pointer to a png_struct, a pointer to | |||||
| a location where input data can be stored, and a 32-bit | |||||
| unsigned int that is the number of bytes to be read. | |||||
| To exit and output any fatal error messages the new write | |||||
| function should call png_error(png_ptr, "Error msg"). */ | |||||
| void PNGAPI | |||||
| png_set_read_fn(png_structp png_ptr, png_voidp io_ptr, | |||||
| png_rw_ptr read_data_fn) | |||||
| { | |||||
| if(png_ptr == NULL) return; | |||||
| png_ptr->io_ptr = io_ptr; | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| if (read_data_fn != NULL) | |||||
| png_ptr->read_data_fn = read_data_fn; | |||||
| else | |||||
| png_ptr->read_data_fn = png_default_read_data; | |||||
| #else | |||||
| png_ptr->read_data_fn = read_data_fn; | |||||
| #endif | |||||
| /* It is an error to write to a read device */ | |||||
| if (png_ptr->write_data_fn != NULL) | |||||
| { | |||||
| png_ptr->write_data_fn = NULL; | |||||
| png_warning(png_ptr, | |||||
| "It's an error to set both read_data_fn and write_data_fn in the "); | |||||
| png_warning(png_ptr, | |||||
| "same structure. Resetting write_data_fn to NULL."); | |||||
| } | |||||
| #if defined(PNG_WRITE_FLUSH_SUPPORTED) | |||||
| png_ptr->output_flush_fn = NULL; | |||||
| #endif | |||||
| } | |||||
| #endif /* PNG_READ_SUPPORTED */ | |||||
| @@ -1,228 +1,234 @@ | |||||
| /* pngwio.c - functions for data output | |||||
| * | |||||
| * libpng 1.2.8 - December 3, 2004 | |||||
| * For conditions of distribution and use, see copyright notice in png.h | |||||
| * Copyright (c) 1998-2004 Glenn Randers-Pehrson | |||||
| * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | |||||
| * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | |||||
| * | |||||
| * This file provides a location for all output. Users who need | |||||
| * special handling are expected to write functions that have the same | |||||
| * arguments as these and perform similar functions, but that possibly | |||||
| * use different output methods. Note that you shouldn't change these | |||||
| * functions, but rather write replacement functions and then change | |||||
| * them at run time with png_set_write_fn(...). | |||||
| */ | |||||
| #define PNG_INTERNAL | |||||
| #include "png.h" | |||||
| #ifdef PNG_WRITE_SUPPORTED | |||||
| /* Write the data to whatever output you are using. The default routine | |||||
| writes to a file pointer. Note that this routine sometimes gets called | |||||
| with very small lengths, so you should implement some kind of simple | |||||
| buffering if you are using unbuffered writes. This should never be asked | |||||
| to write more than 64K on a 16 bit machine. */ | |||||
| void /* PRIVATE */ | |||||
| png_write_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| if (png_ptr->write_data_fn != NULL ) | |||||
| (*(png_ptr->write_data_fn))(png_ptr, data, length); | |||||
| else | |||||
| png_error(png_ptr, "Call to NULL write function"); | |||||
| } | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| /* This is the function that does the actual writing of data. If you are | |||||
| not writing to a standard C stream, you should create a replacement | |||||
| write_data function and use it at run time with png_set_write_fn(), rather | |||||
| than changing the library. */ | |||||
| #ifndef USE_FAR_KEYWORD | |||||
| void PNGAPI | |||||
| png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| png_uint_32 check; | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) | |||||
| check = 0; | |||||
| #else | |||||
| check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr)); | |||||
| #endif | |||||
| if (check != length) | |||||
| png_error(png_ptr, "Write Error"); | |||||
| } | |||||
| #else | |||||
| /* this is the model-independent version. Since the standard I/O library | |||||
| can't handle far buffers in the medium and small models, we have to copy | |||||
| the data. | |||||
| */ | |||||
| #define NEAR_BUF_SIZE 1024 | |||||
| #define MIN(a,b) (a <= b ? a : b) | |||||
| void PNGAPI | |||||
| png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| png_uint_32 check; | |||||
| png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */ | |||||
| png_FILE_p io_ptr; | |||||
| /* Check if data really is near. If so, use usual code. */ | |||||
| near_data = (png_byte *)CVT_PTR_NOCHECK(data); | |||||
| io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); | |||||
| if ((png_bytep)near_data == data) | |||||
| { | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !WriteFile(io_ptr, near_data, length, &check, NULL) ) | |||||
| check = 0; | |||||
| #else | |||||
| check = fwrite(near_data, 1, length, io_ptr); | |||||
| #endif | |||||
| } | |||||
| else | |||||
| { | |||||
| png_byte buf[NEAR_BUF_SIZE]; | |||||
| png_size_t written, remaining, err; | |||||
| check = 0; | |||||
| remaining = length; | |||||
| do | |||||
| { | |||||
| written = MIN(NEAR_BUF_SIZE, remaining); | |||||
| png_memcpy(buf, data, written); /* copy far buffer to near buffer */ | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !WriteFile(io_ptr, buf, written, &err, NULL) ) | |||||
| err = 0; | |||||
| #else | |||||
| err = fwrite(buf, 1, written, io_ptr); | |||||
| #endif | |||||
| if (err != written) | |||||
| break; | |||||
| else | |||||
| check += err; | |||||
| data += written; | |||||
| remaining -= written; | |||||
| } | |||||
| while (remaining != 0); | |||||
| } | |||||
| if (check != length) | |||||
| png_error(png_ptr, "Write Error"); | |||||
| } | |||||
| #endif | |||||
| #endif | |||||
| /* This function is called to output any data pending writing (normally | |||||
| to disk). After png_flush is called, there should be no data pending | |||||
| writing in any buffers. */ | |||||
| #if defined(PNG_WRITE_FLUSH_SUPPORTED) | |||||
| void /* PRIVATE */ | |||||
| png_flush(png_structp png_ptr) | |||||
| { | |||||
| if (png_ptr->output_flush_fn != NULL) | |||||
| (*(png_ptr->output_flush_fn))(png_ptr); | |||||
| } | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| void PNGAPI | |||||
| png_default_flush(png_structp png_ptr) | |||||
| { | |||||
| #if !defined(_WIN32_WCE) | |||||
| png_FILE_p io_ptr; | |||||
| io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr)); | |||||
| if (io_ptr != NULL) | |||||
| fflush(io_ptr); | |||||
| #endif | |||||
| } | |||||
| #endif | |||||
| #endif | |||||
| /* This function allows the application to supply new output functions for | |||||
| libpng if standard C streams aren't being used. | |||||
| This function takes as its arguments: | |||||
| png_ptr - pointer to a png output data structure | |||||
| io_ptr - pointer to user supplied structure containing info about | |||||
| the output functions. May be NULL. | |||||
| write_data_fn - pointer to a new output function that takes as its | |||||
| arguments a pointer to a png_struct, a pointer to | |||||
| data to be written, and a 32-bit unsigned int that is | |||||
| the number of bytes to be written. The new write | |||||
| function should call png_error(png_ptr, "Error msg") | |||||
| to exit and output any fatal error messages. | |||||
| flush_data_fn - pointer to a new flush function that takes as its | |||||
| arguments a pointer to a png_struct. After a call to | |||||
| the flush function, there should be no data in any buffers | |||||
| or pending transmission. If the output method doesn't do | |||||
| any buffering of ouput, a function prototype must still be | |||||
| supplied although it doesn't have to do anything. If | |||||
| PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile | |||||
| time, output_flush_fn will be ignored, although it must be | |||||
| supplied for compatibility. */ | |||||
| void PNGAPI | |||||
| png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, | |||||
| png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn) | |||||
| { | |||||
| png_ptr->io_ptr = io_ptr; | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| if (write_data_fn != NULL) | |||||
| png_ptr->write_data_fn = write_data_fn; | |||||
| else | |||||
| png_ptr->write_data_fn = png_default_write_data; | |||||
| #else | |||||
| png_ptr->write_data_fn = write_data_fn; | |||||
| #endif | |||||
| #if defined(PNG_WRITE_FLUSH_SUPPORTED) | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| if (output_flush_fn != NULL) | |||||
| png_ptr->output_flush_fn = output_flush_fn; | |||||
| else | |||||
| png_ptr->output_flush_fn = png_default_flush; | |||||
| #else | |||||
| png_ptr->output_flush_fn = output_flush_fn; | |||||
| #endif | |||||
| #endif /* PNG_WRITE_FLUSH_SUPPORTED */ | |||||
| /* It is an error to read while writing a png file */ | |||||
| if (png_ptr->read_data_fn != NULL) | |||||
| { | |||||
| png_ptr->read_data_fn = NULL; | |||||
| png_warning(png_ptr, | |||||
| "Attempted to set both read_data_fn and write_data_fn in"); | |||||
| png_warning(png_ptr, | |||||
| "the same structure. Resetting read_data_fn to NULL."); | |||||
| } | |||||
| } | |||||
| #if defined(USE_FAR_KEYWORD) | |||||
| #if defined(_MSC_VER) | |||||
| void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) | |||||
| { | |||||
| void *near_ptr; | |||||
| void FAR *far_ptr; | |||||
| FP_OFF(near_ptr) = FP_OFF(ptr); | |||||
| far_ptr = (void FAR *)near_ptr; | |||||
| if(check != 0) | |||||
| if(FP_SEG(ptr) != FP_SEG(far_ptr)) | |||||
| png_error(png_ptr,"segment lost in conversion"); | |||||
| return(near_ptr); | |||||
| } | |||||
| # else | |||||
| void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) | |||||
| { | |||||
| void *near_ptr; | |||||
| void FAR *far_ptr; | |||||
| near_ptr = (void FAR *)ptr; | |||||
| far_ptr = (void FAR *)near_ptr; | |||||
| if(check != 0) | |||||
| if(far_ptr != ptr) | |||||
| png_error(png_ptr,"segment lost in conversion"); | |||||
| return(near_ptr); | |||||
| } | |||||
| # endif | |||||
| # endif | |||||
| #endif /* PNG_WRITE_SUPPORTED */ | |||||
| /* pngwio.c - functions for data output | |||||
| * | |||||
| * Last changed in libpng 1.2.13 November 13, 2006 | |||||
| * For conditions of distribution and use, see copyright notice in png.h | |||||
| * Copyright (c) 1998-2006 Glenn Randers-Pehrson | |||||
| * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | |||||
| * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | |||||
| * | |||||
| * This file provides a location for all output. Users who need | |||||
| * special handling are expected to write functions that have the same | |||||
| * arguments as these and perform similar functions, but that possibly | |||||
| * use different output methods. Note that you shouldn't change these | |||||
| * functions, but rather write replacement functions and then change | |||||
| * them at run time with png_set_write_fn(...). | |||||
| */ | |||||
| #define PNG_INTERNAL | |||||
| #include "png.h" | |||||
| #ifdef PNG_WRITE_SUPPORTED | |||||
| /* Write the data to whatever output you are using. The default routine | |||||
| writes to a file pointer. Note that this routine sometimes gets called | |||||
| with very small lengths, so you should implement some kind of simple | |||||
| buffering if you are using unbuffered writes. This should never be asked | |||||
| to write more than 64K on a 16 bit machine. */ | |||||
| void /* PRIVATE */ | |||||
| png_write_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| if (png_ptr->write_data_fn != NULL ) | |||||
| (*(png_ptr->write_data_fn))(png_ptr, data, length); | |||||
| else | |||||
| png_error(png_ptr, "Call to NULL write function"); | |||||
| } | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| /* This is the function that does the actual writing of data. If you are | |||||
| not writing to a standard C stream, you should create a replacement | |||||
| write_data function and use it at run time with png_set_write_fn(), rather | |||||
| than changing the library. */ | |||||
| #ifndef USE_FAR_KEYWORD | |||||
| void PNGAPI | |||||
| png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| png_uint_32 check; | |||||
| if(png_ptr == NULL) return; | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) | |||||
| check = 0; | |||||
| #else | |||||
| check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr)); | |||||
| #endif | |||||
| if (check != length) | |||||
| png_error(png_ptr, "Write Error"); | |||||
| } | |||||
| #else | |||||
| /* this is the model-independent version. Since the standard I/O library | |||||
| can't handle far buffers in the medium and small models, we have to copy | |||||
| the data. | |||||
| */ | |||||
| #define NEAR_BUF_SIZE 1024 | |||||
| #define MIN(a,b) (a <= b ? a : b) | |||||
| void PNGAPI | |||||
| png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) | |||||
| { | |||||
| png_uint_32 check; | |||||
| png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */ | |||||
| png_FILE_p io_ptr; | |||||
| if(png_ptr == NULL) return; | |||||
| /* Check if data really is near. If so, use usual code. */ | |||||
| near_data = (png_byte *)CVT_PTR_NOCHECK(data); | |||||
| io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); | |||||
| if ((png_bytep)near_data == data) | |||||
| { | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !WriteFile(io_ptr, near_data, length, &check, NULL) ) | |||||
| check = 0; | |||||
| #else | |||||
| check = fwrite(near_data, 1, length, io_ptr); | |||||
| #endif | |||||
| } | |||||
| else | |||||
| { | |||||
| png_byte buf[NEAR_BUF_SIZE]; | |||||
| png_size_t written, remaining, err; | |||||
| check = 0; | |||||
| remaining = length; | |||||
| do | |||||
| { | |||||
| written = MIN(NEAR_BUF_SIZE, remaining); | |||||
| png_memcpy(buf, data, written); /* copy far buffer to near buffer */ | |||||
| #if defined(_WIN32_WCE) | |||||
| if ( !WriteFile(io_ptr, buf, written, &err, NULL) ) | |||||
| err = 0; | |||||
| #else | |||||
| err = fwrite(buf, 1, written, io_ptr); | |||||
| #endif | |||||
| if (err != written) | |||||
| break; | |||||
| else | |||||
| check += err; | |||||
| data += written; | |||||
| remaining -= written; | |||||
| } | |||||
| while (remaining != 0); | |||||
| } | |||||
| if (check != length) | |||||
| png_error(png_ptr, "Write Error"); | |||||
| } | |||||
| #endif | |||||
| #endif | |||||
| /* This function is called to output any data pending writing (normally | |||||
| to disk). After png_flush is called, there should be no data pending | |||||
| writing in any buffers. */ | |||||
| #if defined(PNG_WRITE_FLUSH_SUPPORTED) | |||||
| void /* PRIVATE */ | |||||
| png_flush(png_structp png_ptr) | |||||
| { | |||||
| if (png_ptr->output_flush_fn != NULL) | |||||
| (*(png_ptr->output_flush_fn))(png_ptr); | |||||
| } | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| void PNGAPI | |||||
| png_default_flush(png_structp png_ptr) | |||||
| { | |||||
| #if !defined(_WIN32_WCE) | |||||
| png_FILE_p io_ptr; | |||||
| #endif | |||||
| if(png_ptr == NULL) return; | |||||
| #if !defined(_WIN32_WCE) | |||||
| io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr)); | |||||
| if (io_ptr != NULL) | |||||
| fflush(io_ptr); | |||||
| #endif | |||||
| } | |||||
| #endif | |||||
| #endif | |||||
| /* This function allows the application to supply new output functions for | |||||
| libpng if standard C streams aren't being used. | |||||
| This function takes as its arguments: | |||||
| png_ptr - pointer to a png output data structure | |||||
| io_ptr - pointer to user supplied structure containing info about | |||||
| the output functions. May be NULL. | |||||
| write_data_fn - pointer to a new output function that takes as its | |||||
| arguments a pointer to a png_struct, a pointer to | |||||
| data to be written, and a 32-bit unsigned int that is | |||||
| the number of bytes to be written. The new write | |||||
| function should call png_error(png_ptr, "Error msg") | |||||
| to exit and output any fatal error messages. | |||||
| flush_data_fn - pointer to a new flush function that takes as its | |||||
| arguments a pointer to a png_struct. After a call to | |||||
| the flush function, there should be no data in any buffers | |||||
| or pending transmission. If the output method doesn't do | |||||
| any buffering of ouput, a function prototype must still be | |||||
| supplied although it doesn't have to do anything. If | |||||
| PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile | |||||
| time, output_flush_fn will be ignored, although it must be | |||||
| supplied for compatibility. */ | |||||
| void PNGAPI | |||||
| png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, | |||||
| png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn) | |||||
| { | |||||
| if(png_ptr == NULL) return; | |||||
| png_ptr->io_ptr = io_ptr; | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| if (write_data_fn != NULL) | |||||
| png_ptr->write_data_fn = write_data_fn; | |||||
| else | |||||
| png_ptr->write_data_fn = png_default_write_data; | |||||
| #else | |||||
| png_ptr->write_data_fn = write_data_fn; | |||||
| #endif | |||||
| #if defined(PNG_WRITE_FLUSH_SUPPORTED) | |||||
| #if !defined(PNG_NO_STDIO) | |||||
| if (output_flush_fn != NULL) | |||||
| png_ptr->output_flush_fn = output_flush_fn; | |||||
| else | |||||
| png_ptr->output_flush_fn = png_default_flush; | |||||
| #else | |||||
| png_ptr->output_flush_fn = output_flush_fn; | |||||
| #endif | |||||
| #endif /* PNG_WRITE_FLUSH_SUPPORTED */ | |||||
| /* It is an error to read while writing a png file */ | |||||
| if (png_ptr->read_data_fn != NULL) | |||||
| { | |||||
| png_ptr->read_data_fn = NULL; | |||||
| png_warning(png_ptr, | |||||
| "Attempted to set both read_data_fn and write_data_fn in"); | |||||
| png_warning(png_ptr, | |||||
| "the same structure. Resetting read_data_fn to NULL."); | |||||
| } | |||||
| } | |||||
| #if defined(USE_FAR_KEYWORD) | |||||
| #if defined(_MSC_VER) | |||||
| void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) | |||||
| { | |||||
| void *near_ptr; | |||||
| void FAR *far_ptr; | |||||
| FP_OFF(near_ptr) = FP_OFF(ptr); | |||||
| far_ptr = (void FAR *)near_ptr; | |||||
| if(check != 0) | |||||
| if(FP_SEG(ptr) != FP_SEG(far_ptr)) | |||||
| png_error(png_ptr,"segment lost in conversion"); | |||||
| return(near_ptr); | |||||
| } | |||||
| # else | |||||
| void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) | |||||
| { | |||||
| void *near_ptr; | |||||
| void FAR *far_ptr; | |||||
| near_ptr = (void FAR *)ptr; | |||||
| far_ptr = (void FAR *)near_ptr; | |||||
| if(check != 0) | |||||
| if(far_ptr != ptr) | |||||
| png_error(png_ptr,"segment lost in conversion"); | |||||
| return(near_ptr); | |||||
| } | |||||
| # endif | |||||
| # endif | |||||
| #endif /* PNG_WRITE_SUPPORTED */ | |||||
| @@ -38,7 +38,7 @@ | |||||
| See also SystemStats::getJUCEVersion() for a string version. | See also SystemStats::getJUCEVersion() for a string version. | ||||
| */ | */ | ||||
| #define JUCE_MAJOR_VERSION 1 | #define JUCE_MAJOR_VERSION 1 | ||||
| #define JUCE_MINOR_VERSION 44 | |||||
| #define JUCE_MINOR_VERSION 45 | |||||
| /** Current Juce version number. | /** Current Juce version number. | ||||
| @@ -93,6 +93,10 @@ | |||||
| #include <libkern/OSAtomic.h> | #include <libkern/OSAtomic.h> | ||||
| #endif | #endif | ||||
| #if JUCE_LINUX | |||||
| #include <signal.h> | |||||
| #endif | |||||
| #if JUCE_MSVC && JUCE_DEBUG | #if JUCE_MSVC && JUCE_DEBUG | ||||
| #include <crtdbg.h> | #include <crtdbg.h> | ||||
| #endif | #endif | ||||