| OLD | NEW |
| 1 | 1 |
| 2 /* pngwio.c - functions for data output | 2 /* pngwio.c - functions for data output |
| 3 * | 3 * |
| 4 * Last changed in libpng 1.2.13 November 13, 2006 | 4 * Last changed in libpng 1.2.30 [August 15, 2008] |
| 5 * For conditions of distribution and use, see copyright notice in png.h | 5 * For conditions of distribution and use, see copyright notice in png.h |
| 6 * Copyright (c) 1998-2006 Glenn Randers-Pehrson | 6 * Copyright (c) 1998-2008 Glenn Randers-Pehrson |
| 7 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | 7 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) |
| 8 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | 8 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) |
| 9 * | 9 * |
| 10 * This file provides a location for all output. Users who need | 10 * This file provides a location for all output. Users who need |
| 11 * special handling are expected to write functions that have the same | 11 * special handling are expected to write functions that have the same |
| 12 * arguments as these and perform similar functions, but that possibly | 12 * arguments as these and perform similar functions, but that possibly |
| 13 * use different output methods. Note that you shouldn't change these | 13 * use different output methods. Note that you shouldn't change these |
| 14 * functions, but rather write replacement functions and then change | 14 * functions, but rather write replacement functions and then change |
| 15 * them at run time with png_set_write_fn(...). | 15 * them at run time with png_set_write_fn(...). |
| 16 */ | 16 */ |
| (...skipping 21 matching lines...) Expand all Loading... |
| 38 /* This is the function that does the actual writing of data. If you are | 38 /* This is the function that does the actual writing of data. If you are |
| 39 not writing to a standard C stream, you should create a replacement | 39 not writing to a standard C stream, you should create a replacement |
| 40 write_data function and use it at run time with png_set_write_fn(), rather | 40 write_data function and use it at run time with png_set_write_fn(), rather |
| 41 than changing the library. */ | 41 than changing the library. */ |
| 42 #ifndef USE_FAR_KEYWORD | 42 #ifndef USE_FAR_KEYWORD |
| 43 void PNGAPI | 43 void PNGAPI |
| 44 png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) | 44 png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) |
| 45 { | 45 { |
| 46 png_uint_32 check; | 46 png_uint_32 check; |
| 47 | 47 |
| 48 if(png_ptr == NULL) return; | 48 if (png_ptr == NULL) return; |
| 49 #if defined(_WIN32_WCE) | 49 #if defined(_WIN32_WCE) |
| 50 if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) | 50 if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) |
| 51 check = 0; | 51 check = 0; |
| 52 #else | 52 #else |
| 53 check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr)); | 53 check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr)); |
| 54 #endif | 54 #endif |
| 55 if (check != length) | 55 if (check != length) |
| 56 png_error(png_ptr, "Write Error"); | 56 png_error(png_ptr, "Write Error"); |
| 57 } | 57 } |
| 58 #else | 58 #else |
| 59 /* this is the model-independent version. Since the standard I/O library | 59 /* this is the model-independent version. Since the standard I/O library |
| 60 can't handle far buffers in the medium and small models, we have to copy | 60 can't handle far buffers in the medium and small models, we have to copy |
| 61 the data. | 61 the data. |
| 62 */ | 62 */ |
| 63 | 63 |
| 64 #define NEAR_BUF_SIZE 1024 | 64 #define NEAR_BUF_SIZE 1024 |
| 65 #define MIN(a,b) (a <= b ? a : b) | 65 #define MIN(a,b) (a <= b ? a : b) |
| 66 | 66 |
| 67 void PNGAPI | 67 void PNGAPI |
| 68 png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) | 68 png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) |
| 69 { | 69 { |
| 70 png_uint_32 check; | 70 png_uint_32 check; |
| 71 png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */ | 71 png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */ |
| 72 png_FILE_p io_ptr; | 72 png_FILE_p io_ptr; |
| 73 | 73 |
| 74 if(png_ptr == NULL) return; | 74 if (png_ptr == NULL) return; |
| 75 /* Check if data really is near. If so, use usual code. */ | 75 /* Check if data really is near. If so, use usual code. */ |
| 76 near_data = (png_byte *)CVT_PTR_NOCHECK(data); | 76 near_data = (png_byte *)CVT_PTR_NOCHECK(data); |
| 77 io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); | 77 io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); |
| 78 if ((png_bytep)near_data == data) | 78 if ((png_bytep)near_data == data) |
| 79 { | 79 { |
| 80 #if defined(_WIN32_WCE) | 80 #if defined(_WIN32_WCE) |
| 81 if ( !WriteFile(io_ptr, near_data, length, &check, NULL) ) | 81 if ( !WriteFile(io_ptr, near_data, length, &check, NULL) ) |
| 82 check = 0; | 82 check = 0; |
| 83 #else | 83 #else |
| 84 check = fwrite(near_data, 1, length, io_ptr); | 84 check = fwrite(near_data, 1, length, io_ptr); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 (*(png_ptr->output_flush_fn))(png_ptr); | 127 (*(png_ptr->output_flush_fn))(png_ptr); |
| 128 } | 128 } |
| 129 | 129 |
| 130 #if !defined(PNG_NO_STDIO) | 130 #if !defined(PNG_NO_STDIO) |
| 131 void PNGAPI | 131 void PNGAPI |
| 132 png_default_flush(png_structp png_ptr) | 132 png_default_flush(png_structp png_ptr) |
| 133 { | 133 { |
| 134 #if !defined(_WIN32_WCE) | 134 #if !defined(_WIN32_WCE) |
| 135 png_FILE_p io_ptr; | 135 png_FILE_p io_ptr; |
| 136 #endif | 136 #endif |
| 137 if(png_ptr == NULL) return; | 137 if (png_ptr == NULL) return; |
| 138 #if !defined(_WIN32_WCE) | 138 #if !defined(_WIN32_WCE) |
| 139 io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr)); | 139 io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr)); |
| 140 if (io_ptr != NULL) | 140 if (io_ptr != NULL) |
| 141 fflush(io_ptr); | 141 fflush(io_ptr); |
| 142 #endif | 142 #endif |
| 143 } | 143 } |
| 144 #endif | 144 #endif |
| 145 #endif | 145 #endif |
| 146 | 146 |
| 147 /* This function allows the application to supply new output functions for | 147 /* This function allows the application to supply new output functions for |
| (...skipping 15 matching lines...) Expand all Loading... |
| 163 or pending transmission. If the output method doesn't do | 163 or pending transmission. If the output method doesn't do |
| 164 any buffering of ouput, a function prototype must still be | 164 any buffering of ouput, a function prototype must still be |
| 165 supplied although it doesn't have to do anything. If | 165 supplied although it doesn't have to do anything. If |
| 166 PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile | 166 PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile |
| 167 time, output_flush_fn will be ignored, although it must be | 167 time, output_flush_fn will be ignored, although it must be |
| 168 supplied for compatibility. */ | 168 supplied for compatibility. */ |
| 169 void PNGAPI | 169 void PNGAPI |
| 170 png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, | 170 png_set_write_fn(png_structp png_ptr, png_voidp io_ptr, |
| 171 png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn) | 171 png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn) |
| 172 { | 172 { |
| 173 if(png_ptr == NULL) return; | 173 if (png_ptr == NULL) return; |
| 174 png_ptr->io_ptr = io_ptr; | 174 png_ptr->io_ptr = io_ptr; |
| 175 | 175 |
| 176 #if !defined(PNG_NO_STDIO) | 176 #if !defined(PNG_NO_STDIO) |
| 177 if (write_data_fn != NULL) | 177 if (write_data_fn != NULL) |
| 178 png_ptr->write_data_fn = write_data_fn; | 178 png_ptr->write_data_fn = write_data_fn; |
| 179 else | 179 else |
| 180 png_ptr->write_data_fn = png_default_write_data; | 180 png_ptr->write_data_fn = png_default_write_data; |
| 181 #else | 181 #else |
| 182 png_ptr->write_data_fn = write_data_fn; | 182 png_ptr->write_data_fn = write_data_fn; |
| 183 #endif | 183 #endif |
| (...skipping 15 matching lines...) Expand all Loading... |
| 199 png_ptr->read_data_fn = NULL; | 199 png_ptr->read_data_fn = NULL; |
| 200 png_warning(png_ptr, | 200 png_warning(png_ptr, |
| 201 "Attempted to set both read_data_fn and write_data_fn in"); | 201 "Attempted to set both read_data_fn and write_data_fn in"); |
| 202 png_warning(png_ptr, | 202 png_warning(png_ptr, |
| 203 "the same structure. Resetting read_data_fn to NULL."); | 203 "the same structure. Resetting read_data_fn to NULL."); |
| 204 } | 204 } |
| 205 } | 205 } |
| 206 | 206 |
| 207 #if defined(USE_FAR_KEYWORD) | 207 #if defined(USE_FAR_KEYWORD) |
| 208 #if defined(_MSC_VER) | 208 #if defined(_MSC_VER) |
| 209 void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) | 209 void *png_far_to_near(png_structp png_ptr, png_voidp ptr, int check) |
| 210 { | 210 { |
| 211 void *near_ptr; | 211 void *near_ptr; |
| 212 void FAR *far_ptr; | 212 void FAR *far_ptr; |
| 213 FP_OFF(near_ptr) = FP_OFF(ptr); | 213 FP_OFF(near_ptr) = FP_OFF(ptr); |
| 214 far_ptr = (void FAR *)near_ptr; | 214 far_ptr = (void FAR *)near_ptr; |
| 215 if(check != 0) | 215 if (check != 0) |
| 216 if(FP_SEG(ptr) != FP_SEG(far_ptr)) | 216 if (FP_SEG(ptr) != FP_SEG(far_ptr)) |
| 217 png_error(png_ptr,"segment lost in conversion"); | 217 png_error(png_ptr, "segment lost in conversion"); |
| 218 return(near_ptr); | 218 return(near_ptr); |
| 219 } | 219 } |
| 220 # else | 220 # else |
| 221 void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) | 221 void *png_far_to_near(png_structp png_ptr, png_voidp ptr, int check) |
| 222 { | 222 { |
| 223 void *near_ptr; | 223 void *near_ptr; |
| 224 void FAR *far_ptr; | 224 void FAR *far_ptr; |
| 225 near_ptr = (void FAR *)ptr; | 225 near_ptr = (void FAR *)ptr; |
| 226 far_ptr = (void FAR *)near_ptr; | 226 far_ptr = (void FAR *)near_ptr; |
| 227 if(check != 0) | 227 if (check != 0) |
| 228 if(far_ptr != ptr) | 228 if (far_ptr != ptr) |
| 229 png_error(png_ptr,"segment lost in conversion"); | 229 png_error(png_ptr, "segment lost in conversion"); |
| 230 return(near_ptr); | 230 return(near_ptr); |
| 231 } | 231 } |
| 232 # endif | 232 # endif |
| 233 # endif | 233 # endif |
| 234 #endif /* PNG_WRITE_SUPPORTED */ | 234 #endif /* PNG_WRITE_SUPPORTED */ |
| OLD | NEW |