Coverage Report

Created: 2025-07-18 07:12

/src/jpegoptim/jpegsrc.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * jpegsrc.c
3
 *
4
 * Copyright (C) 2022-2025 Timo Kokkonen
5
 * All Rights Reserved.
6
 *
7
 * Custom libjpeg "Source Manager" for reading from a file handle
8
 * and optionally saving the input also into a memory buffer.
9
 *
10
 * SPDX-License-Identifier: GPL-3.0-or-later
11
 *
12
 * This file is part of JPEGoptim.
13
 *
14
 * JPEGoptim is free software: you can redistribute it and/or modify
15
 * it under the terms of the GNU General Public License as published by
16
 * the Free Software Foundation, either version 3 of the License, or
17
 * (at your option) any later version.
18
 *
19
 * JPEGoptim is distributed in the hope that it will be useful,
20
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
 * GNU General Public License for more details.
23
 *
24
 * You should have received a copy of the GNU General Public License
25
 * along with JPEGoptim. If not, see <https://www.gnu.org/licenses/>.
26
 */
27
28
#include <stdio.h>
29
#include <stdlib.h>
30
#include <string.h>
31
#include <jpeglib.h>
32
#include <jerror.h>
33
34
#include "jpegoptim.h"
35
36
7.37M
#define STDIO_BUFFER_SIZE 4096
37
38
39
/* Custom jpeg source manager object */
40
41
typedef struct {
42
  struct jpeg_source_mgr pub; /* public fields */
43
44
  unsigned char **buf_ptr;
45
  size_t *bufsize_ptr;
46
  size_t *bufused_ptr;
47
  size_t incsize;
48
  unsigned char *buf;
49
  size_t bufsize;
50
  size_t bufused;
51
52
  FILE *infile;
53
  JOCTET *stdio_buffer;
54
  boolean start_of_file;
55
} jpeg_custom_source_mgr;
56
57
typedef jpeg_custom_source_mgr* jpeg_custom_source_mgr_ptr;
58
59
60
61
static void custom_init_source (j_decompress_ptr dinfo)
62
2.32k
{
63
2.32k
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
64
65
2.32k
  src->bufused = 0;
66
2.32k
  if (src->bufused_ptr)
67
2.32k
    *src->bufused_ptr = 0;
68
2.32k
  src->start_of_file = TRUE;
69
2.32k
}
jpegsrc.c:custom_init_source
Line
Count
Source
62
775
{
63
775
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
64
65
775
  src->bufused = 0;
66
775
  if (src->bufused_ptr)
67
775
    *src->bufused_ptr = 0;
68
775
  src->start_of_file = TRUE;
69
775
}
jpegsrc.c:custom_init_source
Line
Count
Source
62
775
{
63
775
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
64
65
775
  src->bufused = 0;
66
775
  if (src->bufused_ptr)
67
775
    *src->bufused_ptr = 0;
68
775
  src->start_of_file = TRUE;
69
775
}
jpegsrc.c:custom_init_source
Line
Count
Source
62
775
{
63
775
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
64
65
775
  src->bufused = 0;
66
775
  if (src->bufused_ptr)
67
775
    *src->bufused_ptr = 0;
68
775
  src->start_of_file = TRUE;
69
775
}
70
71
static void custom_init_mem_source (j_decompress_ptr dinfo)
72
245
{
73
  /* nothing to do */
74
245
}
75
76
77
static boolean custom_fill_input_buffer (j_decompress_ptr dinfo)
78
7.37M
{
79
7.37M
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
80
7.37M
  size_t bytes_read;
81
7.37M
  unsigned char *newbuf;
82
83
7.37M
  bytes_read = fread(src->stdio_buffer, 1, STDIO_BUFFER_SIZE, src->infile);
84
7.37M
  if (bytes_read <= 0) {
85
7.34M
    if (src->start_of_file)
86
0
      ERREXIT(dinfo, JERR_INPUT_EMPTY);
87
7.34M
    WARNMS(dinfo, JWRN_JPEG_EOF);
88
    /* Insert fake EOI marker if read failed */
89
7.34M
    src->stdio_buffer[0] = (JOCTET) 0xff;
90
7.34M
    src->stdio_buffer[1] = (JOCTET) JPEG_EOI;
91
7.34M
    bytes_read = 2;
92
7.34M
  } else if (src->buf_ptr && src->buf) {
93
26.3k
    if (bytes_read > (src->bufsize - src->bufused)) {
94
      /* Need to allocate more memory for the buffer. */
95
0
      src->bufsize += src->incsize;
96
0
      newbuf = realloc(src->buf, src->bufsize);
97
0
      if (!newbuf) ERREXIT1(dinfo, JERR_OUT_OF_MEMORY, 42);
98
0
      src->buf = newbuf;
99
0
      *src->buf_ptr = newbuf;
100
0
      src->incsize *= 2;
101
0
    }
102
26.3k
    memcpy(&src->buf[src->bufused], src->stdio_buffer, bytes_read);
103
26.3k
    src->bufused += bytes_read;
104
26.3k
    if (src->bufused_ptr)
105
26.3k
      *src->bufused_ptr = src->bufused;
106
26.3k
  }
107
108
7.37M
  src->pub.next_input_byte = src->stdio_buffer;
109
7.37M
  src->pub.bytes_in_buffer = bytes_read;
110
7.37M
  src->start_of_file = FALSE;
111
112
7.37M
  return TRUE;
113
7.37M
}
jpegsrc.c:custom_fill_input_buffer
Line
Count
Source
78
2.45M
{
79
2.45M
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
80
2.45M
  size_t bytes_read;
81
2.45M
  unsigned char *newbuf;
82
83
2.45M
  bytes_read = fread(src->stdio_buffer, 1, STDIO_BUFFER_SIZE, src->infile);
84
2.45M
  if (bytes_read <= 0) {
85
2.44M
    if (src->start_of_file)
86
0
      ERREXIT(dinfo, JERR_INPUT_EMPTY);
87
2.44M
    WARNMS(dinfo, JWRN_JPEG_EOF);
88
    /* Insert fake EOI marker if read failed */
89
2.44M
    src->stdio_buffer[0] = (JOCTET) 0xff;
90
2.44M
    src->stdio_buffer[1] = (JOCTET) JPEG_EOI;
91
2.44M
    bytes_read = 2;
92
2.44M
  } else if (src->buf_ptr && src->buf) {
93
8.79k
    if (bytes_read > (src->bufsize - src->bufused)) {
94
      /* Need to allocate more memory for the buffer. */
95
0
      src->bufsize += src->incsize;
96
0
      newbuf = realloc(src->buf, src->bufsize);
97
0
      if (!newbuf) ERREXIT1(dinfo, JERR_OUT_OF_MEMORY, 42);
98
0
      src->buf = newbuf;
99
0
      *src->buf_ptr = newbuf;
100
0
      src->incsize *= 2;
101
0
    }
102
8.79k
    memcpy(&src->buf[src->bufused], src->stdio_buffer, bytes_read);
103
8.79k
    src->bufused += bytes_read;
104
8.79k
    if (src->bufused_ptr)
105
8.79k
      *src->bufused_ptr = src->bufused;
106
8.79k
  }
107
108
2.45M
  src->pub.next_input_byte = src->stdio_buffer;
109
2.45M
  src->pub.bytes_in_buffer = bytes_read;
110
2.45M
  src->start_of_file = FALSE;
111
112
2.45M
  return TRUE;
113
2.45M
}
jpegsrc.c:custom_fill_input_buffer
Line
Count
Source
78
2.45M
{
79
2.45M
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
80
2.45M
  size_t bytes_read;
81
2.45M
  unsigned char *newbuf;
82
83
2.45M
  bytes_read = fread(src->stdio_buffer, 1, STDIO_BUFFER_SIZE, src->infile);
84
2.45M
  if (bytes_read <= 0) {
85
2.44M
    if (src->start_of_file)
86
0
      ERREXIT(dinfo, JERR_INPUT_EMPTY);
87
2.44M
    WARNMS(dinfo, JWRN_JPEG_EOF);
88
    /* Insert fake EOI marker if read failed */
89
2.44M
    src->stdio_buffer[0] = (JOCTET) 0xff;
90
2.44M
    src->stdio_buffer[1] = (JOCTET) JPEG_EOI;
91
2.44M
    bytes_read = 2;
92
2.44M
  } else if (src->buf_ptr && src->buf) {
93
8.79k
    if (bytes_read > (src->bufsize - src->bufused)) {
94
      /* Need to allocate more memory for the buffer. */
95
0
      src->bufsize += src->incsize;
96
0
      newbuf = realloc(src->buf, src->bufsize);
97
0
      if (!newbuf) ERREXIT1(dinfo, JERR_OUT_OF_MEMORY, 42);
98
0
      src->buf = newbuf;
99
0
      *src->buf_ptr = newbuf;
100
0
      src->incsize *= 2;
101
0
    }
102
8.79k
    memcpy(&src->buf[src->bufused], src->stdio_buffer, bytes_read);
103
8.79k
    src->bufused += bytes_read;
104
8.79k
    if (src->bufused_ptr)
105
8.79k
      *src->bufused_ptr = src->bufused;
106
8.79k
  }
107
108
2.45M
  src->pub.next_input_byte = src->stdio_buffer;
109
2.45M
  src->pub.bytes_in_buffer = bytes_read;
110
2.45M
  src->start_of_file = FALSE;
111
112
2.45M
  return TRUE;
113
2.45M
}
jpegsrc.c:custom_fill_input_buffer
Line
Count
Source
78
2.45M
{
79
2.45M
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
80
2.45M
  size_t bytes_read;
81
2.45M
  unsigned char *newbuf;
82
83
2.45M
  bytes_read = fread(src->stdio_buffer, 1, STDIO_BUFFER_SIZE, src->infile);
84
2.45M
  if (bytes_read <= 0) {
85
2.44M
    if (src->start_of_file)
86
0
      ERREXIT(dinfo, JERR_INPUT_EMPTY);
87
2.44M
    WARNMS(dinfo, JWRN_JPEG_EOF);
88
    /* Insert fake EOI marker if read failed */
89
2.44M
    src->stdio_buffer[0] = (JOCTET) 0xff;
90
2.44M
    src->stdio_buffer[1] = (JOCTET) JPEG_EOI;
91
2.44M
    bytes_read = 2;
92
2.44M
  } else if (src->buf_ptr && src->buf) {
93
8.79k
    if (bytes_read > (src->bufsize - src->bufused)) {
94
      /* Need to allocate more memory for the buffer. */
95
0
      src->bufsize += src->incsize;
96
0
      newbuf = realloc(src->buf, src->bufsize);
97
0
      if (!newbuf) ERREXIT1(dinfo, JERR_OUT_OF_MEMORY, 42);
98
0
      src->buf = newbuf;
99
0
      *src->buf_ptr = newbuf;
100
0
      src->incsize *= 2;
101
0
    }
102
8.79k
    memcpy(&src->buf[src->bufused], src->stdio_buffer, bytes_read);
103
8.79k
    src->bufused += bytes_read;
104
8.79k
    if (src->bufused_ptr)
105
8.79k
      *src->bufused_ptr = src->bufused;
106
8.79k
  }
107
108
2.45M
  src->pub.next_input_byte = src->stdio_buffer;
109
2.45M
  src->pub.bytes_in_buffer = bytes_read;
110
2.45M
  src->start_of_file = FALSE;
111
112
2.45M
  return TRUE;
113
2.45M
}
114
115
static boolean custom_fill_mem_input_buffer (j_decompress_ptr dinfo)
116
4.04M
{
117
4.04M
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
118
119
4.04M
  WARNMS(dinfo, JWRN_JPEG_EOF);
120
121
  /* Insert fake EOI marker as there is no more data... */
122
4.04M
  src->stdio_buffer[0] = (JOCTET) 0xff;
123
4.04M
  src->stdio_buffer[1] = (JOCTET) JPEG_EOI;
124
125
4.04M
  src->pub.next_input_byte = src->stdio_buffer;
126
4.04M
  src->pub.bytes_in_buffer = 2;
127
128
4.04M
  return TRUE;
129
4.04M
}
jpegsrc.c:custom_fill_mem_input_buffer
Line
Count
Source
116
1.34M
{
117
1.34M
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
118
119
1.34M
  WARNMS(dinfo, JWRN_JPEG_EOF);
120
121
  /* Insert fake EOI marker as there is no more data... */
122
1.34M
  src->stdio_buffer[0] = (JOCTET) 0xff;
123
1.34M
  src->stdio_buffer[1] = (JOCTET) JPEG_EOI;
124
125
1.34M
  src->pub.next_input_byte = src->stdio_buffer;
126
1.34M
  src->pub.bytes_in_buffer = 2;
127
128
1.34M
  return TRUE;
129
1.34M
}
jpegsrc.c:custom_fill_mem_input_buffer
Line
Count
Source
116
1.34M
{
117
1.34M
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
118
119
1.34M
  WARNMS(dinfo, JWRN_JPEG_EOF);
120
121
  /* Insert fake EOI marker as there is no more data... */
122
1.34M
  src->stdio_buffer[0] = (JOCTET) 0xff;
123
1.34M
  src->stdio_buffer[1] = (JOCTET) JPEG_EOI;
124
125
1.34M
  src->pub.next_input_byte = src->stdio_buffer;
126
1.34M
  src->pub.bytes_in_buffer = 2;
127
128
1.34M
  return TRUE;
129
1.34M
}
jpegsrc.c:custom_fill_mem_input_buffer
Line
Count
Source
116
1.34M
{
117
1.34M
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
118
119
1.34M
  WARNMS(dinfo, JWRN_JPEG_EOF);
120
121
  /* Insert fake EOI marker as there is no more data... */
122
1.34M
  src->stdio_buffer[0] = (JOCTET) 0xff;
123
1.34M
  src->stdio_buffer[1] = (JOCTET) JPEG_EOI;
124
125
1.34M
  src->pub.next_input_byte = src->stdio_buffer;
126
1.34M
  src->pub.bytes_in_buffer = 2;
127
128
1.34M
  return TRUE;
129
1.34M
}
130
131
132
static void custom_skip_input_data (j_decompress_ptr dinfo, long num_bytes)
133
10.2k
{
134
10.2k
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
135
136
10.2k
  if (num_bytes <= 0)
137
0
    return;
138
139
  /* skip "num_bytes" bytes of data from input... */
140
807k
  while (num_bytes > (long) src->pub.bytes_in_buffer) {
141
797k
    num_bytes -= src->pub.bytes_in_buffer;
142
797k
    (void)(src->pub.fill_input_buffer)(dinfo);
143
797k
  }
144
10.2k
  src->pub.next_input_byte += (size_t) num_bytes;
145
10.2k
  src->pub.bytes_in_buffer -= (size_t) num_bytes;
146
10.2k
}
147
148
149
static void custom_term_source (j_decompress_ptr dinfo)
150
588
{
151
588
  jpeg_custom_source_mgr_ptr src = (jpeg_custom_source_mgr_ptr) dinfo->src;
152
153
588
  if (src->bufused_ptr)
154
396
    *src->bufused_ptr = src->bufused;
155
588
}
156
157
158
void jpeg_custom_src(j_decompress_ptr dinfo, FILE *infile,
159
    unsigned char **bufptr, size_t *bufsizeptr, size_t *bufusedptr, size_t incsize)
160
2.32k
{
161
2.32k
  jpeg_custom_source_mgr_ptr src;
162
163
2.32k
  if (!dinfo->src) {
164
    /* Allocate source manager object if needed */
165
2.32k
    dinfo->src = (struct jpeg_source_mgr *)
166
2.32k
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
167
2.32k
            sizeof(jpeg_custom_source_mgr));
168
2.32k
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
169
2.32k
    src->stdio_buffer = (JOCTET *)
170
2.32k
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
171
2.32k
            STDIO_BUFFER_SIZE * sizeof(JOCTET));
172
2.32k
  } else {
173
0
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
174
0
  }
175
176
2.32k
  src->pub.init_source = custom_init_source;
177
2.32k
  src->pub.fill_input_buffer = custom_fill_input_buffer;
178
2.32k
  src->pub.resync_to_restart = jpeg_resync_to_restart;
179
2.32k
  src->pub.skip_input_data = custom_skip_input_data;
180
2.32k
  src->pub.term_source = custom_term_source;
181
2.32k
  src->infile = infile;
182
2.32k
  src->pub.bytes_in_buffer = 0;
183
2.32k
  src->pub.next_input_byte = NULL;
184
185
2.32k
  src->buf_ptr = bufptr;
186
2.32k
  src->buf = (bufptr ? *bufptr : NULL);
