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