2
/* pngget.c - retrieval of values from info struct
4
* Last changed in libpng 1.4.2 [May 6, 2010]
5
* Copyright (c) 1998-2010 Glenn Randers-Pehrson
6
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
7
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
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
15
#define PNG_NO_PEDANTIC_WARNINGS
17
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
21
png_get_valid(png_structp png_ptr, png_infop info_ptr, png_uint_32 flag)
23
if (png_ptr != NULL && info_ptr != NULL)
24
return(info_ptr->valid & flag);
31
png_get_rowbytes(png_structp png_ptr, png_infop info_ptr)
33
if (png_ptr != NULL && info_ptr != NULL)
34
return(info_ptr->rowbytes);
40
#ifdef PNG_INFO_IMAGE_SUPPORTED
42
png_get_rows(png_structp png_ptr, png_infop info_ptr)
44
if (png_ptr != NULL && info_ptr != NULL)
45
return(info_ptr->row_pointers);
52
#ifdef PNG_EASY_ACCESS_SUPPORTED
53
/* Easy access to info, added in libpng-0.99 */
55
png_get_image_width(png_structp png_ptr, png_infop info_ptr)
57
if (png_ptr != NULL && info_ptr != NULL)
58
return info_ptr->width;
64
png_get_image_height(png_structp png_ptr, png_infop info_ptr)
66
if (png_ptr != NULL && info_ptr != NULL)
67
return info_ptr->height;
73
png_get_bit_depth(png_structp png_ptr, png_infop info_ptr)
75
if (png_ptr != NULL && info_ptr != NULL)
76
return info_ptr->bit_depth;
82
png_get_color_type(png_structp png_ptr, png_infop info_ptr)
84
if (png_ptr != NULL && info_ptr != NULL)
85
return info_ptr->color_type;
91
png_get_filter_type(png_structp png_ptr, png_infop info_ptr)
93
if (png_ptr != NULL && info_ptr != NULL)
94
return info_ptr->filter_type;
100
png_get_interlace_type(png_structp png_ptr, png_infop info_ptr)
102
if (png_ptr != NULL && info_ptr != NULL)
103
return info_ptr->interlace_type;
109
png_get_compression_type(png_structp png_ptr, png_infop info_ptr)
111
if (png_ptr != NULL && info_ptr != NULL)
112
return info_ptr->compression_type;
118
png_get_x_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
120
if (png_ptr != NULL && info_ptr != NULL)
121
#ifdef PNG_pHYs_SUPPORTED
122
if (info_ptr->valid & PNG_INFO_pHYs)
124
png_debug1(1, "in %s retrieval function", "png_get_x_pixels_per_meter");
126
if (info_ptr->phys_unit_type != PNG_RESOLUTION_METER)
130
return (info_ptr->x_pixels_per_unit);
139
png_get_y_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
141
if (png_ptr != NULL && info_ptr != NULL)
142
#ifdef PNG_pHYs_SUPPORTED
143
if (info_ptr->valid & PNG_INFO_pHYs)
145
png_debug1(1, "in %s retrieval function", "png_get_y_pixels_per_meter");
147
if (info_ptr->phys_unit_type != PNG_RESOLUTION_METER)
151
return (info_ptr->y_pixels_per_unit);
160
png_get_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
162
if (png_ptr != NULL && info_ptr != NULL)
163
#ifdef PNG_pHYs_SUPPORTED
164
if (info_ptr->valid & PNG_INFO_pHYs)
166
png_debug1(1, "in %s retrieval function", "png_get_pixels_per_meter");
168
if (info_ptr->phys_unit_type != PNG_RESOLUTION_METER ||
169
info_ptr->x_pixels_per_unit != info_ptr->y_pixels_per_unit)
173
return (info_ptr->x_pixels_per_unit);
181
#ifdef PNG_FLOATING_POINT_SUPPORTED
183
png_get_pixel_aspect_ratio(png_structp png_ptr, png_infop info_ptr)
185
if (png_ptr != NULL && info_ptr != NULL)
186
#ifdef PNG_pHYs_SUPPORTED
188
if (info_ptr->valid & PNG_INFO_pHYs)
190
png_debug1(1, "in %s retrieval function", "png_get_aspect_ratio");
192
if (info_ptr->x_pixels_per_unit == 0)
196
return ((float)((float)info_ptr->y_pixels_per_unit
197
/(float)info_ptr->x_pixels_per_unit));
207
png_get_x_offset_microns(png_structp png_ptr, png_infop info_ptr)
209
if (png_ptr != NULL && info_ptr != NULL)
210
#ifdef PNG_oFFs_SUPPORTED
212
if (info_ptr->valid & PNG_INFO_oFFs)
214
png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns");
216
if (info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER)
220
return (info_ptr->x_offset);
229
png_get_y_offset_microns(png_structp png_ptr, png_infop info_ptr)
231
if (png_ptr != NULL && info_ptr != NULL)
233
#ifdef PNG_oFFs_SUPPORTED
234
if (info_ptr->valid & PNG_INFO_oFFs)
236
png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns");
238
if (info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER)
242
return (info_ptr->y_offset);
251
png_get_x_offset_pixels(png_structp png_ptr, png_infop info_ptr)
253
if (png_ptr != NULL && info_ptr != NULL)
255
#ifdef PNG_oFFs_SUPPORTED
256
if (info_ptr->valid & PNG_INFO_oFFs)
258
png_debug1(1, "in %s retrieval function", "png_get_x_offset_microns");
260
if (info_ptr->offset_unit_type != PNG_OFFSET_PIXEL)
264
return (info_ptr->x_offset);
273
png_get_y_offset_pixels(png_structp png_ptr, png_infop info_ptr)
275
if (png_ptr != NULL && info_ptr != NULL)
277
#ifdef PNG_oFFs_SUPPORTED
278
if (info_ptr->valid & PNG_INFO_oFFs)
280
png_debug1(1, "in %s retrieval function", "png_get_y_offset_microns");
282
if (info_ptr->offset_unit_type != PNG_OFFSET_PIXEL)
286
return (info_ptr->y_offset);
294
#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
296
png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
298
return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr)
303
png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
305
return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr)
310
png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
312
return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr)
317
png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr)
319
return ((float)png_get_x_offset_microns(png_ptr, info_ptr)
324
png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
326
return ((float)png_get_y_offset_microns(png_ptr, info_ptr)
330
#ifdef PNG_pHYs_SUPPORTED
332
png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
333
png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
335
png_uint_32 retval = 0;
337
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
339
png_debug1(1, "in %s retrieval function", "pHYs");
343
*res_x = info_ptr->x_pixels_per_unit;
344
retval |= PNG_INFO_pHYs;
348
*res_y = info_ptr->y_pixels_per_unit;
349
retval |= PNG_INFO_pHYs;
351
if (unit_type != NULL)
353
*unit_type = (int)info_ptr->phys_unit_type;
354
retval |= PNG_INFO_pHYs;
357
if (res_x != NULL) *res_x = (png_uint_32)(*res_x * .0254 + .50);
358
if (res_y != NULL) *res_y = (png_uint_32)(*res_y * .0254 + .50);
364
#endif /* PNG_pHYs_SUPPORTED */
365
#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
367
/* png_get_channels really belongs in here, too, but it's been around longer */
369
#endif /* PNG_EASY_ACCESS_SUPPORTED */
372
png_get_channels(png_structp png_ptr, png_infop info_ptr)
374
if (png_ptr != NULL && info_ptr != NULL)
375
return(info_ptr->channels);
381
png_get_signature(png_structp png_ptr, png_infop info_ptr)
383
if (png_ptr != NULL && info_ptr != NULL)
384
return(info_ptr->signature);
389
#ifdef PNG_bKGD_SUPPORTED
391
png_get_bKGD(png_structp png_ptr, png_infop info_ptr,
392
png_color_16p *background)
394
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD)
395
&& background != NULL)
397
png_debug1(1, "in %s retrieval function", "bKGD");
399
*background = &(info_ptr->background);
400
return (PNG_INFO_bKGD);
406
#ifdef PNG_cHRM_SUPPORTED
407
#ifdef PNG_FLOATING_POINT_SUPPORTED
409
png_get_cHRM(png_structp png_ptr, png_infop info_ptr,
410
double *white_x, double *white_y, double *red_x, double *red_y,
411
double *green_x, double *green_y, double *blue_x, double *blue_y)
413
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
415
png_debug1(1, "in %s retrieval function", "cHRM");
418
*white_x = (double)info_ptr->x_white;
420
*white_y = (double)info_ptr->y_white;
422
*red_x = (double)info_ptr->x_red;
424
*red_y = (double)info_ptr->y_red;
426
*green_x = (double)info_ptr->x_green;
428
*green_y = (double)info_ptr->y_green;
430
*blue_x = (double)info_ptr->x_blue;
432
*blue_y = (double)info_ptr->y_blue;
433
return (PNG_INFO_cHRM);
438
#ifdef PNG_FIXED_POINT_SUPPORTED
440
png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
441
png_fixed_point *white_x, png_fixed_point *white_y, png_fixed_point *red_x,
442
png_fixed_point *red_y, png_fixed_point *green_x, png_fixed_point *green_y,
443
png_fixed_point *blue_x, png_fixed_point *blue_y)
445
png_debug1(1, "in %s retrieval function", "cHRM");
447
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
450
*white_x = info_ptr->int_x_white;
452
*white_y = info_ptr->int_y_white;
454
*red_x = info_ptr->int_x_red;
456
*red_y = info_ptr->int_y_red;
458
*green_x = info_ptr->int_x_green;
460
*green_y = info_ptr->int_y_green;
462
*blue_x = info_ptr->int_x_blue;
464
*blue_y = info_ptr->int_y_blue;
465
return (PNG_INFO_cHRM);
472
#ifdef PNG_gAMA_SUPPORTED
473
#ifdef PNG_FLOATING_POINT_SUPPORTED
475
png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma)
477
png_debug1(1, "in %s retrieval function", "gAMA");
479
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
480
&& file_gamma != NULL)
482
*file_gamma = (double)info_ptr->gamma;
483
return (PNG_INFO_gAMA);
488
#ifdef PNG_FIXED_POINT_SUPPORTED
490
png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr,
491
png_fixed_point *int_file_gamma)
493
png_debug1(1, "in %s retrieval function", "gAMA");
495
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
496
&& int_file_gamma != NULL)
498
*int_file_gamma = info_ptr->int_gamma;
499
return (PNG_INFO_gAMA);
506
#ifdef PNG_sRGB_SUPPORTED
508
png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent)
510
png_debug1(1, "in %s retrieval function", "sRGB");
512
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB)
513
&& file_srgb_intent != NULL)
515
*file_srgb_intent = (int)info_ptr->srgb_intent;
516
return (PNG_INFO_sRGB);
522
#ifdef PNG_iCCP_SUPPORTED
524
png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
525
png_charpp name, int *compression_type,
526
png_charpp profile, png_uint_32 *proflen)
528
png_debug1(1, "in %s retrieval function", "iCCP");
530
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_iCCP)
531
&& name != NULL && profile != NULL && proflen != NULL)
533
*name = info_ptr->iccp_name;
534
*profile = info_ptr->iccp_profile;
535
/* Compression_type is a dummy so the API won't have to change
536
* if we introduce multiple compression types later.
538
*proflen = (int)info_ptr->iccp_proflen;
539
*compression_type = (int)info_ptr->iccp_compression;
540
return (PNG_INFO_iCCP);
546
#ifdef PNG_sPLT_SUPPORTED
548
png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
549
png_sPLT_tpp spalettes)
551
if (png_ptr != NULL && info_ptr != NULL && spalettes != NULL)
553
*spalettes = info_ptr->splt_palettes;
554
return ((png_uint_32)info_ptr->splt_palettes_num);
560
#ifdef PNG_hIST_SUPPORTED
562
png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist)
564
png_debug1(1, "in %s retrieval function", "hIST");
566
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST)
569
*hist = info_ptr->hist;
570
return (PNG_INFO_hIST);
577
png_get_IHDR(png_structp png_ptr, png_infop info_ptr,
578
png_uint_32 *width, png_uint_32 *height, int *bit_depth,
579
int *color_type, int *interlace_type, int *compression_type,
583
png_debug1(1, "in %s retrieval function", "IHDR");
585
if (png_ptr == NULL || info_ptr == NULL || width == NULL ||
586
height == NULL || bit_depth == NULL || color_type == NULL)
589
*width = info_ptr->width;
590
*height = info_ptr->height;
591
*bit_depth = info_ptr->bit_depth;
592
*color_type = info_ptr->color_type;
594
if (compression_type != NULL)
595
*compression_type = info_ptr->compression_type;
597
if (filter_type != NULL)
598
*filter_type = info_ptr->filter_type;
600
if (interlace_type != NULL)
601
*interlace_type = info_ptr->interlace_type;
603
/* This is redundant if we can be sure that the info_ptr values were all
604
* assigned in png_set_IHDR(). We do the check anyhow in case an
605
* application has ignored our advice not to mess with the members
606
* of info_ptr directly.
608
png_check_IHDR (png_ptr, info_ptr->width, info_ptr->height,
609
info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
610
info_ptr->compression_type, info_ptr->filter_type);
615
#ifdef PNG_oFFs_SUPPORTED
617
png_get_oFFs(png_structp png_ptr, png_infop info_ptr,
618
png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)
620
png_debug1(1, "in %s retrieval function", "oFFs");
622
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)
623
&& offset_x != NULL && offset_y != NULL && unit_type != NULL)
625
*offset_x = info_ptr->x_offset;
626
*offset_y = info_ptr->y_offset;
627
*unit_type = (int)info_ptr->offset_unit_type;
628
return (PNG_INFO_oFFs);
634
#ifdef PNG_pCAL_SUPPORTED
636
png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
637
png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
638
png_charp *units, png_charpp *params)
640
png_debug1(1, "in %s retrieval function", "pCAL");
642
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pCAL)
643
&& purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
644
nparams != NULL && units != NULL && params != NULL)
646
*purpose = info_ptr->pcal_purpose;
647
*X0 = info_ptr->pcal_X0;
648
*X1 = info_ptr->pcal_X1;
649
*type = (int)info_ptr->pcal_type;
650
*nparams = (int)info_ptr->pcal_nparams;
651
*units = info_ptr->pcal_units;
652
*params = info_ptr->pcal_params;
653
return (PNG_INFO_pCAL);
659
#ifdef PNG_sCAL_SUPPORTED
660
#ifdef PNG_FLOATING_POINT_SUPPORTED
662
png_get_sCAL(png_structp png_ptr, png_infop info_ptr,
663
int *unit, double *width, double *height)
665
if (png_ptr != NULL && info_ptr != NULL &&
666
(info_ptr->valid & PNG_INFO_sCAL))
668
*unit = info_ptr->scal_unit;
669
*width = info_ptr->scal_pixel_width;
670
*height = info_ptr->scal_pixel_height;
671
return (PNG_INFO_sCAL);
676
#ifdef PNG_FIXED_POINT_SUPPORTED
678
png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr,
679
int *unit, png_charpp width, png_charpp height)
681
if (png_ptr != NULL && info_ptr != NULL &&
682
(info_ptr->valid & PNG_INFO_sCAL))
684
*unit = info_ptr->scal_unit;
685
*width = info_ptr->scal_s_width;
686
*height = info_ptr->scal_s_height;
687
return (PNG_INFO_sCAL);
695
#ifdef PNG_pHYs_SUPPORTED
697
png_get_pHYs(png_structp png_ptr, png_infop info_ptr,
698
png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
700
png_uint_32 retval = 0;
702
png_debug1(1, "in %s retrieval function", "pHYs");
704
if (png_ptr != NULL && info_ptr != NULL &&
705
(info_ptr->valid & PNG_INFO_pHYs))
709
*res_x = info_ptr->x_pixels_per_unit;
710
retval |= PNG_INFO_pHYs;
715
*res_y = info_ptr->y_pixels_per_unit;
716
retval |= PNG_INFO_pHYs;
719
if (unit_type != NULL)
721
*unit_type = (int)info_ptr->phys_unit_type;
722
retval |= PNG_INFO_pHYs;
730
png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette,
733
png_debug1(1, "in %s retrieval function", "PLTE");
735
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_PLTE)
738
*palette = info_ptr->palette;
739
*num_palette = info_ptr->num_palette;
740
png_debug1(3, "num_palette = %d", *num_palette);
741
return (PNG_INFO_PLTE);
746
#ifdef PNG_sBIT_SUPPORTED
748
png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
750
png_debug1(1, "in %s retrieval function", "sBIT");
752
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sBIT)
755
*sig_bit = &(info_ptr->sig_bit);
756
return (PNG_INFO_sBIT);
762
#ifdef PNG_TEXT_SUPPORTED
764
png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
767
if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0)
769
png_debug1(1, "in %s retrieval function",
770
(png_ptr->chunk_name[0] == '\0' ? "text"
771
: (png_const_charp)png_ptr->chunk_name));
773
if (text_ptr != NULL)
774
*text_ptr = info_ptr->text;
776
if (num_text != NULL)
777
*num_text = info_ptr->num_text;
779
return ((png_uint_32)info_ptr->num_text);
781
if (num_text != NULL)
787
#ifdef PNG_tIME_SUPPORTED
789
png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
791
png_debug1(1, "in %s retrieval function", "tIME");
793
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tIME)
796
*mod_time = &(info_ptr->mod_time);
797
return (PNG_INFO_tIME);
803
#ifdef PNG_tRNS_SUPPORTED
805
png_get_tRNS(png_structp png_ptr, png_infop info_ptr,
806
png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color)
808
png_uint_32 retval = 0;
809
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_tRNS))
811
png_debug1(1, "in %s retrieval function", "tRNS");
813
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
815
if (trans_alpha != NULL)
817
*trans_alpha = info_ptr->trans_alpha;
818
retval |= PNG_INFO_tRNS;
821
if (trans_color != NULL)
822
*trans_color = &(info_ptr->trans_color);
824
else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */
826
if (trans_color != NULL)
828
*trans_color = &(info_ptr->trans_color);
829
retval |= PNG_INFO_tRNS;
832
if (trans_alpha != NULL)
835
if (num_trans != NULL)
837
*num_trans = info_ptr->num_trans;
838
retval |= PNG_INFO_tRNS;
845
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
847
png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
848
png_unknown_chunkpp unknowns)
850
if (png_ptr != NULL && info_ptr != NULL && unknowns != NULL)
852
*unknowns = info_ptr->unknown_chunks;
853
return ((png_uint_32)info_ptr->unknown_chunks_num);
859
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
861
png_get_rgb_to_gray_status (png_structp png_ptr)
863
return (png_byte)(png_ptr? png_ptr->rgb_to_gray_status : 0);
867
#ifdef PNG_USER_CHUNKS_SUPPORTED
869
png_get_user_chunk_ptr(png_structp png_ptr)
871
return (png_ptr? png_ptr->user_chunk_ptr : NULL);
876
png_get_compression_buffer_size(png_structp png_ptr)
878
return (png_ptr ? png_ptr->zbuf_size : 0L);
882
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
883
/* These functions were added to libpng 1.2.6 and were enabled
884
* by default in libpng-1.4.0 */
886
png_get_user_width_max (png_structp png_ptr)
888
return (png_ptr? png_ptr->user_width_max : 0);
891
png_get_user_height_max (png_structp png_ptr)
893
return (png_ptr? png_ptr->user_height_max : 0);
895
/* This function was added to libpng 1.4.0 */
897
png_get_chunk_cache_max (png_structp png_ptr)
899
return (png_ptr? png_ptr->user_chunk_cache_max : 0);
901
/* This function was added to libpng 1.4.1 */
902
png_alloc_size_t PNGAPI
903
png_get_chunk_malloc_max (png_structp png_ptr)
906
png_ptr->user_chunk_malloc_max : 0);
908
#endif /* ?PNG_SET_USER_LIMITS_SUPPORTED */
910
/* These functions were added to libpng 1.4.0 */
911
#ifdef PNG_IO_STATE_SUPPORTED
913
png_get_io_state (png_structp png_ptr)
915
return png_ptr->io_state;
919
png_get_io_chunk_name (png_structp png_ptr)
921
return png_ptr->chunk_name;
923
#endif /* ?PNG_IO_STATE_SUPPORTED */
925
#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */