jmemname.c revision 9f5d49a1588e438ae7ceabd0c94172117e3303aa
19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * jmemname.c 39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Copyright (C) 1992-1997, Thomas G. Lane. 59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file is part of the Independent JPEG Group's software. 69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * For conditions of distribution and use, see the accompanying README file. 79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file provides a generic implementation of the system-dependent 99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * portion of the JPEG memory manager. This implementation assumes that 109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * you must explicitly construct a name for each temp file. 119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Also, the problem of determining the amount of memory available 129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * is shoved onto the user. 139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define JPEG_INTERNALS 169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jinclude.h" 179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jpeglib.h" 189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jmemsys.h" /* import the system-dependent declarations */ 199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef HAVE_STDLIB_H /* <stdlib.h> should declare malloc(),free() */ 219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectextern void * malloc JPP((size_t size)); 229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectextern void free JPP((void *ptr)); 239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef SEEK_SET /* pre-ANSI systems may not define this; */ 269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define SEEK_SET 0 /* if not, assume 0 is correct */ 279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */ 309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define READ_BINARY "r" 319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define RW_BINARY "w+" 329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else 339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef VMS /* VMS is very nonstandard */ 349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define READ_BINARY "rb", "ctx=stm" 359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define RW_BINARY "w+b", "ctx=stm" 369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else /* standard ANSI-compliant case */ 379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define READ_BINARY "rb" 389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define RW_BINARY "w+b" 399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Selection of a file name for a temporary file. 459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This is system-dependent! 469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The code as given is suitable for most Unix systems, and it is easily 489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * modified for most non-Unix systems. Some notes: 499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 1. The temp file is created in the directory named by TEMP_DIRECTORY. 509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * The default value is /usr/tmp, which is the conventional place for 519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * creating large temp files on Unix. On other systems you'll probably 529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * want to change the file location. You can do this by editing the 539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * #define, or (preferred) by defining TEMP_DIRECTORY in jconfig.h. 549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 2. If you need to change the file name as well as its location, 569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * you can override the TEMP_FILE_NAME macro. (Note that this is 579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * actually a printf format string; it must contain %s and %d.) 589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Few people should need to do this. 599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 3. mktemp() is used to ensure that multiple processes running 619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * simultaneously won't select the same file names. If your system 629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * doesn't have mktemp(), define NO_MKTEMP to do it the hard way. 639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * (If you don't have <errno.h>, also define NO_ERRNO_H.) 649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 4. You probably want to define NEED_SIGNAL_CATCHER so that cjpeg.c/djpeg.c 669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * will cause the temp files to be removed if you stop the program early. 679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef TEMP_DIRECTORY /* can override from jconfig.h or Makefile */ 709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define TEMP_DIRECTORY "/usr/tmp/" /* recommended setting for Unix */ 719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectstatic int next_file_num; /* to distinguish among several temp files */ 749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef NO_MKTEMP 769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ 789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define TEMP_FILE_NAME "%sJPG%03d.TMP" 799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef NO_ERRNO_H 829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include <errno.h> /* to define ENOENT */ 839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* ANSI C specifies that errno is a macro, but on older systems it's more 869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * likely to be a plain int variable. And not all versions of errno.h 879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * bother to declare it, so we have to in order to be most portable. Thus: 889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef errno 909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectextern int errno; 919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectLOCAL(void) 959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectselect_file_name (char * fname) 969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project FILE * tfile; 989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Keep generating file names till we find one that's not in use */ 1009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project for (;;) { 1019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project next_file_num++; /* advance counter */ 1029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); 1039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if ((tfile = fopen(fname, READ_BINARY)) == NULL) { 1049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* fopen could have failed for a reason other than the file not 1059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * being there; for example, file there but unreadable. 1069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * If <errno.h> isn't available, then we cannot test the cause. 1079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 1089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef ENOENT 1099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (errno != ENOENT) 1109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project continue; 1119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 1129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project break; 1139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 1149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project fclose(tfile); /* oops, it's there; close tfile & try again */ 1159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 1169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 1179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else /* ! NO_MKTEMP */ 1199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Note that mktemp() requires the initial filename to end in six X's */ 1219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef TEMP_FILE_NAME /* can override from jconfig.h or Makefile */ 1229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define TEMP_FILE_NAME "%sJPG%dXXXXXX" 1239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 1249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectLOCAL(void) 1269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectselect_file_name (char * fname) 1279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 1289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project next_file_num++; /* advance counter */ 1299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project sprintf(fname, TEMP_FILE_NAME, TEMP_DIRECTORY, next_file_num); 1309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project mktemp(fname); /* make sure file name is unique */ 1319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* mktemp replaces the trailing XXXXXX with a unique string of characters */ 1329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 1339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif /* NO_MKTEMP */ 1359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 1389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Memory allocation and freeing are controlled by the regular library 1399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * routines malloc() and free(). 1409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 1419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void *) 1439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) 1449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 1459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return (void *) malloc(sizeofobject); 1469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 1479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void) 1499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject) 1509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 1519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project free(object); 1529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 1539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 1569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * "Large" objects are treated the same as "small" ones. 1579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * NB: although we include FAR keywords in the routine declarations, 1589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * this file won't actually work in 80x86 small/medium model; at least, 1599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * you probably won't be able to process useful-size images in only 64KB. 1609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 1619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void FAR *) 1639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) 1649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 1659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return (void FAR *) malloc(sizeofobject); 1669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 1679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void) 1699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject) 1709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 1719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project free(object); 1729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 1739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 1769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This routine computes the total memory space available for allocation. 1779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * It's impossible to do this in a portable way; our current solution is 1789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * to make the user tell us (with a default value set at compile time). 1799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * If you can actually get the available space, it's a good idea to subtract 1809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * a slop factor of 5% or so. 1819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 1829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef DEFAULT_MAX_MEM /* so can override from makefile */ 1849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */ 1859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif 1869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(long) 1889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, 1899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project long max_bytes_needed, long already_allocated) 1909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 1919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return cinfo->mem->max_memory_to_use - already_allocated; 1929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 1939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 1969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Backing store (temporary file) management. 1979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Backing store objects are only used when the value returned by 1989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * jpeg_mem_available is less than the total space needed. You can dispense 1999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * with these routines if you have plenty of virtual memory; see jmemnobs.c. 2009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 2019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectMETHODDEF(void) 2049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectread_backing_store (j_common_ptr cinfo, backing_store_ptr info, 2059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project void FAR * buffer_address, 2069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project long file_offset, long byte_count) 2079f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 2089f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (fseek(info->temp_file, file_offset, SEEK_SET)) 2099f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT(cinfo, JERR_TFILE_SEEK); 2109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (JFREAD(info->temp_file, buffer_address, byte_count) 2119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project != (size_t) byte_count) 2129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT(cinfo, JERR_TFILE_READ); 2139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 2149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectMETHODDEF(void) 2179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectwrite_backing_store (j_common_ptr cinfo, backing_store_ptr info, 2189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project void FAR * buffer_address, 2199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project long file_offset, long byte_count) 2209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 2219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (fseek(info->temp_file, file_offset, SEEK_SET)) 2229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT(cinfo, JERR_TFILE_SEEK); 2239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (JFWRITE(info->temp_file, buffer_address, byte_count) 2249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project != (size_t) byte_count) 2259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXIT(cinfo, JERR_TFILE_WRITE); 2269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 2279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectMETHODDEF(void) 2309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectclose_backing_store (j_common_ptr cinfo, backing_store_ptr info) 2319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 2329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project fclose(info->temp_file); /* close the file */ 2339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project unlink(info->temp_name); /* delete the file */ 2349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* If your system doesn't have unlink(), use remove() instead. 2359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * remove() is the ANSI-standard name for this function, but if 2369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * your system was ANSI you'd be using jmemansi.c, right? 2379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 2389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name); 2399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 2409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 2439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Initial opening of a backing-store object. 2449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 2459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void) 2479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, 2489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project long total_bytes_needed) 2499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 2509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project select_file_name(info->temp_name); 2519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if ((info->temp_file = fopen(info->temp_name, RW_BINARY)) == NULL) 2529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name); 2539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project info->read_backing_store = read_backing_store; 2549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project info->write_backing_store = write_backing_store; 2559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project info->close_backing_store = close_backing_store; 2569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name); 2579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 2589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 2619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * These routines take care of any system-dependent initialization and 2629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * cleanup required. 2639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 2649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(long) 2669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_mem_init (j_common_ptr cinfo) 2679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 2689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project next_file_num = 0; /* initialize temp file name generator */ 2699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return DEFAULT_MAX_MEM; /* default for max_memory_to_use */ 2709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 2719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 2729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void) 2739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_mem_term (j_common_ptr cinfo) 2749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 2759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* no work */ 2769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 277