Skip to content

Commit 2cd0b27

Browse files
committed
fix: undefined ENODATA on FreeBSD
1 parent 9a1c496 commit 2cd0b27

File tree

4 files changed

+71
-65
lines changed

4 files changed

+71
-65
lines changed

src/image/bmp.c

+9-7
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
#include <LCUI/graph.h>
3838
#include <LCUI/image.h>
3939

40+
/* clang-format off */
41+
4042
typedef struct {
4143
uint16_t type; /**< Magic identifier */
4244
uint32_t size; /**< File size in bytes */
@@ -67,10 +69,12 @@ typedef struct LCUI_BMPReaderRec_ {
6769
INFOHEADER info;
6870
} LCUI_BMPReaderRec, *LCUI_BMPReader;
6971

72+
/* clang-format on */
73+
7074
static void BMPHeader_Init(HEADER *header, uint16_t buffer[8])
7175
{
7276
header->type = buffer[0];
73-
header->size = *(uint32_t*)(buffer + 1);
77+
header->size = *(uint32_t *)(buffer + 1);
7478
header->reserved1 = buffer[3];
7579
header->reserved2 = buffer[4];
7680
header->offset = buffer[5];
@@ -104,11 +108,11 @@ int LCUI_ReadBMPHeader(LCUI_ImageReader reader)
104108
* 变量的值不正常,因此需要手动为其成员变量赋值 */
105109
BMPHeader_Init(&bmp_reader->header, buffer);
106110
if (n < 14 || bmp_reader->header.type != 0x4D42) {
107-
return -ENODATA;
111+
return -2;
108112
}
109113
n = reader->fn_read(reader->stream_data, info, sizeof(INFOHEADER));
110114
if (n < sizeof(INFOHEADER)) {
111-
return -ENODATA;
115+
return -2;
112116
}
113117
reader->header.width = info->width;
114118
reader->header.height = info->height;
@@ -131,7 +135,7 @@ int LCUI_ReadBMP(LCUI_ImageReader reader, LCUI_Graph *graph)
131135
}
132136
if (reader->header.type == LCUI_UNKNOWN_IMAGE) {
133137
if (LCUI_ReadBMPHeader(reader) != 0) {
134-
return -ENODATA;
138+
return -2;
135139
}
136140
}
137141
/* 信息头中的偏移位置是相对于起始处,需要减去当前已经偏移的位置 */
@@ -155,8 +159,7 @@ int LCUI_ReadBMP(LCUI_ImageReader reader, LCUI_Graph *graph)
155159
/* 从最后一行开始保存 */
156160
dest = graph->bytes + graph->bytes_per_row * (graph->height - 1);
157161
for (row = 0; row < info->height; ++row) {
158-
n = reader->fn_read(reader->stream_data,
159-
buffer, bytes_per_row);
162+
n = reader->fn_read(reader->stream_data, buffer, bytes_per_row);
160163
if (n < bytes_per_row) {
161164
break;
162165
}
@@ -170,4 +173,3 @@ int LCUI_ReadBMP(LCUI_ImageReader reader, LCUI_Graph *graph)
170173
free(buffer);
171174
return 0;
172175
}
173-

src/image/jpeg.c

+20-21
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ typedef struct LCUI_JPEGErrorRec_ {
5252
} LCUI_JPEGErrorRec, *LCUI_JPEGError;
5353

5454
typedef struct LCUI_JPEGReaderRec_ {
55-
struct jpeg_source_mgr src; /**< JPEG 资源管理接口 */
56-
LCUI_JPEGErrorRec err; /**< JPEG 的错误处理接口 */
57-
LCUI_BOOL start_of_file; /**< 是否刚开始读文件 */
58-
LCUI_ImageReader base; /**< 所属的图片读取器 */
59-
unsigned char buffer[BUFFER_SIZE]; /**< 数据缓存 */
55+
struct jpeg_source_mgr src; /**< JPEG 资源管理接口 */
56+
LCUI_JPEGErrorRec err; /**< JPEG 的错误处理接口 */
57+
LCUI_BOOL start_of_file; /**< 是否刚开始读文件 */
58+
LCUI_ImageReader base; /**< 所属的图片读取器 */
59+
unsigned char buffer[BUFFER_SIZE]; /**< 数据缓存 */
6060
} LCUI_JPEGReaderRec, *LCUI_JPEGReader;
6161

6262
static void DestroyJPEGReader(void *data)
@@ -94,8 +94,8 @@ static boolean JPEGReader_OnRead(j_decompress_ptr cinfo)
9494
LCUI_JPEGReader jpeg_reader;
9595
jpeg_reader = (LCUI_JPEGReader)cinfo->src;
9696
reader = jpeg_reader->base;
97-
size = reader->fn_read(reader->stream_data,
98-
jpeg_reader->buffer, BUFFER_SIZE);
97+
size = reader->fn_read(reader->stream_data, jpeg_reader->buffer,
98+
BUFFER_SIZE);
9999
if (size <= 0) {
100100
/* 将空的输入文件视为致命错误 */
101101
if (jpeg_reader->start_of_file) {
@@ -159,8 +159,8 @@ static void JPEGReader_OnTerminate(j_decompress_ptr cinfo)
159159

160160
static void *jpeg_malloc(j_decompress_ptr cinfo, size_t size)
161161
{
162-
return cinfo->mem->alloc_small((j_common_ptr)cinfo,
163-
JPOOL_PERMANENT, size);
162+
return cinfo->mem->alloc_small((j_common_ptr)cinfo, JPOOL_PERMANENT,
163+
size);
164164
}
165165

166166
int LCUI_ReadJPEGHeader(LCUI_ImageReader reader)
@@ -178,13 +178,13 @@ int LCUI_ReadJPEGHeader(LCUI_ImageReader reader)
178178
size = reader->fn_read(reader->stream_data, jpeg_reader->buffer,
179179
sizeof(short int));
180180
if (size < sizeof(short int)) {
181-
return -ENODATA;
181+
return -2;
182182
}
183183
jpeg_reader->src.bytes_in_buffer = sizeof(short int);
184184
jpeg_reader->src.next_input_byte = jpeg_reader->buffer;
185-
buffer = (short int*)jpeg_reader->buffer;
185+
buffer = (short int *)jpeg_reader->buffer;
186186
if (buffer[0] != -9985) {
187-
return -ENODATA;
187+
return -2;
188188
}
189189
jpeg_read_header(cinfo, TRUE);
190190
header->width = cinfo->image_width;
@@ -222,7 +222,7 @@ int LCUI_InitJPEGReader(LCUI_ImageReader reader)
222222
reader->header.type = LCUI_UNKNOWN_IMAGE;
223223
reader->destructor = DestroyJPEGReader;
224224
reader->env = &reader->env_src;
225-
cinfo->src = (struct jpeg_source_mgr*)jpeg_reader;
225+
cinfo->src = (struct jpeg_source_mgr *)jpeg_reader;
226226
cinfo->err = jpeg_std_error(&jpeg_reader->err.pub);
227227
jpeg_reader->err.pub.error_exit = JPEGReader_OnErrorExit;
228228
jpeg_reader->err.reader = reader;
@@ -247,7 +247,7 @@ int LCUI_ReadJPEG(LCUI_ImageReader reader, LCUI_Graph *graph)
247247
}
248248
if (reader->header.type == LCUI_UNKNOWN_IMAGE) {
249249
if (LCUI_ReadJPEGHeader(reader) != 0) {
250-
return -ENODATA;
250+
return -2;
251251
}
252252
}
253253
cinfo = reader->data;
@@ -257,13 +257,13 @@ int LCUI_ReadJPEG(LCUI_ImageReader reader, LCUI_Graph *graph)
257257
return -ENOSYS;
258258
}
259259
graph->color_type = LCUI_COLOR_TYPE_RGB;
260-
if (0 != Graph_Create(graph, cinfo->output_width,
261-
cinfo->output_height)) {
260+
if (0 !=
261+
Graph_Create(graph, cinfo->output_width, cinfo->output_height)) {
262262
return -ENOMEM;
263263
}
264264
row_stride = cinfo->output_width * cinfo->output_components;
265-
buffer = cinfo->mem->alloc_sarray((j_common_ptr)cinfo,
266-
JPOOL_IMAGE, row_stride, 1);
265+
buffer = cinfo->mem->alloc_sarray((j_common_ptr)cinfo, JPOOL_IMAGE,
266+
row_stride, 1);
267267
while (cinfo->output_scanline < cinfo->output_height) {
268268
bytep = graph->bytes;
269269
bytep += cinfo->output_scanline * graph->bytes_per_row;
@@ -276,8 +276,8 @@ int LCUI_ReadJPEG(LCUI_ImageReader reader, LCUI_Graph *graph)
276276
}
277277
if (reader->fn_prog) {
278278
reader->fn_prog(reader->prog_arg,
279-
100.0f * cinfo->output_scanline
280-
/ cinfo->output_height);
279+
100.0f * cinfo->output_scanline /
280+
cinfo->output_height);
281281
}
282282
}
283283
return 0;
@@ -286,4 +286,3 @@ int LCUI_ReadJPEG(LCUI_ImageReader reader, LCUI_Graph *graph)
286286
#endif
287287
return -ENOSYS;
288288
}
289-

