"Fossies" - the Fresh Open Source Software Archive

Member "stella-6.0.2/src/libpng/pngrio.c" (11 Oct 2019, 3898 Bytes) of package /linux/privat/stella-6.0.2-src.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "pngrio.c" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 5.1.3_vs_6.0.

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