187
2.32k
  src->bufsize_ptr = bufsizeptr;
188
2.32k
  src->bufused_ptr = bufusedptr;
189
2.32k
  src->bufsize = (bufsizeptr ? *bufsizeptr : 0);
190
2.32k
  src->incsize = incsize;
191
2.32k
}
jpeg_custom_src
Line
Count
Source
160
775
{
161
775
  jpeg_custom_source_mgr_ptr src;
162
163
775
  if (!dinfo->src) {
164
    /* Allocate source manager object if needed */
165
775
    dinfo->src = (struct jpeg_source_mgr *)
166
775
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
167
775
            sizeof(jpeg_custom_source_mgr));
168
775
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
169
775
    src->stdio_buffer = (JOCTET *)
170
775
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
171
775
            STDIO_BUFFER_SIZE * sizeof(JOCTET));
172
775
  } else {
173
0
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
174
0
  }
175
176
775
  src->pub.init_source = custom_init_source;
177
775
  src->pub.fill_input_buffer = custom_fill_input_buffer;
178
775
  src->pub.resync_to_restart = jpeg_resync_to_restart;
179
775
  src->pub.skip_input_data = custom_skip_input_data;
180
775
  src->pub.term_source = custom_term_source;
181
775
  src->infile = infile;
182
775
  src->pub.bytes_in_buffer = 0;
