mirror of
https://github.com/glennrp/libpng.git
synced 2026-10-24 08:39:18 +03:00
Following up on commit 7c67f70da1:
Replace 22 deprecated pointer typedefs with their underlying types.
The typedefs replaced are:
1. Core structure types:
- png_structp, png_structrp, png_structpp and const variants
- png_infop, png_inforp, png_infopp and const variants
2. Utility structure types:
- png_row_infop, png_row_infopp
- png_imagep, png_imagepp
- png_controlp
3. Color structure types:
- png_colorp, png_colorpp and const variants
- png_color_8p, png_color_8pp and const variants
- png_color_16p, png_color_16pp and const variants
4. Text and time structure types:
- png_textp, png_textpp and const variants
- png_timep, png_timepp and const variants
5. Chunk structure types:
- png_unknown_chunkp, png_unknown_chunkpp and const variants
- png_sPLT_tp, png_sPLT_tpp and const variants
- png_sPLT_entryp, png_sPLT_entrypp and const variants
6. Internal types:
- png_compression_bufferp
- png_dsortp, png_dsortpp
Remove all remaining uses of spurious PNG_RESTRICT qualifiers.
Non-aliasing has already been guaranteed by the type-based aliasing
rules combined with the libpng usage pattern of a single pointer per
type.
Update the user manual accordingly.
This completes the systematic replacement of deprecated pointer
typedefs across the entire libpng codebase. The typedef declarations
remain in png.h for backward compatibility, marked as deprecated.
Reviewed-by: Chris Blume <ProgramMax@gmail.com>
Signed-off-by: Cosmin Truta <ctruta@gmail.com>
120 lines
3.8 KiB
C
120 lines
3.8 KiB
C
/* pngrio.c - functions for data input
|
|
*
|
|
* Copyright (c) 2018-2025 Cosmin Truta
|
|
* Copyright (c) 1998-2002,2004,2006-2016,2018 Glenn Randers-Pehrson
|
|
* Copyright (c) 1996-1997 Andreas Dilger
|
|
* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
|
*
|
|
* This code is released under the libpng license.
|
|
* For conditions of distribution and use, see the disclaimer
|
|
* and license in png.h
|
|
*
|
|
* 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(...).
|
|
*/
|
|
|
|
#include "pngpriv.h"
|
|
|
|
#ifdef 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 than 64K on a 16-bit machine.
|
|
*/
|
|
void /* PRIVATE */
|
|
png_read_data(png_struct *png_ptr, png_byte *data, size_t length)
|
|
{
|
|
png_debug1(4, "reading %d bytes", (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");
|
|
}
|
|
|
|
#ifdef PNG_STDIO_SUPPORTED
|
|
/* 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.
|
|
*/
|
|
void
|
|
png_default_read_data(png_struct *png_ptr, png_byte *data, size_t length)
|
|
{
|
|
size_t check;
|
|
|
|
if (png_ptr == NULL)
|
|
return;
|
|
|
|
/* fread() returns 0 on error, so it is OK to store this in a size_t
|
|
* instead of an int, which is what fread() actually returns.
|
|
*/
|
|
check = fread(data, 1, length, png_voidcast(FILE *, png_ptr->io_ptr));
|
|
|
|
if (check != length)
|
|
png_error(png_ptr, "Read Error");
|
|
}
|
|
#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").
|
|
* May be NULL, in which case libpng's default function will
|
|
* be used.
|
|
*/
|
|
void
|
|
png_set_read_fn(png_struct *png_ptr, void *io_ptr,
|
|
png_rw_ptr read_data_fn)
|
|
{
|
|
if (png_ptr == NULL)
|
|
return;
|
|
|
|
png_ptr->io_ptr = io_ptr;
|
|
|
|
#ifdef PNG_STDIO_SUPPORTED
|
|
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
|
|
|
|
#ifdef PNG_WRITE_SUPPORTED
|
|
/* 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,
|
|
"Can't set both read_data_fn and write_data_fn in the"
|
|
" same structure");
|
|
}
|
|
#endif
|
|
|
|
#ifdef PNG_WRITE_FLUSH_SUPPORTED
|
|
png_ptr->output_flush_fn = NULL;
|
|
#endif
|
|
}
|
|
#endif /* READ */
|