Cleanup: Get this rid of "this->" in fpdfsdk/
[pdfium.git] / samples / fx_lpng / lpng_v163 / fx_pngrio.c
1 /* pngrio.c - functions for data input\r
2  *\r
3  * Last changed in libpng 1.6.0 [February 14, 2013]\r
4  * Copyright (c) 1998-2013 Glenn Randers-Pehrson\r
5  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)\r
6  * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)\r
7  *\r
8  * This code is released under the libpng license.\r
9  * For conditions of distribution and use, see the disclaimer\r
10  * and license in png.h\r
11  *\r
12  * This file provides a location for all input.  Users who need\r
13  * special handling are expected to write a function that has the same\r
14  * arguments as this and performs a similar function, but that possibly\r
15  * has a different input method.  Note that you shouldn't change this\r
16  * function, but rather write a replacement function and then make\r
17  * libpng use it at run time with png_set_read_fn(...).\r
18  */\r
19 \r
20 #include "pngpriv.h"\r
21 \r
22 #ifdef PNG_READ_SUPPORTED\r
23 \r
24 /* Read the data from whatever input you are using.  The default routine\r
25  * reads from a file pointer.  Note that this routine sometimes gets called\r
26  * with very small lengths, so you should implement some kind of simple\r
27  * buffering if you are using unbuffered reads.  This should never be asked\r
28  * to read more then 64K on a 16 bit machine.\r
29  */\r
30 void /* PRIVATE */\r
31 png_read_data(png_structrp png_ptr, png_bytep data, png_size_t length)\r
32 {\r
33    png_debug1(4, "reading %d bytes", (int)length);\r
34 \r
35    if (png_ptr->read_data_fn != NULL)\r
36       (*(png_ptr->read_data_fn))(png_ptr, data, length);\r
37 \r
38    else\r
39       png_error(png_ptr, "Call to NULL read function");\r
40 }\r
41 \r
42 #ifdef PNG_STDIO_SUPPORTED\r
43 /* This is the function that does the actual reading of data.  If you are\r
44  * not reading from a standard C stream, you should create a replacement\r
45  * read_data function and use it at run time with png_set_read_fn(), rather\r
46  * than changing the library.\r
47  */\r
48 void PNGCBAPI\r
49 png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)\r
50 {\r
51    png_size_t check;\r
52 \r
53    if (png_ptr == NULL)\r
54       return;\r
55 \r
56    /* fread() returns 0 on error, so it is OK to store this in a png_size_t\r
57     * instead of an int, which is what fread() actually returns.\r
58     */\r
59    check = fread(data, 1, length, png_voidcast(png_FILE_p, png_ptr->io_ptr));\r
60 \r
61    if (check != length)\r
62       png_error(png_ptr, "Read Error");\r
63 }\r
64 #endif\r
65 \r
66 /* This function allows the application to supply a new input function\r
67  * for libpng if standard C streams aren't being used.\r
68  *\r
69  * This function takes as its arguments:\r
70  *\r
71  * png_ptr      - pointer to a png input data structure\r
72  *\r
73  * io_ptr       - pointer to user supplied structure containing info about\r
74  *                the input functions.  May be NULL.\r
75  *\r
76  * read_data_fn - pointer to a new input function that takes as its\r
77  *                arguments a pointer to a png_struct, a pointer to\r
78  *                a location where input data can be stored, and a 32-bit\r
79  *                unsigned int that is the number of bytes to be read.\r
80  *                To exit and output any fatal error messages the new write\r
81  *                function should call png_error(png_ptr, "Error msg").\r
82  *                May be NULL, in which case libpng's default function will\r
83  *                be used.\r
84  */\r
85 void PNGAPI\r
86 png_set_read_fn(png_structrp png_ptr, png_voidp io_ptr,\r
87    png_rw_ptr read_data_fn)\r
88 {\r
89    if (png_ptr == NULL)\r
90       return;\r
91 \r
92    png_ptr->io_ptr = io_ptr;\r
93 \r
94 #ifdef PNG_STDIO_SUPPORTED\r
95    if (read_data_fn != NULL)\r
96       png_ptr->read_data_fn = read_data_fn;\r
97 \r
98    else\r
99       png_ptr->read_data_fn = png_default_read_data;\r
100 #else\r
101    png_ptr->read_data_fn = read_data_fn;\r
102 #endif\r
103 \r
104    /* It is an error to write to a read device */\r
105    if (png_ptr->write_data_fn != NULL)\r
106    {\r
107       png_ptr->write_data_fn = NULL;\r
108       png_warning(png_ptr,\r
109           "Can't set both read_data_fn and write_data_fn in the"\r
110           " same structure");\r
111    }\r
112 \r
113 #ifdef PNG_WRITE_FLUSH_SUPPORTED\r
114    png_ptr->output_flush_fn = NULL;\r
115 #endif\r
116 }\r
117 #endif /* PNG_READ_SUPPORTED */\r