src/image/png.c

+27-21
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@
3737
#ifdef ASSERT
3838
#undef ASSERT
3939
#endif
40-
#define ASSERT(X) if(!(X)) goto error;
40+
#define ASSERT(X) \
41+
if (!(X)) \
42+
goto error;
4143

4244
#ifdef USE_LIBPNG
4345
#include <png.h>
@@ -54,14 +56,14 @@ static void DestroyPNGReader(void *data)
5456
{
5557
LCUI_PNGReader reader = data;
5658
if (reader->png_ptr) {
57-
png_destroy_read_struct(&reader->png_ptr,
58-
&reader->info_ptr, NULL);
59+
png_destroy_read_struct(&reader->png_ptr, &reader->info_ptr,
60+
NULL);
5961
}
6062
free(reader);
6163
}
6264

63-
static void PNGReader_OnRead(png_structp png_ptr,
64-
png_bytep buffer, png_size_t size)
65+
static void PNGReader_OnRead(png_structp png_ptr, png_bytep buffer,
66+
png_size_t size)
6567
{
6668
size_t read_size;
6769
LCUI_ImageReader reader = png_get_io_ptr(png_ptr);
@@ -84,8 +86,8 @@ int LCUI_InitPNGReader(LCUI_ImageReader reader)
8486
{
8587
#ifdef USE_LIBPNG
8688
ASSIGN(png_reader, LCUI_PNGReader);
87-
png_reader->png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
88-
NULL, NULL, NULL);
89+
png_reader->png_ptr =
90+
png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
8991
ASSERT(png_reader->png_ptr);
9092
png_reader->info_ptr = png_create_info_struct(png_reader->png_ptr);
9193
ASSERT(png_reader->info_ptr);
@@ -122,11 +124,11 @@ int LCUI_ReadPNGHeader(LCUI_ImageReader reader)
122124
info_ptr = png_reader->info_ptr;
123125
n = reader->fn_read(reader->stream_data, buf, PNG_BYTES_TO_CHECK);
124126
if (n < PNG_BYTES_TO_CHECK) {
125-
return -ENODATA;
127+
return -2;
126128
}
127129
/* 检测数据是否为PNG的签名 */
128130
if (!png_check_sig(buf, PNG_BYTES_TO_CHECK)) {
129-
return -ENODATA;
131+
return -2;
130132
}
131133
png_set_sig_bytes(png_reader->png_ptr, PNG_BYTES_TO_CHECK);
132134
/* 读取PNG图片信息 */
@@ -175,7 +177,7 @@ int LCUI_ReadPNG(LCUI_ImageReader reader, LCUI_Graph *graph)
175177
info_ptr = png_reader->info_ptr;
176178
if (header->type == LCUI_UNKNOWN_IMAGE) {
177179
if (LCUI_ReadPNGHeader(reader) != 0) {
178-
return -ENODATA;
180+
return -2;
179181
}
180182
}
181183
/* 根据不同的色彩类型进行相应处理 */
@@ -198,7 +200,7 @@ int LCUI_ReadPNG(LCUI_ImageReader reader, LCUI_Graph *graph)
198200
break;
199201
default:
200202
/* 其它色彩类型的图像就不处理了 */
201-
return -ENODATA;
203+
return -2;
202204
}
203205
png_set_bgr(png_ptr);
204206
png_set_expand(png_ptr);
@@ -239,11 +241,13 @@ int LCUI_WritePNGFile(const char *file_name, const LCUI_Graph *graph)
239241
/* create file */
240242
fp = fopen(file_name, "wb");
241243
if (!fp) {
242-
_DEBUG_MSG("file %s could not be opened for writing\n", file_name);
244+
_DEBUG_MSG("file %s could not be opened for writing\n",
245+
file_name);
243246
return -1;
244247
}
245248
/* initialize stuff */
246-
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
249+
png_ptr =
250+
png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
247251
if (!png_ptr) {
248252
fclose(fp);
249253
_DEBUG_MSG("png_create_write_struct failed\n");
@@ -269,9 +273,9 @@ int LCUI_WritePNGFile(const char *file_name, const LCUI_Graph *graph)
269273
color_type = PNG_COLOR_TYPE_RGB;
270274
}
271275
/* write header */
272-
png_set_IHDR(png_ptr, info_ptr, graph->width, graph->height,
273-
8, color_type, PNG_INTERLACE_NONE,
274-
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
276+
png_set_IHDR(png_ptr, info_ptr, graph->width, graph->height, 8,
277+
color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
278+
PNG_FILTER_TYPE_BASE);
275279

276280
png_write_info(png_ptr, info_ptr);
277281
/* write bytes */
@@ -283,7 +287,8 @@ int LCUI_WritePNGFile(const char *file_name, const LCUI_Graph *graph)
283287

284288
row_size = png_get_rowbytes(png_ptr, info_ptr);
285289
px_row_ptr = graph->argb + rect.y * graph->width + rect.x;
286-
row_pointers = (png_bytep*)malloc(rect.height * sizeof(png_bytep));
290+
row_pointers =
291+
(png_bytep *)malloc(rect.height * sizeof(png_bytep));
287292
for (y = 0; y < rect.height; ++y) {
288293
row_pointers[y] = png_malloc(png_ptr, row_size);
289294
px_ptr = px_row_ptr;
@@ -301,14 +306,15 @@ int LCUI_WritePNGFile(const char *file_name, const LCUI_Graph *graph)
301306
row_size = png_get_rowbytes(png_ptr, info_ptr);
302307
px_row_ptr = graph->bytes + rect.y * graph->bytes_per_row;
303308
px_row_ptr += rect.x * graph->bytes_per_pixel;
304-
row_pointers = (png_bytep*)malloc(rect.height * sizeof(png_bytep));
309+
row_pointers =
310+
(png_bytep *)malloc(rect.height * sizeof(png_bytep));
305311
for (y = 0; y < rect.height; ++y) {
306312
row_pointers[y] = (png_bytep)malloc(row_size);
307313
px_ptr = px_row_ptr;
308314
for (x = 0; x < row_size; x += 3) {
309-
row_pointers[y][x + 2] = *px_ptr++; // blue
310-
row_pointers[y][x + 1] = *px_ptr++; // green
311-
row_pointers[y][x] = *px_ptr++; // red
315+
row_pointers[y][x + 2] = *px_ptr++; // blue
316+
row_pointers[y][x + 1] = *px_ptr++; // green
317+
row_pointers[y][x] = *px_ptr++; // red
312318
}
313319
px_row_ptr += graph->bytes_per_row;
314320
}

src/image/reader.c

+15-16
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,15 @@
3939

4040
typedef struct LCUI_ImageInterfaceRec_ {
4141
const char *suffix;
42-
int(*init)(LCUI_ImageReader);
43-
int(*read_header)(LCUI_ImageReader);
44-
int(*read)(LCUI_ImageReader, LCUI_Graph*);
42+
int (*init)(LCUI_ImageReader);
43+
int (*read_header)(LCUI_ImageReader);
44+
int (*read)(LCUI_ImageReader, LCUI_Graph *);
4545
} LCUI_ImageInterfaceRec, *LCUI_ImageInterface;
4646

4747
static const LCUI_ImageInterfaceRec interfaces[] = {
4848
{ ".png", LCUI_InitPNGReader, LCUI_ReadPNGHeader, LCUI_ReadPNG },
49-
{ ".jpeg .jpg", LCUI_InitJPEGReader, LCUI_ReadJPEGHeader, LCUI_ReadJPEG },
49+
{ ".jpeg .jpg", LCUI_InitJPEGReader, LCUI_ReadJPEGHeader,
50+
LCUI_ReadJPEG },
5051
{ ".bmp", LCUI_InitBMPReader, LCUI_ReadBMPHeader, LCUI_ReadBMP }
5152
};
5253

@@ -92,10 +93,10 @@ static int LCUI_InitImageReaderByType(LCUI_ImageReader reader, int type)
9293
reader->fn_rewind(reader->stream_data);
9394
ret = interfaces[type].init(reader);
9495
if (ret != 0) {
95-
return -ENODATA;
96+
return -2;
9697
}
9798
if (LCUI_SetImageReaderJump(reader)) {
98-
return -ENODATA;
99+
return -2;
99100
}
100101
return interfaces[type].read_header(reader);
101102
}
@@ -135,7 +136,7 @@ int LCUI_ReadImageHeader(LCUI_ImageReader reader)
135136
if (i < n_interfaces && i >= 0) {
136137
return interfaces[i].read_header(reader);
137138
}
138-
return -ENODATA;
139+
return -2;
139140
}
140141

141142
int LCUI_ReadImage(LCUI_ImageReader reader, LCUI_Graph *out)
@@ -144,7 +145,7 @@ int LCUI_ReadImage(LCUI_ImageReader reader, LCUI_Graph *out)
144145
if (i < n_interfaces && i >= 0) {
145146
return interfaces[i].read(reader, out);
146147
}
147-
return -ENODATA;
148+
return -2;
148149
}
149150

150151
int LCUI_ReadImageFile(const char *filepath, LCUI_Graph *out)
@@ -165,18 +166,17 @@ int LCUI_ReadImageFile(const char *filepath, LCUI_Graph *out)
165166
if (ret < 0) {
166167
if (LCUI_InitImageReader(&reader) != 0) {
167168
fclose(fp);
168-
return -ENODATA;
169+
return -2;
169170
}
170171
}
171172
if (LCUI_SetImageReaderJump(&reader)) {
172-
ret = -ENODATA;
173-
goto exit;
173+
ret = -2;
174+
} else {
175+
ret = LCUI_ReadImage(&reader, out);
174176
}
175-
ret = LCUI_ReadImage(&reader, out);
176-
exit:
177177
LCUI_DestroyImageReader(&reader);
178178
fclose(fp);
179-
return ret;
179+
return ret;
180180
}
181181

182182
int LCUI_GetImageSize(const char *filepath, int *width, int *height)
@@ -197,7 +197,7 @@ int LCUI_GetImageSize(const char *filepath, int *width, int *height)
197197
if (ret < 0) {
198198
if (LCUI_InitImageReader(&reader) != 0) {
199199
fclose(fp);
200-
return -ENODATA;
200+
return -2;
201201
}
202202
}
203203
*width = reader.header.width;
@@ -206,4 +206,3 @@ int LCUI_GetImageSize(const char *filepath, int *width, int *height)
206206
fclose(fp);
207207
return 0;
208208
}
209-

0 commit comments

Comments
 (0)