18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* pngwio.c - functions for data output 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Last changed in libpng 1.2.13 November 13, 2006 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * For conditions of distribution and use, see copyright notice in png.h 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 1998-2006 Glenn Randers-Pehrson 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * This file provides a location for all output. Users who need 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * special handling are expected to write functions that have the same 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * arguments as these and perform similar functions, but that possibly 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * use different output methods. Note that you shouldn't change these 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * functions, but rather write replacement functions and then change 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * them at run time with png_set_write_fn(...). 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define PNG_INTERNAL 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "png.h" 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef PNG_WRITE_SUPPORTED 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Write the data to whatever output you are using. The default routine 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project writes to a file pointer. Note that this routine sometimes gets called 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project with very small lengths, so you should implement some kind of simple 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project buffering if you are using unbuffered writes. This should never be asked 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project to write more than 64K on a 16 bit machine. */ 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid /* PRIVATE */ 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectpng_write_data(png_structp png_ptr, png_bytep data, png_size_t length) 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (png_ptr->write_data_fn != NULL ) 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project (*(png_ptr->write_data_fn))(png_ptr, data, length); 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project else 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_error(png_ptr, "Call to NULL write function"); 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if !defined(PNG_NO_STDIO) 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* This is the function that does the actual writing of data. If you are 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project not writing to a standard C stream, you should create a replacement 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project write_data function and use it at run time with png_set_write_fn(), rather 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project than changing the library. */ 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef USE_FAR_KEYWORD 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid PNGAPI 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectpng_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_uint_32 check; 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if(png_ptr == NULL) return; 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(_WIN32_WCE) 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if ( !WriteFile((HANDLE)(png_ptr->io_ptr), data, length, &check, NULL) ) 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project check = 0; 528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr)); 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (check != length) 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_error(png_ptr, "Write Error"); 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* this is the model-independent version. Since the standard I/O library 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project can't handle far buffers in the medium and small models, we have to copy 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project the data. 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project*/ 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define NEAR_BUF_SIZE 1024 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MIN(a,b) (a <= b ? a : b) 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid PNGAPI 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectpng_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length) 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_uint_32 check; 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */ 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_FILE_p io_ptr; 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if(png_ptr == NULL) return; 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* Check if data really is near. If so, use usual code. */ 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project near_data = (png_byte *)CVT_PTR_NOCHECK(data); 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project io_ptr = (png_FILE_p)CVT_PTR(png_ptr->io_ptr); 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if ((png_bytep)near_data == data) 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(_WIN32_WCE) 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if ( !WriteFile(io_ptr, near_data, length, &check, NULL) ) 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project check = 0; 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project check = fwrite(near_data, 1, length, io_ptr); 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project else 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_byte buf[NEAR_BUF_SIZE]; 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_size_t written, remaining, err; 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project check = 0; 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project remaining = length; 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project do 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project written = MIN(NEAR_BUF_SIZE, remaining); 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_memcpy(buf, data, written); /* copy far buffer to near buffer */ 978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(_WIN32_WCE) 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if ( !WriteFile(io_ptr, buf, written, &err, NULL) ) 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project err = 0; 1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project err = fwrite(buf, 1, written, io_ptr); 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (err != written) 1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project break; 1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project else 1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project check += err; 1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project data += written; 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project remaining -= written; 1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project while (remaining != 0); 1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (check != length) 1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_error(png_ptr, "Write Error"); 1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* This function is called to output any data pending writing (normally 1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project to disk). After png_flush is called, there should be no data pending 1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project writing in any buffers. */ 1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(PNG_WRITE_FLUSH_SUPPORTED) 1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid /* PRIVATE */ 1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectpng_flush(png_structp png_ptr) 1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (png_ptr->output_flush_fn != NULL) 1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project (*(png_ptr->output_flush_fn))(png_ptr); 1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if !defined(PNG_NO_STDIO) 1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid PNGAPI 1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectpng_default_flush(png_structp png_ptr) 1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if !defined(_WIN32_WCE) 1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_FILE_p io_ptr; 1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if(png_ptr == NULL) return; 1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if !defined(_WIN32_WCE) 1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project io_ptr = (png_FILE_p)CVT_PTR((png_ptr->io_ptr)); 1408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (io_ptr != NULL) 1418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project fflush(io_ptr); 1428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 1438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 1448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 1458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 1468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* This function allows the application to supply new output functions for 1488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project libpng if standard C streams aren't being used. 1498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project This function takes as its arguments: 1518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_ptr - pointer to a png output data structure 1528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project io_ptr - pointer to user supplied structure containing info about 1538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project the output functions. May be NULL. 1548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project write_data_fn - pointer to a new output function that takes as its 1558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project arguments a pointer to a png_struct, a pointer to 1568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project data to be written, and a 32-bit unsigned int that is 1578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project the number of bytes to be written. The new write 1588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project function should call png_error(png_ptr, "Error msg") 1598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project to exit and output any fatal error messages. 1608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project flush_data_fn - pointer to a new flush function that takes as its 1618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project arguments a pointer to a png_struct. After a call to 1628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project the flush function, there should be no data in any buffers 1638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project or pending transmission. If the output method doesn't do 1648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project any buffering of ouput, a function prototype must still be 1658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project supplied although it doesn't have to do anything. If 1668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile 1678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project time, output_flush_fn will be ignored, although it must be 1688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project supplied for compatibility. */ 1698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid PNGAPI 1708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectpng_set_write_fn(png_structp png_ptr, png_voidp io_ptr, 1718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn) 1728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 1738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if(png_ptr == NULL) return; 1748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_ptr->io_ptr = io_ptr; 1758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if !defined(PNG_NO_STDIO) 1778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (write_data_fn != NULL) 1788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_ptr->write_data_fn = write_data_fn; 1798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project else 1808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_ptr->write_data_fn = png_default_write_data; 1818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 1828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_ptr->write_data_fn = write_data_fn; 1838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 1848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(PNG_WRITE_FLUSH_SUPPORTED) 1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if !defined(PNG_NO_STDIO) 1878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (output_flush_fn != NULL) 1888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_ptr->output_flush_fn = output_flush_fn; 1898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project else 1908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_ptr->output_flush_fn = png_default_flush; 1918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_ptr->output_flush_fn = output_flush_fn; 1938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 1948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* PNG_WRITE_FLUSH_SUPPORTED */ 1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* It is an error to read while writing a png file */ 1978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if (png_ptr->read_data_fn != NULL) 1988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project { 1998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_ptr->read_data_fn = NULL; 2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_warning(png_ptr, 2018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project "Attempted to set both read_data_fn and write_data_fn in"); 2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_warning(png_ptr, 2038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project "the same structure. Resetting read_data_fn to NULL."); 2048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project } 2058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(USE_FAR_KEYWORD) 2088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(_MSC_VER) 2098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) 2108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *near_ptr; 2128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void FAR *far_ptr; 2138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project FP_OFF(near_ptr) = FP_OFF(ptr); 2148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project far_ptr = (void FAR *)near_ptr; 2158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if(check != 0) 2168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if(FP_SEG(ptr) != FP_SEG(far_ptr)) 2178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_error(png_ptr,"segment lost in conversion"); 2188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return(near_ptr); 2198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# else 2218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check) 2228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{ 2238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *near_ptr; 2248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void FAR *far_ptr; 2258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project near_ptr = (void FAR *)ptr; 2268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project far_ptr = (void FAR *)near_ptr; 2278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if(check != 0) 2288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project if(far_ptr != ptr) 2298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project png_error(png_ptr,"segment lost in conversion"); 2308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project return(near_ptr); 2318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} 2328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# endif 2338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# endif 2348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* PNG_WRITE_SUPPORTED */ 235