| @@ -277,7 +277,6 @@ OBJECTS := \ | |||
| $(OBJDIR)/transupp.o \ | |||
| $(OBJDIR)/png.o \ | |||
| $(OBJDIR)/pngerror.o \ | |||
| $(OBJDIR)/pnggccrd.o \ | |||
| $(OBJDIR)/pngget.o \ | |||
| $(OBJDIR)/pngmem.o \ | |||
| $(OBJDIR)/pngpread.o \ | |||
| @@ -287,7 +286,6 @@ OBJECTS := \ | |||
| $(OBJDIR)/pngrutil.o \ | |||
| $(OBJDIR)/pngset.o \ | |||
| $(OBJDIR)/pngtrans.o \ | |||
| $(OBJDIR)/pngvcrd.o \ | |||
| $(OBJDIR)/pngwio.o \ | |||
| $(OBJDIR)/pngwrite.o \ | |||
| $(OBJDIR)/pngwtran.o \ | |||
| @@ -1643,11 +1641,6 @@ $(OBJDIR)/pngerror.o: ../../src/juce_appframework/gui/graphics/imaging/image_fil | |||
| @echo $(notdir $<) | |||
| @$(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 | |||
| -@$(CMD_MKOBJDIR) | |||
| @echo $(notdir $<) | |||
| @@ -1693,11 +1686,6 @@ $(OBJDIR)/pngtrans.o: ../../src/juce_appframework/gui/graphics/imaging/image_fil | |||
| @echo $(notdir $<) | |||
| @$(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 | |||
| -@$(CMD_MKOBJDIR) | |||
| @echo $(notdir $<) | |||
| @@ -3183,10 +3183,6 @@ | |||
| RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngerror.c" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pnggccrd.c" | |||
| > | |||
| </File> | |||
| <File | |||
| 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" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\src\juce_appframework\gui\graphics\imaging\image_file_formats\pnglib\pngvcrd.c" | |||
| > | |||
| </File> | |||
| <File | |||
| 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 | |||
| - 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 | |||
| - updated the included version of libpng | |||
| ============================================================================== | |||
| 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 | |||
| 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 | |||
| 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 | |||
| 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. | |||
| */ | |||
| #define JUCE_MAJOR_VERSION 1 | |||
| #define JUCE_MINOR_VERSION 44 | |||
| #define JUCE_MINOR_VERSION 45 | |||
| /** Current Juce version number. | |||
| @@ -93,6 +93,10 @@ | |||
| #include <libkern/OSAtomic.h> | |||
| #endif | |||
| #if JUCE_LINUX | |||
| #include <signal.h> | |||
| #endif | |||
| #if JUCE_MSVC && JUCE_DEBUG | |||
| #include <crtdbg.h> | |||
| #endif | |||