png.c
Go to the documentation of this file.
1 
2 /* png.c - location for general purpose libpng functions
3  *
4  * Last changed in libpng 1.2.30 [August 15, 2008]
5  * For conditions of distribution and use, see copyright notice in png.h
6  * Copyright (c) 1998-2008 Glenn Randers-Pehrson
7  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
8  * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
9  */
10 
11 #define PNG_INTERNAL
12 #define PNG_NO_EXTERN
13 #include "png.h"
14 
15 /* Generate a compiler error if there is an old png.h in the search path. */
17 
18 /* Version information for C files. This had better match the version
19  * string defined in png.h. */
20 
21 #ifdef PNG_USE_GLOBAL_ARRAYS
22 /* png_libpng_ver was changed to a function in version 1.0.5c */
24 
25 #ifdef PNG_READ_SUPPORTED
26 
27 /* png_sig was changed to a function in version 1.0.5c */
28 /* Place to hold the signature string for a PNG file. */
29 PNG_CONST png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
30 #endif /* PNG_READ_SUPPORTED */
31 
32 /* Invoke global declarations for constant strings for known chunk types */
54 
55 #ifdef PNG_READ_SUPPORTED
56 /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
57 
58 /* start of interlace block */
59 PNG_CONST int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
60 
61 /* offset to next interlace block */
62 PNG_CONST int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
63 
64 /* start of interlace block in the y direction */
65 PNG_CONST int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
66 
67 /* offset to next interlace block in the y direction */
68 PNG_CONST int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
69 
70 /* Height of interlace block. This is not currently used - if you need
71  * it, uncomment it here and in png.h
72 PNG_CONST int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
73 */
74 
75 /* Mask to determine which pixels are valid in a pass */
76 PNG_CONST int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
77 
78 /* Mask to determine which pixels to overwrite while displaying */
80  = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
81 
82 #endif /* PNG_READ_SUPPORTED */
83 #endif /* PNG_USE_GLOBAL_ARRAYS */
84 
85 /* Tells libpng that we have already handled the first "num_bytes" bytes
86  * of the PNG file signature. If the PNG data is embedded into another
87  * stream we can set num_bytes = 8 so that libpng will not attempt to read
88  * or write any of the magic bytes before it starts on the IHDR.
89  */
90 
91 #ifdef PNG_READ_SUPPORTED
92 void PNGAPI
94 {
95  if (png_ptr == NULL) return;
96  png_debug(1, "in png_set_sig_bytes\n");
97  if (num_bytes > 8)
98  png_error(png_ptr, "Too many bytes for PNG signature.");
99 
100  png_ptr->sig_bytes = (png_byte)(num_bytes < 0 ? 0 : num_bytes);
101 }
102 
103 /* Checks whether the supplied bytes match the PNG signature. We allow
104  * checking less than the full 8-byte signature so that those apps that
105  * already read the first few bytes of a file to determine the file type
106  * can simply check the remaining bytes for extra assurance. Returns
107  * an integer less than, equal to, or greater than zero if sig is found,
108  * respectively, to be less than, to match, or be greater than the correct
109  * PNG signature (this is the same behaviour as strcmp, memcmp, etc).
110  */
111 int PNGAPI
113 {
114  png_byte png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
115  if (num_to_check > 8)
116  num_to_check = 8;
117  else if (num_to_check < 1)
118  return (-1);
119 
120  if (start > 7)
121  return (-1);
122 
123  if (start + num_to_check > 8)
124  num_to_check = 8 - start;
125 
126  return ((int)(png_memcmp(&sig[start], &png_signature[start], num_to_check)));
127 }
128 
129 #if defined(PNG_1_0_X) || defined(PNG_1_2_X)
130 /* (Obsolete) function to check signature bytes. It does not allow one
131  * to check a partial signature. This function might be removed in the
132  * future - use png_sig_cmp(). Returns true (nonzero) if the file is PNG.
133  */
134 int PNGAPI
136 {
137  return ((int)!png_sig_cmp(sig, (png_size_t)0, (png_size_t)num));
138 }
139 #endif
140 #endif /* PNG_READ_SUPPORTED */
141 
142 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
143 /* Function to allocate memory for zlib and clear it to 0. */
144 #ifdef PNG_1_0_X
146 #else
147 voidpf /* private */
148 #endif
149 png_zalloc(voidpf png_ptr, uInt items, uInt size)
150 {
151  png_voidp ptr;
152  png_structp p=(png_structp)png_ptr;
153  png_uint_32 save_flags=p->flags;
155 
156  if (png_ptr == NULL) return (NULL);
157  if (items > PNG_UINT_32_MAX/size)
158  {
159  png_warning (p, "Potential overflow in png_zalloc()");
160  return (NULL);
161  }
162  num_bytes = (png_uint_32)items * size;
163 
164  p->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK;
165  ptr = (png_voidp)png_malloc((png_structp)png_ptr, num_bytes);
166  p->flags=save_flags;
167 
168 #if defined(PNG_1_0_X) && !defined(PNG_NO_ZALLOC_ZERO)
169  if (ptr == NULL)
170  return ((voidpf)ptr);
171 
172  if (num_bytes > (png_uint_32)0x8000L)
173  {
174  png_memset(ptr, 0, (png_size_t)0x8000L);
175  png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0,
176  (png_size_t)(num_bytes - (png_uint_32)0x8000L));
177  }
178  else
179  {
180  png_memset(ptr, 0, (png_size_t)num_bytes);
181  }
182 #endif
183  return ((voidpf)ptr);
184 }
185 
186 /* function to free memory for zlib */
187 #ifdef PNG_1_0_X
188 void PNGAPI
189 #else
190 void /* private */
191 #endif
193 {
194  png_free((png_structp)png_ptr, (png_voidp)ptr);
195 }
196 
197 /* Reset the CRC variable to 32 bits of 1's. Care must be taken
198  * in case CRC is > 32 bits to leave the top bits 0.
199  */
200 void /* PRIVATE */
202 {
203  png_ptr->crc = crc32(0, Z_NULL, 0);
204 }
205 
206 /* Calculate the CRC over a section of data. We can only pass as
207  * much data to this routine as the largest single buffer size. We
208  * also check that this data will actually be used before going to the
209  * trouble of calculating it.
210  */
211 void /* PRIVATE */
213 {
214  int need_crc = 1;
215 
216  if (png_ptr->chunk_name[0] & 0x20) /* ancillary */
217  {
218  if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
219  (PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
220  need_crc = 0;
221  }
222  else /* critical */
223  {
224  if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE)
225  need_crc = 0;
226  }
227 
228  if (need_crc)
229  png_ptr->crc = crc32(png_ptr->crc, ptr, (uInt)length);
230 }
231 
232 /* Allocate the memory for an info_struct for the application. We don't
233  * really need the png_ptr, but it could potentially be useful in the
234  * future. This should be used in favour of malloc(png_sizeof(png_info))
235  * and png_info_init() so that applications that want to use a shared
236  * libpng don't have to be recompiled if png_info changes size.
237  */
240 {
242 
243  png_debug(1, "in png_create_info_struct\n");
244  if (png_ptr == NULL) return (NULL);
245 #ifdef PNG_USER_MEM_SUPPORTED
246  info_ptr = (png_infop)png_create_struct_2(PNG_STRUCT_INFO,
247  png_ptr->malloc_fn, png_ptr->mem_ptr);
248 #else
249  info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO);
250 #endif
251  if (info_ptr != NULL)
252  png_info_init_3(&info_ptr, png_sizeof(png_info));
253 
254  return (info_ptr);
255 }
256 
257 /* This function frees the memory associated with a single info struct.
258  * Normally, one would use either png_destroy_read_struct() or
259  * png_destroy_write_struct() to free an info struct, but this may be
260  * useful for some applications.
261  */
262 void PNGAPI
264 {
265  png_infop info_ptr = NULL;
266  if (png_ptr == NULL) return;
267 
268  png_debug(1, "in png_destroy_info_struct\n");
269  if (info_ptr_ptr != NULL)
270  info_ptr = *info_ptr_ptr;
271 
272  if (info_ptr != NULL)
273  {
274  png_info_destroy(png_ptr, info_ptr);
275 
276 #ifdef PNG_USER_MEM_SUPPORTED
277  png_destroy_struct_2((png_voidp)info_ptr, png_ptr->free_fn,
278  png_ptr->mem_ptr);
279 #else
280  png_destroy_struct((png_voidp)info_ptr);
281 #endif
282  *info_ptr_ptr = NULL;
283  }
284 }
285 
286 /* Initialize the info structure. This is now an internal function (0.89)
287  * and applications using it are urged to use png_create_info_struct()
288  * instead.
289  */
290 #if defined(PNG_1_0_X) || defined(PNG_1_2_X)
291 #undef png_info_init
292 void PNGAPI
294 {
295  /* We only come here via pre-1.0.12-compiled applications */
296  png_info_init_3(&info_ptr, 0);
297 }
298 #endif
299 
300 void PNGAPI
302 {
303  png_infop info_ptr = *ptr_ptr;
304 
305  if (info_ptr == NULL) return;
306 
307  png_debug(1, "in png_info_init_3\n");
308 
309  if (png_sizeof(png_info) > png_info_struct_size)
310  {
311  png_destroy_struct(info_ptr);
312  info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO);
313  *ptr_ptr = info_ptr;
314  }
315 
316  /* set everything to 0 */
317  png_memset(info_ptr, 0, png_sizeof(png_info));
318 }
319 
320 #ifdef PNG_FREE_ME_SUPPORTED
321 void PNGAPI
323  int freer, png_uint_32 mask)
324 {
325  png_debug(1, "in png_data_freer\n");
326  if (png_ptr == NULL || info_ptr == NULL)
327  return;
328  if (freer == PNG_DESTROY_WILL_FREE_DATA)
329  info_ptr->free_me |= mask;
330  else if (freer == PNG_USER_WILL_FREE_DATA)
331  info_ptr->free_me &= ~mask;
332  else
333  png_warning(png_ptr,
334  "Unknown freer parameter in png_data_freer.");
335 }
336 #endif
337 
338 void PNGAPI
340  int num)
341 {
342  png_debug(1, "in png_free_data\n");
343  if (png_ptr == NULL || info_ptr == NULL)
344  return;
345 
346 #if defined(PNG_TEXT_SUPPORTED)
347 /* free text item num or (if num == -1) all text items */
348 #ifdef PNG_FREE_ME_SUPPORTED
349 if ((mask & PNG_FREE_TEXT) & info_ptr->free_me)
350 #else
351 if (mask & PNG_FREE_TEXT)
352 #endif
353 {
354  if (num != -1)
355  {
356  if (info_ptr->text && info_ptr->text[num].key)
357  {
358  png_free(png_ptr, info_ptr->text[num].key);
359  info_ptr->text[num].key = NULL;
360  }
361  }
362  else
363  {
364  int i;
365  for (i = 0; i < info_ptr->num_text; i++)
366  png_free_data(png_ptr, info_ptr, PNG_FREE_TEXT, i);
367  png_free(png_ptr, info_ptr->text);
368  info_ptr->text = NULL;
369  info_ptr->num_text=0;
370  }
371 }
372 #endif
373 
374 #if defined(PNG_tRNS_SUPPORTED)
375 /* free any tRNS entry */
376 #ifdef PNG_FREE_ME_SUPPORTED
377 if ((mask & PNG_FREE_TRNS) & info_ptr->free_me)
378 #else
379 if ((mask & PNG_FREE_TRNS) && (png_ptr->flags & PNG_FLAG_FREE_TRNS))
380 #endif
381 {
382  png_free(png_ptr, info_ptr->trans);
383  info_ptr->trans = NULL;
384  info_ptr->valid &= ~PNG_INFO_tRNS;
385 #ifndef PNG_FREE_ME_SUPPORTED
386  png_ptr->flags &= ~PNG_FLAG_FREE_TRNS;
387 #endif
388 }
389 #endif
390 
391 #if defined(PNG_sCAL_SUPPORTED)
392 /* free any sCAL entry */
393 #ifdef PNG_FREE_ME_SUPPORTED
394 if ((mask & PNG_FREE_SCAL) & info_ptr->free_me)
395 #else
396 if (mask & PNG_FREE_SCAL)
397 #endif
398 {
399 #if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
400  png_free(png_ptr, info_ptr->scal_s_width);
401  png_free(png_ptr, info_ptr->scal_s_height);
402  info_ptr->scal_s_width = NULL;
403  info_ptr->scal_s_height = NULL;
404 #endif
405  info_ptr->valid &= ~PNG_INFO_sCAL;
406 }
407 #endif
408 
409 #if defined(PNG_pCAL_SUPPORTED)
410 /* free any pCAL entry */
411 #ifdef PNG_FREE_ME_SUPPORTED
412 if ((mask & PNG_FREE_PCAL) & info_ptr->free_me)
413 #else
414 if (mask & PNG_FREE_PCAL)
415 #endif
416 {
417  png_free(png_ptr, info_ptr->pcal_purpose);
418  png_free(png_ptr, info_ptr->pcal_units);
419  info_ptr->pcal_purpose = NULL;
420  info_ptr->pcal_units = NULL;
421  if (info_ptr->pcal_params != NULL)
422  {
423  int i;
424  for (i = 0; i < (int)info_ptr->pcal_nparams; i++)
425  {
426  png_free(png_ptr, info_ptr->pcal_params[i]);
427  info_ptr->pcal_params[i]=NULL;
428  }
429  png_free(png_ptr, info_ptr->pcal_params);
430  info_ptr->pcal_params = NULL;
431  }
432  info_ptr->valid &= ~PNG_INFO_pCAL;
433 }
434 #endif
435 
436 #if defined(PNG_iCCP_SUPPORTED)
437 /* free any iCCP entry */
438 #ifdef PNG_FREE_ME_SUPPORTED
439 if ((mask & PNG_FREE_ICCP) & info_ptr->free_me)
440 #else
441 if (mask & PNG_FREE_ICCP)
442 #endif
443 {
444  png_free(png_ptr, info_ptr->iccp_name);
445  png_free(png_ptr, info_ptr->iccp_profile);
446  info_ptr->iccp_name = NULL;
447  info_ptr->iccp_profile = NULL;
448  info_ptr->valid &= ~PNG_INFO_iCCP;
449 }
450 #endif
451 
452 #if defined(PNG_sPLT_SUPPORTED)
453 /* free a given sPLT entry, or (if num == -1) all sPLT entries */
454 #ifdef PNG_FREE_ME_SUPPORTED
455 if ((mask & PNG_FREE_SPLT) & info_ptr->free_me)
456 #else
457 if (mask & PNG_FREE_SPLT)
458 #endif
459 {
460  if (num != -1)
461  {
462  if (info_ptr->splt_palettes)
463  {
464  png_free(png_ptr, info_ptr->splt_palettes[num].name);
465  png_free(png_ptr, info_ptr->splt_palettes[num].entries);
466  info_ptr->splt_palettes[num].name = NULL;
467  info_ptr->splt_palettes[num].entries = NULL;
468  }
469  }
470  else
471  {
472  if (info_ptr->splt_palettes_num)
473  {
474  int i;
475  for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
476  png_free_data(png_ptr, info_ptr, PNG_FREE_SPLT, i);
477 
478  png_free(png_ptr, info_ptr->splt_palettes);
479  info_ptr->splt_palettes = NULL;
480  info_ptr->splt_palettes_num = 0;
481  }
482  info_ptr->valid &= ~PNG_INFO_sPLT;
483  }
484 }
485 #endif
486 
487 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
488  if (png_ptr->unknown_chunk.data)
489  {
490  png_free(png_ptr, png_ptr->unknown_chunk.data);
491  png_ptr->unknown_chunk.data = NULL;
492  }
493 
494 #ifdef PNG_FREE_ME_SUPPORTED
495 if ((mask & PNG_FREE_UNKN) & info_ptr->free_me)
496 #else
497 if (mask & PNG_FREE_UNKN)
498 #endif
499 {
500  if (num != -1)
501  {
502  if (info_ptr->unknown_chunks)
503  {
504  png_free(png_ptr, info_ptr->unknown_chunks[num].data);
505  info_ptr->unknown_chunks[num].data = NULL;
506  }
507  }
508  else
509  {
510  int i;
511 
512  if (info_ptr->unknown_chunks_num)
513  {
514  for (i = 0; i < (int)info_ptr->unknown_chunks_num; i++)
515  png_free_data(png_ptr, info_ptr, PNG_FREE_UNKN, i);
516 
517  png_free(png_ptr, info_ptr->unknown_chunks);
518  info_ptr->unknown_chunks = NULL;
519  info_ptr->unknown_chunks_num = 0;
520  }
521  }
522 }
523 #endif
524 
525 #if defined(PNG_hIST_SUPPORTED)
526 /* free any hIST entry */
527 #ifdef PNG_FREE_ME_SUPPORTED
528 if ((mask & PNG_FREE_HIST) & info_ptr->free_me)
529 #else
530 if ((mask & PNG_FREE_HIST) && (png_ptr->flags & PNG_FLAG_FREE_HIST))
531 #endif
532 {
533  png_free(png_ptr, info_ptr->hist);
534  info_ptr->hist = NULL;
535  info_ptr->valid &= ~PNG_INFO_hIST;
536 #ifndef PNG_FREE_ME_SUPPORTED
537  png_ptr->flags &= ~PNG_FLAG_FREE_HIST;
538 #endif
539 }
540 #endif
541 
542 /* free any PLTE entry that was internally allocated */
543 #ifdef PNG_FREE_ME_SUPPORTED
544 if ((mask & PNG_FREE_PLTE) & info_ptr->free_me)
545 #else
546 if ((mask & PNG_FREE_PLTE) && (png_ptr->flags & PNG_FLAG_FREE_PLTE))
547 #endif
548 {
549  png_zfree(png_ptr, info_ptr->palette);
550  info_ptr->palette = NULL;
551  info_ptr->valid &= ~PNG_INFO_PLTE;
552 #ifndef PNG_FREE_ME_SUPPORTED
553  png_ptr->flags &= ~PNG_FLAG_FREE_PLTE;
554 #endif
555  info_ptr->num_palette = 0;
556 }
557 
558 #if defined(PNG_INFO_IMAGE_SUPPORTED)
559 /* free any image bits attached to the info structure */
560 #ifdef PNG_FREE_ME_SUPPORTED
561 if ((mask & PNG_FREE_ROWS) & info_ptr->free_me)
562 #else
563 if (mask & PNG_FREE_ROWS)
564 #endif
565 {
566  if (info_ptr->row_pointers)
567  {
568  int row;
569  for (row = 0; row < (int)info_ptr->height; row++)
570  {
571  png_free(png_ptr, info_ptr->row_pointers[row]);
572  info_ptr->row_pointers[row]=NULL;
573  }
574  png_free(png_ptr, info_ptr->row_pointers);
575  info_ptr->row_pointers=NULL;
576  }
577  info_ptr->valid &= ~PNG_INFO_IDAT;
578 }
579 #endif
580 
581 #ifdef PNG_FREE_ME_SUPPORTED
582  if (num == -1)
583  info_ptr->free_me &= ~mask;
584  else
585  info_ptr->free_me &= ~(mask & ~PNG_FREE_MUL);
586 #endif
587 }
588 
589 /* This is an internal routine to free any memory that the info struct is
590  * pointing to before re-using it or freeing the struct itself. Recall
591  * that png_free() checks for NULL pointers for us.
592  */
593 void /* PRIVATE */
595 {
596  png_debug(1, "in png_info_destroy\n");
597 
598  png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
599 
600 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
601  if (png_ptr->num_chunk_list)
602  {
603  png_free(png_ptr, png_ptr->chunk_list);
604  png_ptr->chunk_list=NULL;
605  png_ptr->num_chunk_list = 0;
606  }
607 #endif
608 
609  png_info_init_3(&info_ptr, png_sizeof(png_info));
610 }
611 #endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
612 
613 /* This function returns a pointer to the io_ptr associated with the user
614  * functions. The application should free any memory associated with this
615  * pointer before png_write_destroy() or png_read_destroy() are called.
616  */
619 {
620  if (png_ptr == NULL) return (NULL);
621  return (png_ptr->io_ptr);
622 }
623 
624 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
625 #if !defined(PNG_NO_STDIO)
626 /* Initialize the default input/output functions for the PNG file. If you
627  * use your own read or write routines, you can call either png_set_read_fn()
628  * or png_set_write_fn() instead of png_init_io(). If you have defined
629  * PNG_NO_STDIO, you must use a function of your own because "FILE *" isn't
630  * necessarily available.
631  */
632 void PNGAPI
634 {
635  png_debug(1, "in png_init_io\n");
636  if (png_ptr == NULL) return;
637  png_ptr->io_ptr = (png_voidp)fp;
638 }
639 #endif
640 
641 #if defined(PNG_TIME_RFC1123_SUPPORTED)
642 /* Convert the supplied time into an RFC 1123 string suitable for use in
643  * a "Creation Time" or other text-based time string.
644  */
647 {
648  static PNG_CONST char short_months[12][4] =
649  {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
650  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
651 
652  if (png_ptr == NULL) return (NULL);
653  if (png_ptr->time_buffer == NULL)
654  {
655  png_ptr->time_buffer = (png_charp)png_malloc(png_ptr, (png_uint_32)(29*
656  png_sizeof(char)));
657  }
658 
659 #if defined(_WIN32_WCE)
660  {
661  wchar_t time_buf[29];
662  wsprintf(time_buf, TEXT("%d %S %d %02d:%02d:%02d +0000"),
663  ptime->day % 32, short_months[(ptime->month - 1) % 12],
664  ptime->year, ptime->hour % 24, ptime->minute % 60,
665  ptime->second % 61);
666  WideCharToMultiByte(CP_ACP, 0, time_buf, -1, png_ptr->time_buffer, 29,
667  NULL, NULL);
668  }
669 #else
670 #ifdef USE_FAR_KEYWORD
671  {
672  char near_time_buf[29];
673  png_snprintf6(near_time_buf, 29, "%d %s %d %02d:%02d:%02d +0000",
674  ptime->day % 32, short_months[(ptime->month - 1) % 12],
675  ptime->year, ptime->hour % 24, ptime->minute % 60,
676  ptime->second % 61);
677  png_memcpy(png_ptr->time_buffer, near_time_buf,
678  29*png_sizeof(char));
679  }
680 #else
681  png_snprintf6(png_ptr->time_buffer, 29, "%d %s %d %02d:%02d:%02d +0000",
682  ptime->day % 32, short_months[(ptime->month - 1) % 12],
683  ptime->year, ptime->hour % 24, ptime->minute % 60,
684  ptime->second % 61);
685 #endif
686 #endif /* _WIN32_WCE */
687  return ((png_charp)png_ptr->time_buffer);
688 }
689 #endif /* PNG_TIME_RFC1123_SUPPORTED */
690 
691 #endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
692 
695 {
696  png_ptr = png_ptr; /* silence compiler warning about unused png_ptr */
697  return ((png_charp) "\n libpng version 1.2.32 - September 18, 2008\n\
698  Copyright (c) 1998-2008 Glenn Randers-Pehrson\n\
699  Copyright (c) 1996-1997 Andreas Dilger\n\
700  Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.\n");
701 }
702 
703 /* The following return the library version as a short string in the
704  * format 1.0.0 through 99.99.99zz. To get the version of *.h files
705  * used with your application, print out PNG_LIBPNG_VER_STRING, which
706  * is defined in png.h.
707  * Note: now there is no difference between png_get_libpng_ver() and
708  * png_get_header_ver(). Due to the version_nn_nn_nn typedef guard,
709  * it is guaranteed that png.c uses the correct version of png.h.
710  */
713 {
714  /* Version of *.c files used when building libpng */
715  png_ptr = png_ptr; /* silence compiler warning about unused png_ptr */
716  return ((png_charp) PNG_LIBPNG_VER_STRING);
717 }
718 
721 {
722  /* Version of *.h files used when building libpng */
723  png_ptr = png_ptr; /* silence compiler warning about unused png_ptr */
724  return ((png_charp) PNG_LIBPNG_VER_STRING);
725 }
726 
729 {
730  /* Returns longer string containing both version and date */
731  png_ptr = png_ptr; /* silence compiler warning about unused png_ptr */
733 #ifndef PNG_READ_SUPPORTED
734  " (NO READ SUPPORT)"
735 #endif
736  "\n");
737 }
738 
739 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
740 #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
741 int PNGAPI
743 {
744  /* check chunk_name and return "keep" value if it's on the list, else 0 */
745  int i;
746  png_bytep p;
747  if (png_ptr == NULL || chunk_name == NULL || png_ptr->num_chunk_list<=0)
748  return 0;
749  p = png_ptr->chunk_list + png_ptr->num_chunk_list*5 - 5;
750  for (i = png_ptr->num_chunk_list; i; i--, p -= 5)
751  if (!png_memcmp(chunk_name, p, 4))
752  return ((int)*(p + 4));
753  return 0;
754 }
755 #endif
756 
757 /* This function, added to libpng-1.0.6g, is untested. */
758 int PNGAPI
760 {
761  if (png_ptr == NULL) return Z_STREAM_ERROR;
762  return (inflateReset(&png_ptr->zstream));
763 }
764 #endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
765 
766 /* This function was added to libpng-1.0.7 */
769 {
770  /* Version of *.c files used when building libpng */
771  return((png_uint_32) PNG_LIBPNG_VER);
772 }
773 
774 
775 #if defined(PNG_READ_SUPPORTED) && defined(PNG_ASSEMBLER_CODE_SUPPORTED)
776 #if !defined(PNG_1_0_X)
777 /* this function was added to libpng 1.2.0 */
778 int PNGAPI
780 {
781  /* obsolete, to be removed from libpng-1.4.0 */
782  return -1;
783 }
784 #endif /* PNG_1_0_X */
785 #endif /* PNG_READ_SUPPORTED && PNG_ASSEMBLER_CODE_SUPPORTED */
786 
787 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
788 #ifdef PNG_SIZE_T
789 /* Added at libpng version 1.2.6 */
790  PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size));
792 png_convert_size(size_t size)
793 {
794  if (size > (png_size_t)-1)
795  PNG_ABORT(); /* We haven't got access to png_ptr, so no png_error() */
796  return ((png_size_t)size);
797 }
798 #endif /* PNG_SIZE_T */
799 #endif /* defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) */
PNG_CONST char png_libpng_ver[18]
Definition: png.c:23
#define PNG_FREE_TEXT
Definition: png.h:2098
PNG_tRNS
Definition: png.c:52
PNG_CONST int FARDATA png_pass_start[]
Definition: png.c:59
void png_zfree(voidpf png_ptr, voidpf ptr)
Definition: png.c:192
void PNGAPI png_free_data(png_structp png_ptr, png_infop info_ptr, png_uint_32 mask, int num)
Definition: png.c:339
png_voidp png_create_struct(int type)
Definition: pngmem.c:332
Byte FAR * voidpf
Definition: zconf.h:283
#define PNG_FREE_HIST
Definition: png.h:2088
PNG_PLTE
Definition: png.c:36
void PNGAPI png_info_init(png_infop info_ptr)
Definition: png.c:293
int ZEXPORT inflateReset(z_streamp strm)
Definition: inflate.c:103
PNG_sRGB
Definition: png.c:49
png_infop PNGAPI png_create_info_struct(png_structp png_ptr)
Definition: png.c:239
#define PNG_INFO_hIST
Definition: png.h:1073
png_infopp info_ptr_ptr
Definition: png.h:1799
png_voidp ptr
Definition: png.h:2063
PNG_sPLT
Definition: png.c:48
png_structp version_1_2_32
Definition: png.h:1472
#define png_memcmp
Definition: pngconf.h:1464
png_byte FAR * png_bytep
Definition: pngconf.h:1197
#define png_memset
Definition: pngconf.h:1466
char FAR * png_charp
Definition: pngconf.h:1203
png_uint_32 size
Definition: png.h:1521
PNG_CONST int FARDATA png_pass_yinc[]
Definition: png.c:68
#define PNG_LIBPNG_VER_STRING
Definition: png.h:413
png_size_t png_size_t num_to_check
Definition: png.h:1496
int PNGAPI png_check_sig(png_bytep sig, int num)
Definition: png.c:135
png_charp PNGAPI png_get_libpng_ver(png_structp png_ptr)
Definition: png.c:712
void PNGAPI png_set_sig_bytes(png_structp png_ptr, int num_bytes)
Definition: png.c:93
#define PNG_FREE_PLTE
Definition: png.h:2096
PNG_bKGD
Definition: png.c:37
#define PNG_FREE_ICCP
Definition: png.h:2089
int PNGAPI png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name)
Definition: png.c:742
PNG_sCAL
Definition: png.c:45
PNG_cHRM
Definition: png.c:38
PNG_CONST int FARDATA png_pass_ystart[]
Definition: png.c:65
#define Z_STREAM_ERROR
Definition: zlib.h:174
png_bytep png_bytep png_size_t length
Definition: png.h:1541
png_uint_32 i
Definition: png.h:2735
int num_bytes
Definition: png.h:1489
void PNGAPI png_info_init_3(png_infopp ptr_ptr, png_size_t png_info_struct_size)
Definition: png.c:301
void PNGAPI png_destroy_info_struct(png_structp png_ptr, png_infopp info_ptr_ptr)
Definition: png.c:263
voidpf png_zalloc(voidpf png_ptr, uInt items, uInt size)
Definition: png.c:149
png_bytep chunk_name
Definition: png.h:1541
PNG_zTXt
Definition: png.c:53
#define PNGARG(arglist)
Definition: pngconf.h:284
void png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length)
Definition: png.c:212
png_FILE_p fp
Definition: png.h:1951
PNG_IDAT
Definition: png.c:34
#define PNG_USER_WILL_FREE_DATA
Definition: png.h:2086
#define png_debug(l, m)
Definition: png.h:2556
#define PNGAPI
Definition: pngconf.h:1386
png_struct FAR * png_structp
Definition: png.h:1108
#define PNG_FREE_ROWS
Definition: png.h:2091
#define PNG_FREE_ALL
Definition: png.h:2099
void png_info_destroy(png_structp png_ptr, png_infop info_ptr)
Definition: png.c:594
unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, unsigned len)
Definition: crc32.c:219
PNG_pHYs
Definition: png.c:46
PNG_tEXt
Definition: png.c:50
png_time FAR * png_timep
Definition: png.h:683
void PNGAPI png_error(png_structp png_ptr, png_const_charp error_message)
Definition: pngerror.c:36
#define PNG_CONST
Definition: pngconf.h:445
void png_destroy_struct(png_voidp struct_ptr)
Definition: pngmem.c:386
#define PNG_FREE_SPLT
Definition: png.h:2090
PNG_sBIT
Definition: png.c:47
png_timep ptime
Definition: png.h:1583
PNG_IHDR
Definition: png.c:33
unsigned char png_byte
Definition: pngconf.h:1120
#define png_memcpy
Definition: pngconf.h:1465
png_infop int png_uint_32 mask
Definition: png.h:2081
void PNGAPI png_warning(png_structp png_ptr, png_const_charp warning_message)
Definition: pngerror.c:102
png_voidp PNGAPI png_get_io_ptr(png_structp png_ptr)
Definition: png.c:618
PNG_CONST int FARDATA png_pass_dsp_mask[]
Definition: png.c:80
PNG_IEND
Definition: png.c:35
#define PNG_UINT_32_MAX
Definition: png.h:989
png_bytepp row
Definition: png.h:1759
#define PNG_READ_SUPPORTED
Definition: pngconf.h:106
#define PNG_FREE_UNKN
Definition: png.h:2094
int PNGAPI png_sig_cmp(png_bytep sig, png_size_t start, png_size_t num_to_check)
Definition: png.c:112
PNG_tIME
Definition: png.c:51
PNG_gAMA
Definition: png.c:39
png_size_t start
Definition: png.h:1496
#define PNG_DESTROY_WILL_FREE_DATA
Definition: png.h:2084
png_charp PNGAPI png_get_header_ver(png_structp png_ptr)
Definition: png.c:720
#define PNG_INFO_PLTE
Definition: png.h:1070
#define FARDATA
Definition: pngconf.h:1188
PNG_hIST
Definition: png.c:40
PNG_iTXt
Definition: png.c:42
#define PNG_LIBPNG_VER
Definition: png.h:451
typedef int
Definition: png.h:1113
PNG_CONST int FARDATA png_pass_inc[]
Definition: png.c:62
PNG_CONST png_byte FARDATA png_sig[8]
Definition: png.c:29
png_voidp png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr)
Definition: pngmem.c:342
#define png_snprintf6
Definition: pngconf.h:1450
PNG_CONST int FARDATA png_pass_mask[]
Definition: png.c:76
void PNGAPI png_data_freer(png_structp png_ptr, png_infop info_ptr, int freer, png_uint_32 mask)
Definition: png.c:322
#define PNG_INFO_IDAT
Definition: png.h:1082
png_charp PNGAPI png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime)
Definition: png.c:646
#define PNG_INFO_tRNS
Definition: png.h:1071
#define PNG_HEADER_VERSION_STRING
Definition: png.h:414
png_size_t png_info_struct_size
Definition: png.h:1567
void FAR * png_voidp
Definition: pngconf.h:1196
#define PNG_FREE_PCAL
Definition: png.h:2092
void png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn, png_voidp mem_ptr)
Definition: pngmem.c:394
#define PNG_FREE_MUL
Definition: png.h:2100
int PNGAPI png_mmx_support(void)
Definition: png.c:779
size_t png_size_t
Definition: pngconf.h:1128
PNG_pCAL
Definition: png.c:44
int num
Definition: png.h:1502
version_1_2_32 Your_png_h_is_not_version_1_2_32
Definition: png.c:16
#define PNG_INFO_sPLT
Definition: png.h:1080
#define Z_NULL
Definition: zlib.h:205
png_infop info_ptr
Definition: png.h:1571
unsigned long png_uint_32
Definition: pngconf.h:1116
PNG_iCCP
Definition: png.c:41
#define PNG_ABORT()
Definition: pngconf.h:1418
png_charp PNGAPI png_get_header_version(png_structp png_ptr)
Definition: png.c:728
FILE * png_FILE_p
Definition: pngconf.h:1210
png_charp PNGAPI png_get_copyright(png_structp png_ptr)
Definition: png.c:694
png_info FAR *FAR * png_infopp
Definition: png.h:985
int PNGAPI png_reset_zstream(png_structp png_ptr)
Definition: png.c:759
void PNGAPI png_free(png_structp png_ptr, png_voidp ptr)
Definition: pngmem.c:498
#define PNG_INFO_pCAL
Definition: png.h:1077
#define PNG_FREE_SCAL
Definition: png.h:2093
png_infop int freer
Definition: png.h:2081
void PNGAPI png_init_io(png_structp png_ptr, png_FILE_p fp)
Definition: png.c:633
png_voidp PNGAPI png_malloc(png_structp png_ptr, png_uint_32 size)
Definition: pngmem.c:429
void png_reset_crc(png_structp png_ptr)
Definition: png.c:201
PNG_oFFs
Definition: png.c:43
#define PNG_INFO_iCCP
Definition: png.h:1079
unsigned int uInt
Definition: zconf.h:263
#define png_sizeof(x)
Definition: pngconf.h:1129
#define PNG_FREE_TRNS
Definition: png.h:2097
#define PNG_INFO_sCAL
Definition: png.h:1081
png_uint_32 PNGAPI png_access_version_number(void)
Definition: png.c:768
png_info FAR * png_infop
Definition: png.h:984


openhrp3
Author(s): AIST, General Robotix Inc., Nakamura Lab of Dept. of Mechano Informatics at University of Tokyo
autogenerated on Thu Sep 8 2022 02:24:04