183
775
  src->pub.next_input_byte = NULL;
184
185
775
  src->buf_ptr = bufptr;
186
775
  src->buf = (bufptr ? *bufptr : NULL);
187
775
  src->bufsize_ptr = bufsizeptr;
188
775
  src->bufused_ptr = bufusedptr;
189
775
  src->bufsize = (bufsizeptr ? *bufsizeptr : 0);
190
775
  src->incsize = incsize;
191
775
}
jpeg_custom_src
Line
Count
Source
160
775
{
161
775
  jpeg_custom_source_mgr_ptr src;
162
163
775
  if (!dinfo->src) {
164
    /* Allocate source manager object if needed */
165
775
    dinfo->src = (struct jpeg_source_mgr *)
166
775
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
167
775
            sizeof(jpeg_custom_source_mgr));
168
775
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
169
775
    src->stdio_buffer = (JOCTET *)
170
775
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
171
775
            STDIO_BUFFER_SIZE * sizeof(JOCTET));
172
775
  } else {
173
0
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
174
0
  }
175
176
775
  src->pub.init_source = custom_init_source;
177
775
  src->pub.fill_input_buffer = custom_fill_input_buffer;
178
775
  src->pub.resync_to_restart = jpeg_resync_to_restart;
179
775
  src->pub.skip_input_data = custom_skip_input_data;
