📄 pngtest.c
字号:
pinfo->size = size; current_allocation += size; total_allocation += size; num_allocations ++; if (current_allocation > maximum_allocation) maximum_allocation = current_allocation; pinfo->pointer = (png_voidp)png_malloc_default(png_ptr, size); pinfo->next = pinformation; pinformation = pinfo; /* Make sure the caller isn't assuming zeroed memory. */ png_memset(pinfo->pointer, 0xdd, pinfo->size);#if PNG_DEBUG if(verbose) printf("png_malloc %lu bytes at %x\n",size,pinfo->pointer);#endif assert(pinfo->size != 12345678); return (png_voidp)(pinfo->pointer); }}/* Free a pointer. It is removed from the list at the same time. */voidpng_debug_free(png_structp png_ptr, png_voidp ptr){ if (png_ptr == NULL) fprintf(STDERR, "NULL pointer to png_debug_free.\n"); if (ptr == 0) {#if 0 /* This happens all the time. */ fprintf(STDERR, "WARNING: freeing NULL pointer\n");#endif return; } /* Unlink the element from the list. */ { memory_infop FAR *ppinfo = &pinformation; for (;;) { memory_infop pinfo = *ppinfo; if (pinfo->pointer == ptr) { *ppinfo = pinfo->next; current_allocation -= pinfo->size; if (current_allocation < 0) fprintf(STDERR, "Duplicate free of memory\n"); /* We must free the list element too, but first kill the memory that is to be freed. */ png_memset(ptr, 0x55, pinfo->size); png_free_default(png_ptr, pinfo); pinfo=NULL; break; } if (pinfo->next == NULL) { fprintf(STDERR, "Pointer %x not found\n", (unsigned int)ptr); break; } ppinfo = &pinfo->next; } } /* Finally free the data. */#if PNG_DEBUG if(verbose) printf("Freeing %x\n",ptr);#endif png_free_default(png_ptr, ptr); ptr=NULL;}#endif /* PNG_USER_MEM_SUPPORTED *//* END of code to test memory allocation/deallocation *//* Test one file */inttest_one_file(PNG_CONST char *inname, PNG_CONST char *outname){ static png_FILE_p fpin; static png_FILE_p fpout; /* "static" prevents setjmp corruption */ png_structp read_ptr; png_infop read_info_ptr, end_info_ptr;#ifdef PNG_WRITE_SUPPORTED png_structp write_ptr; png_infop write_info_ptr; png_infop write_end_info_ptr;#else png_structp write_ptr = NULL; png_infop write_info_ptr = NULL; png_infop write_end_info_ptr = NULL;#endif png_bytep row_buf; png_uint_32 y; png_uint_32 width, height; int num_pass, pass; int bit_depth, color_type;#ifdef PNG_SETJMP_SUPPORTED#ifdef USE_FAR_KEYWORD jmp_buf jmpbuf;#endif#endif#if defined(_WIN32_WCE) TCHAR path[MAX_PATH];#endif char inbuf[256], outbuf[256]; row_buf = NULL;#if defined(_WIN32_WCE) MultiByteToWideChar(CP_ACP, 0, inname, -1, path, MAX_PATH); if ((fpin = CreateFile(path, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)#else if ((fpin = fopen(inname, "rb")) == NULL)#endif { fprintf(STDERR, "Could not find input file %s\n", inname); return (1); }#if defined(_WIN32_WCE) MultiByteToWideChar(CP_ACP, 0, outname, -1, path, MAX_PATH); if ((fpout = CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL)) == INVALID_HANDLE_VALUE)#else if ((fpout = fopen(outname, "wb")) == NULL)#endif { fprintf(STDERR, "Could not open output file %s\n", outname); FCLOSE(fpin); return (1); } png_debug(0, "Allocating read and write structures\n");#ifdef PNG_USER_MEM_SUPPORTED read_ptr = png_create_read_struct_2(PNG_LIBPNG_VER_STRING, png_voidp_NULL, png_error_ptr_NULL, png_error_ptr_NULL, png_voidp_NULL, (png_malloc_ptr)png_debug_malloc, (png_free_ptr)png_debug_free);#else read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, png_voidp_NULL, png_error_ptr_NULL, png_error_ptr_NULL);#endif#if defined(PNG_NO_STDIO) png_set_error_fn(read_ptr, (png_voidp)inname, pngtest_error, pngtest_warning);#endif#ifdef PNG_WRITE_SUPPORTED#ifdef PNG_USER_MEM_SUPPORTED write_ptr = png_create_write_struct_2(PNG_LIBPNG_VER_STRING, png_voidp_NULL, png_error_ptr_NULL, png_error_ptr_NULL, png_voidp_NULL, (png_malloc_ptr)png_debug_malloc, (png_free_ptr)png_debug_free);#else write_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, png_voidp_NULL, png_error_ptr_NULL, png_error_ptr_NULL);#endif#if defined(PNG_NO_STDIO) png_set_error_fn(write_ptr, (png_voidp)inname, pngtest_error, pngtest_warning);#endif#endif png_debug(0, "Allocating read_info, write_info and end_info structures\n"); read_info_ptr = png_create_info_struct(read_ptr); end_info_ptr = png_create_info_struct(read_ptr);#ifdef PNG_WRITE_SUPPORTED write_info_ptr = png_create_info_struct(write_ptr); write_end_info_ptr = png_create_info_struct(write_ptr);#endif#ifdef PNG_SETJMP_SUPPORTED png_debug(0, "Setting jmpbuf for read struct\n");#ifdef USE_FAR_KEYWORD if (setjmp(jmpbuf))#else if (setjmp(png_jmpbuf(read_ptr)))#endif { fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname); if (row_buf) png_free(read_ptr, row_buf); png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);#ifdef PNG_WRITE_SUPPORTED png_destroy_info_struct(write_ptr, &write_end_info_ptr); png_destroy_write_struct(&write_ptr, &write_info_ptr);#endif FCLOSE(fpin); FCLOSE(fpout); return (1); }#ifdef USE_FAR_KEYWORD png_memcpy(png_jmpbuf(read_ptr),jmpbuf,sizeof(jmp_buf));#endif#ifdef PNG_WRITE_SUPPORTED png_debug(0, "Setting jmpbuf for write struct\n");#ifdef USE_FAR_KEYWORD if (setjmp(jmpbuf))#else if (setjmp(png_jmpbuf(write_ptr)))#endif { fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname); png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); png_destroy_info_struct(write_ptr, &write_end_info_ptr);#ifdef PNG_WRITE_SUPPORTED png_destroy_write_struct(&write_ptr, &write_info_ptr);#endif FCLOSE(fpin); FCLOSE(fpout); return (1); }#ifdef USE_FAR_KEYWORD png_memcpy(png_jmpbuf(write_ptr),jmpbuf,sizeof(jmp_buf));#endif#endif#endif png_debug(0, "Initializing input and output streams\n");#if !defined(PNG_NO_STDIO) png_init_io(read_ptr, fpin);# ifdef PNG_WRITE_SUPPORTED png_init_io(write_ptr, fpout);# endif#else png_set_read_fn(read_ptr, (png_voidp)fpin, pngtest_read_data);# ifdef PNG_WRITE_SUPPORTED png_set_write_fn(write_ptr, (png_voidp)fpout, pngtest_write_data,# if defined(PNG_WRITE_FLUSH_SUPPORTED) pngtest_flush);# else NULL);# endif# endif#endif if(status_dots_requested == 1) {#ifdef PNG_WRITE_SUPPORTED png_set_write_status_fn(write_ptr, write_row_callback);#endif png_set_read_status_fn(read_ptr, read_row_callback); } else {#ifdef PNG_WRITE_SUPPORTED png_set_write_status_fn(write_ptr, png_write_status_ptr_NULL);#endif png_set_read_status_fn(read_ptr, png_read_status_ptr_NULL); }#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) { int i; for(i=0; i<256; i++) filters_used[i]=0; png_set_read_user_transform_fn(read_ptr, count_filters); }#endif#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) zero_samples=0; png_set_write_user_transform_fn(write_ptr, count_zero_samples);#endif#define HANDLE_CHUNK_IF_SAFE 2#define HANDLE_CHUNK_ALWAYS 3#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) png_set_keep_unknown_chunks(read_ptr, HANDLE_CHUNK_ALWAYS, png_bytep_NULL, 0);#endif#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) png_set_keep_unknown_chunks(write_ptr, HANDLE_CHUNK_IF_SAFE, png_bytep_NULL, 0);#endif png_debug(0, "Reading info struct\n"); png_read_info(read_ptr, read_info_ptr); png_debug(0, "Transferring info struct\n"); { int interlace_type, compression_type, filter_type; if (png_get_IHDR(read_ptr, read_info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, &compression_type, &filter_type)) { png_set_IHDR(write_ptr, write_info_ptr, width, height, bit_depth,#if defined(PNG_WRITE_INTERLACING_SUPPORTED) color_type, interlace_type, compression_type, filter_type);#else color_type, PNG_INTERLACE_NONE, compression_type, filter_type);#endif } }#if defined(PNG_FIXED_POINT_SUPPORTED)#if defined(PNG_cHRM_SUPPORTED) { png_fixed_point white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y; if (png_get_cHRM_fixed(read_ptr, read_info_ptr, &white_x, &white_y, &red_x, &red_y, &green_x, &green_y, &blue_x, &blue_y)) { png_set_cHRM_fixed(write_ptr, write_info_ptr, white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y); } }#endif#if defined(PNG_gAMA_SUPPORTED) { png_fixed_point gamma; if (png_get_gAMA_fixed(read_ptr, read_info_ptr, &gamma)) { png_set_gAMA_fixed(write_ptr, write_info_ptr, gamma); } }#endif#else /* Use floating point versions */#if defined(PNG_FLOATING_POINT_SUPPORTED)#if defined(PNG_cHRM_SUPPORTED) { double white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y; if (png_get_cHRM(read_ptr, read_info_ptr, &white_x, &white_y, &red_x, &red_y, &green_x, &green_y, &blue_x, &blue_y)) { png_set_cHRM(write_ptr, write_info_ptr, white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y); } }#endif#if defined(PNG_gAMA_SUPPORTED) { double gamma; if (png_get_gAMA(read_ptr, read_info_ptr, &gamma)) { png_set_gAMA(write_ptr, write_info_ptr, gamma); } }#endif#endif /* floating point */#endif /* fixed point */#if defined(PNG_iCCP_SUPPORTED) { png_charp name; png_charp profile; png_uint_32 proflen; int compression_type; if (png_get_iCCP(read_ptr, read_info_ptr, &name, &compression_type, &profile, &proflen)) { png_set_iCCP(write_ptr, write_info_ptr, name, compression_type, profile, proflen); } }#endif#if defined(PNG_sRGB_SUPPORTED) { int intent; if (png_get_sRGB(read_ptr, read_info_ptr, &intent)) { png_set_sRGB(write_ptr, write_info_ptr, intent); } }#endif { png_colorp palette; int num_palette; if (png_get_PLTE(read_ptr, read_info_ptr, &palette, &num_palette)) { png_set_PLTE(write_ptr, write_info_ptr, palette, num_palette); } }#if defined(PNG_bKGD_SUPPORTED) { png_color_16p background; if (png_get_bKGD(read_ptr, read_info_ptr, &background)) { png_set_bKGD(write_ptr, write_info_ptr, background); } }#endif#if defined(PNG_hIST_SUPPORTED) { png_uint_16p hist; if (png_get_hIST(read_ptr, read_info_ptr, &hist)) { png_set_hIST(write_ptr, write_info_ptr, hist); } }#endif#if defined(PNG_oFFs_SUPPORTED) { png_int_32 offset_x, offset_y; int unit_type; if (png_get_oFFs(read_ptr, read_info_ptr,&offset_x,&offset_y,&unit_type)) { png_set_oFFs(write_ptr, write_info_ptr, offset_x, offset_y, unit_type); } }#endif#if defined(PNG_pCAL_SUPPORTED) { png_charp purpose, units; png_charpp params; png_int_32 X0, X1; int type, nparams; if (png_get_pCAL(read_ptr, read_info_ptr, &purpose, &X0, &X1, &type, &nparams, &units, ¶ms)) { png_set_pCAL(write_ptr, write_info_ptr, purpose, X0, X1, type, nparams, units, params); } }#endif#if defined(PNG_pHYs_SUPPORTED) { png_uint_32 res_x, res_y; int unit_type; if (png_get_pHYs(read_ptr, read_info_ptr, &res_x, &res_y, &unit_type)) { png_set_pHYs(write_ptr, write_info_ptr, res_x, res_y, unit_type); } }#endif#if defined(PNG_sBIT_SUPPORTED) { png_color_8p sig_bit; if (png_get_sBIT(read_ptr, read_info_ptr, &sig_bit)) { png_set_sBIT(write_ptr, write_info_ptr, sig_bit); } }#endif#if defined(PNG_sCAL_SUPPORTED)#ifdef PNG_FLOATING_POINT_SUPPORTED { int unit; double scal_width, scal_height; if (png_get_sCAL(read_ptr, read_info_ptr, &unit, &scal_width, &scal_height)) { png_set_sCAL(write_ptr, write_info_ptr, unit, scal_width, scal_height); } }#else#ifdef PNG_FIXED_POINT_SUPPORTED { int unit; png_charp scal_width, scal_height; if (png_get_sCAL_s(read_ptr, read_info_ptr, &unit, &scal_width, &scal_height)) { png_set_sCAL_s(write_ptr, write_info_ptr, unit, scal_width, scal_height); } }#endif#endif#endif#if defined(PNG_TEXT_SUPPORTED) { png_textp text_ptr; int num_text; if (png_get_text(read_ptr, read_info_ptr, &text_ptr, &num_text) > 0) { png_debug1(0, "Handling %d iTXt/tEXt/zTXt chunks\n", num_text); png_set_text(write_ptr, write_info_ptr, text_ptr, num_text); } }#endif#if defined(PNG_tIME_SUPPORTED) { png_timep mod_time; if (png_get_tIME(read_ptr, read_info_ptr, &mod_time)) { png_set_tIME(write_ptr, write_info_ptr, mod_time);#if defined(PNG_TIME_RFC1123_SUPPORTED) /* we have to use png_strcpy instead of "=" because the string pointed to by png_convert_to_rfc1123() gets free'ed before we use it */ png_strcpy(tIME_string,png_convert_to_rfc1123(read_ptr, mod_time)); tIME_chunk_present++;#endif /* PNG_TIME_RFC1123_SUPPORTED */ } }#endif#if defined(PNG_tRNS_SUPPORTED) { png_bytep trans; int num_trans; png_color_16p trans_values; if (png_get_tRNS(read_ptr, read_info_ptr, &trans, &num_trans, &trans_values)) { png_set_tRNS(write_ptr, write_info_ptr, trans, num_trans, trans_values); } }#endif#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) { png_unknown_chunkp unknowns; int num_unknowns = (int)png_get_unknown_chunks(read_ptr, read_info_ptr, &unknowns); if (num_unknowns)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -