w32tex
About: TeX Live provides a comprehensive TeX system including all the major TeX-related programs, macro packages, and fonts that are free software. Windows sources.
  Fossies Dox: w32tex-src.tar.xz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

jmemansi.c
Go to the documentation of this file.
1 /*
2  * jmemansi.c
3  *
4  * Copyright (C) 1992-1996, Thomas G. Lane.
5  * This file is part of the Independent JPEG Group's software.
6  * For conditions of distribution and use, see the accompanying README file.
7  *
8  * This file provides a simple generic implementation of the system-
9  * dependent portion of the JPEG memory manager. This implementation
10  * assumes that you have the ANSI-standard library routine tmpfile().
11  * Also, the problem of determining the amount of memory available
12  * is shoved onto the user.
13  */
14 
15 #define JPEG_INTERNALS
16 #include "jinclude.h"
17 #include "jpeglib.h"
18 #include "jmemsys.h" /* import the system-dependent declarations */
19 
20 #ifndef HAVE_STDLIB_H /* <stdlib.h> should declare malloc(),free() */
21 extern void * malloc JPP((size_t size));
22 extern void free JPP((void *ptr));
23 #endif
24 
25 #ifndef SEEK_SET /* pre-ANSI systems may not define this; */
26 #define SEEK_SET 0 /* if not, assume 0 is correct */
27 #endif
28 
29 
30 /*
31  * Memory allocation and freeing are controlled by the regular library
32  * routines malloc() and free().
33  */
34 
35 GLOBAL(void *)
37 {
38  return (void *) malloc(sizeofobject);
39 }
40 
41 GLOBAL(void)
42 jpeg_free_small (j_common_ptr cinfo, void * object, size_t sizeofobject)
43 {
44  free(object);
45 }
46 
47 
48 /*
49  * "Large" objects are treated the same as "small" ones.
50  * NB: although we include FAR keywords in the routine declarations,
51  * this file won't actually work in 80x86 small/medium model; at least,
52  * you probably won't be able to process useful-size images in only 64KB.
53  */
54 
55 GLOBAL(void FAR *)
57 {
58  return (void FAR *) malloc(sizeofobject);
59 }
60 
61 GLOBAL(void)
62 jpeg_free_large (j_common_ptr cinfo, void FAR * object, size_t sizeofobject)
63 {
64  free(object);
65 }
66 
67 
68 /*
69  * This routine computes the total memory space available for allocation.
70  * It's impossible to do this in a portable way; our current solution is
71  * to make the user tell us (with a default value set at compile time).
72  * If you can actually get the available space, it's a good idea to subtract
73  * a slop factor of 5% or so.
74  */
75 
76 #ifndef DEFAULT_MAX_MEM /* so can override from makefile */
77 #define DEFAULT_MAX_MEM 1000000L /* default: one megabyte */
78 #endif
79 
80 GLOBAL(long)
83 {
84  return cinfo->mem->max_memory_to_use - already_allocated;
85 }
86 
87 
88 /*
89  * Backing store (temporary file) management.
90  * Backing store objects are only used when the value returned by
91  * jpeg_mem_available is less than the total space needed. You can dispense
92  * with these routines if you have plenty of virtual memory; see jmemnobs.c.
93  */
94 
95 
96 METHODDEF(void)
98  void FAR * buffer_address,
99  long file_offset, long byte_count)
100 {
101  if (fseek(info->temp_file, file_offset, SEEK_SET))
102  ERREXIT(cinfo, JERR_TFILE_SEEK);
103  if (JFREAD(info->temp_file, buffer_address, byte_count)
104  != (size_t) byte_count)
105  ERREXIT(cinfo, JERR_TFILE_READ);
106 }
107 
108 
109 METHODDEF(void)
111  void FAR * buffer_address,
112  long file_offset, long byte_count)
113 {
114  if (fseek(info->temp_file, file_offset, SEEK_SET))
115  ERREXIT(cinfo, JERR_TFILE_SEEK);
116  if (JFWRITE(info->temp_file, buffer_address, byte_count)
117  != (size_t) byte_count)
118  ERREXIT(cinfo, JERR_TFILE_WRITE);
119 }
120 
121 
122 METHODDEF(void)
124 {
125  fclose(info->temp_file);
126  /* Since this implementation uses tmpfile() to create the file,
127  * no explicit file deletion is needed.
128  */
129 }
130 
131 
132 /*
133  * Initial opening of a backing-store object.
134  *
135  * This version uses tmpfile(), which constructs a suitable file name
136  * behind the scenes. We don't have to use info->temp_name[] at all;
137  * indeed, we can't even find out the actual name of the temp file.
138  */
139 
140 GLOBAL(void)
142  long total_bytes_needed)
143 {
144  if ((info->temp_file = tmpfile()) == NULL)
145  ERREXITS(cinfo, JERR_TFILE_CREATE, "");
146  info->read_backing_store = read_backing_store;
147  info->write_backing_store = write_backing_store;
148  info->close_backing_store = close_backing_store;
149 }
150 
151 
152 /*
153  * These routines take care of any system-dependent initialization and
154  * cleanup required.
155  */
156 
157 GLOBAL(long)
159 {
160  return DEFAULT_MAX_MEM; /* default for max_memory_to_use */
161 }
162 
163 GLOBAL(void)
165 {
166  /* no work */
167 }
static integer file_offset
Definition: aptex.h:309
#define free(a)
Definition: decNumber.cpp:310
#define fseek
Definition: xxstdio.h:30
#define info
Definition: dviinfo.c:42
#define ERREXITS(cinfo, code, str)
Definition: jerror.h:230
#define ERREXIT(cinfo, code)
Definition: jerror.h:205
@ JERR_TFILE_SEEK
Definition: jerror.h:113
@ JERR_TFILE_WRITE
Definition: jerror.h:115
@ JERR_TFILE_READ
Definition: jerror.h:112
@ JERR_TFILE_CREATE
Definition: jerror.h:111
#define JFWRITE(file, buf, sizeofbuf)
Definition: jinclude.h:90
#define JFREAD(file, buf, sizeofbuf)
Definition: jinclude.h:88
#define SEEK_SET
Definition: jmemansi.c:26
#define DEFAULT_MAX_MEM
Definition: jmemansi.c:77
static void write_backing_store(j_common_ptr cinfo, backing_store_ptr info, void *buffer_address, long file_offset, long byte_count)
Definition: jmemansi.c:110
void jpeg_mem_term(j_common_ptr cinfo)
Definition: jmemansi.c:164
void jpeg_free_small(j_common_ptr cinfo, void *object, size_t sizeofobject)
Definition: jmemansi.c:42
void * jpeg_get_large(j_common_ptr cinfo, size_t sizeofobject)
Definition: jmemansi.c:56
static void read_backing_store(j_common_ptr cinfo, backing_store_ptr info, void *buffer_address, long file_offset, long byte_count)
Definition: jmemansi.c:97
void jpeg_open_backing_store(j_common_ptr cinfo, backing_store_ptr info, long total_bytes_needed)
Definition: jmemansi.c:141
static void close_backing_store(j_common_ptr cinfo, backing_store_ptr info)
Definition: jmemansi.c:123
long jpeg_mem_available(j_common_ptr cinfo, long min_bytes_needed, long max_bytes_needed, long already_allocated)
Definition: jmemansi.c:81
void * jpeg_get_small(j_common_ptr cinfo, size_t sizeofobject)
Definition: jmemansi.c:36
long jpeg_mem_init(j_common_ptr cinfo)
Definition: jmemansi.c:158
void jpeg_free_large(j_common_ptr cinfo, void *object, size_t sizeofobject)
Definition: jmemansi.c:62
long long max_bytes_needed
Definition: jmemsys.h:105
size_t sizeofobject
Definition: jmemsys.h:47
long min_bytes_needed
Definition: jmemsys.h:104
long long long already_allocated
Definition: jmemsys.h:106
backing_store_ptr long total_bytes_needed
Definition: jmemsys.h:182
#define METHODDEF(type)
Definition: jmorecfg.h:184
#define FAR
Definition: jmorecfg.h:217
#define GLOBAL(type)
Definition: jmorecfg.h:188
#define JPP(arglist)
Definition: jpeglib.h:818
#define NULL
Definition: ftobjs.h:61
#define fclose
Definition: debug.h:100
#define malloc
Definition: alloca.c:91
set set set set set set set set set set set set set set set set set set set set *set set set macro pixldst op &r &cond WK op &r &cond WK op &r &cond WK else op &m &cond &ia op &r &cond WK else op &m &cond &ia elseif elseif else error unsupported base if elseif elseif else error unsupported unaligned pixldst unaligned endm macro pixst base base else pixldst base endif endm macro PF ptr
static int size
Definition: ppmlabel.c:24