180
775
  src->pub.term_source = custom_term_source;
181
775
  src->infile = infile;
182
775
  src->pub.bytes_in_buffer = 0;
183
775
  src->pub.next_input_byte = NULL;
184
185
775
  src->buf_ptr = bufptr;
186
775
  src->buf = (bufptr ? *bufptr : NULL);
187
775
  src->bufsize_ptr = bufsizeptr;
188
775
  src->bufused_ptr = bufusedptr;
189
775
  src->bufsize = (bufsizeptr ? *bufsizeptr : 0);
190
775
  src->incsize = incsize;
191
775
}
jpeg_custom_src
Line
Count
Source
160
775
{
161
775
  jpeg_custom_source_mgr_ptr src;
162
163
775
  if (!dinfo->src) {
164
    /* Allocate source manager object if needed */
165
775
    dinfo->src = (struct jpeg_source_mgr *)
166
775
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
167
775
            sizeof(jpeg_custom_source_mgr));
168
775
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
169
775
    src->stdio_buffer = (JOCTET *)
170
775
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
171
775
            STDIO_BUFFER_SIZE * sizeof(JOCTET));
172
775
  } else {
173
0
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
174
0
  }
175
176
775
  src->pub.init_source = custom_init_source;
177
775
  src->pub.fill_input_buffer = custom_fill_input_buffer;
178
775
  src->pub.resync_to_restart = jpeg_resync_to_restart;
179
775
  src->pub.skip_input_data = custom_skip_input_data;
180
775
  src->pub.term_source = custom_term_source;
181
775
  src->infile = infile;
182
775
  src->pub.bytes_in_buffer = 0;
183
775
  src->pub.next_input_byte = NULL;
184
185
775
  src->buf_ptr = bufptr;
186
775
  src->buf = (bufptr ? *bufptr : NULL);
187
775
  src->bufsize_ptr = bufsizeptr;
188
775
  src->bufused_ptr = bufusedptr;
189
775
  src->bufsize = (bufsizeptr ? *bufsizeptr : 0);
190
775
  src->incsize = incsize;
191
775
}
192
193
194
195
void jpeg_custom_mem_src(j_decompress_ptr dinfo, unsigned char *buf, size_t bufsize)
196
735
{
197
735
  jpeg_custom_source_mgr_ptr src;
198
199
735
  if (!dinfo->src) {
200
    /* Allocate source manager object if needed */
201
0
    dinfo->src = (struct jpeg_source_mgr *)
202
0
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
203
0
            sizeof(jpeg_custom_source_mgr));
204
0
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
205
0
    src->stdio_buffer = (JOCTET *)
206
0
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
207
0
            STDIO_BUFFER_SIZE * sizeof(JOCTET));
208
735
  } else {
209
735
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
210
735
  }
211
212
735
  src->pub.init_source = custom_init_mem_source;
213
735
  src->pub.fill_input_buffer = custom_fill_mem_input_buffer;
214
735
  src->pub.resync_to_restart = jpeg_resync_to_restart;
215
735
  src->pub.skip_input_data = custom_skip_input_data;
216
735
  src->pub.term_source = custom_term_source;
217
735
  src->infile = NULL;
218
735
  src->pub.bytes_in_buffer = bufsize;
219
735
  src->pub.next_input_byte = (JOCTET*) buf;
220
221
735
  src->buf_ptr = NULL;
222
735
  src->buf = NULL;
223
735
  src->bufsize_ptr = NULL;
224
735
  src->bufused_ptr = NULL;
225
735
  src->bufsize = bufsize;
226
735
  src->incsize = 0;
227
735
}
jpeg_custom_mem_src
Line
Count
Source
196
245
{
197
245
  jpeg_custom_source_mgr_ptr src;
198
199
245
  if (!dinfo->src) {
200
    /* Allocate source manager object if needed */
201
0
    dinfo->src = (struct jpeg_source_mgr *)
202
0
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
203
0
            sizeof(jpeg_custom_source_mgr));
204
0
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
205
0
    src->stdio_buffer = (JOCTET *)
206
0
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
207
0
            STDIO_BUFFER_SIZE * sizeof(JOCTET));
208
245
  } else {
209
245
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
210
245
  }
211
212
245
  src->pub.init_source = custom_init_mem_source;
213
245
  src->pub.fill_input_buffer = custom_fill_mem_input_buffer;
214
245
  src->pub.resync_to_restart = jpeg_resync_to_restart;
215
245
  src->pub.skip_input_data = custom_skip_input_data;
216
245
  src->pub.term_source = custom_term_source;
217
245
  src->infile = NULL;
218
245
  src->pub.bytes_in_buffer = bufsize;
219
245
  src->pub.next_input_byte = (JOCTET*) buf;
220
221
245
  src->buf_ptr = NULL;
222
245
  src->buf = NULL;
223
245
  src->bufsize_ptr = NULL;
224
245
  src->bufused_ptr = NULL;
225
245
  src->bufsize = bufsize;
226
245
  src->incsize = 0;
227
245
}
jpeg_custom_mem_src
Line
Count
Source
196
245
{
197
245
  jpeg_custom_source_mgr_ptr src;
198
199
245
  if (!dinfo->src) {
200
    /* Allocate source manager object if needed */
201
0
    dinfo->src = (struct jpeg_source_mgr *)
202
0
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
203
0
            sizeof(jpeg_custom_source_mgr));
204
0
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
205
0
    src->stdio_buffer = (JOCTET *)
206
0
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
207
0
            STDIO_BUFFER_SIZE * sizeof(JOCTET));
208
245
  } else {
209
245
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
210
245
  }
211
212
245
  src->pub.init_source = custom_init_mem_source;
213
245
  src->pub.fill_input_buffer = custom_fill_mem_input_buffer;
214
245
  src->pub.resync_to_restart = jpeg_resync_to_restart;
215
245
  src->pub.skip_input_data = custom_skip_input_data;
216
245
  src->pub.term_source = custom_term_source;
217
245
  src->infile = NULL;
218
245
  src->pub.bytes_in_buffer = bufsize;
219
245
  src->pub.next_input_byte = (JOCTET*) buf;
220
221
245
  src->buf_ptr = NULL;
222
245
  src->buf = NULL;
223
245
  src->bufsize_ptr = NULL;
224
245
  src->bufused_ptr = NULL;
225
245
  src->bufsize = bufsize;
226
245
  src->incsize = 0;
227
245
}
jpeg_custom_mem_src
Line
Count
Source
196
245
{
197
245
  jpeg_custom_source_mgr_ptr src;
198
199
245
  if (!dinfo->src) {
200
    /* Allocate source manager object if needed */
201
0
    dinfo->src = (struct jpeg_source_mgr *)
202
0
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
203
0
            sizeof(jpeg_custom_source_mgr));
204
0
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
205
0
    src->stdio_buffer = (JOCTET *)
206
0
      (*dinfo->mem->alloc_small) ((j_common_ptr) dinfo, JPOOL_PERMANENT,
207
0
            STDIO_BUFFER_SIZE * sizeof(JOCTET));
208
245
  } else {
209
245
    src = (jpeg_custom_source_mgr_ptr) dinfo->src;
210
245
  }
211
212
245
  src->pub.init_source = custom_init_mem_source;
213
245
  src->pub.fill_input_buffer = custom_fill_mem_input_buffer;
214
245
  src->pub.resync_to_restart = jpeg_resync_to_restart;
215
245
  src->pub.skip_input_data = custom_skip_input_data;
216
245
  src->pub.term_source = custom_term_source;
217
245
  src->infile = NULL;
218
245
  src->pub.bytes_in_buffer = bufsize;
219
245
  src->pub.next_input_byte = (JOCTET*) buf;
220
221
245
  src->buf_ptr = NULL;
222
245
  src->buf = NULL;
223
245
  src->bufsize_ptr = NULL;
224
245
  src->bufused_ptr = NULL;
225
245
  src->bufsize = bufsize;
226
245
  src->incsize = 0;
227
245
}
228
229
230
/* eof :-) */