forked from old/legacy-imlib2
Saver cleanups
- Do exit cleanups at exit. - Use LOAD_FAIL/SUCCESS/BREAK for save() exit code. - Cosmetics.
This commit is contained in:
parent
bd3aa88242
commit
6a7eb67f46
|
@ -96,6 +96,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
|
|||
char
|
||||
save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
||||
{
|
||||
int rc;
|
||||
FILE *f;
|
||||
DATA32 *ptr;
|
||||
int y, pl = 0, alpha = 0;
|
||||
|
@ -105,15 +106,17 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
DATA32 *buf = (DATA32 *) malloc(im->w * 4);
|
||||
#endif
|
||||
|
||||
/* no image data? abort */
|
||||
if (!im->data)
|
||||
return 0;
|
||||
f = fopen(im->real_file, "wb");
|
||||
if (!f)
|
||||
return 0;
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
|
||||
if (im->flags & F_HAS_ALPHA)
|
||||
alpha = 1;
|
||||
|
||||
fprintf(f, "ARGB %i %i %i\n", im->w, im->h, alpha);
|
||||
|
||||
ptr = im->data;
|
||||
for (y = 0; y < im->h; y++)
|
||||
{
|
||||
|
@ -141,25 +144,26 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
l = y - pl;
|
||||
if (!progress(im, per, 0, (y - l), im->w, l))
|
||||
{
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
if (buf)
|
||||
free(buf);
|
||||
#endif
|
||||
fclose(f);
|
||||
return 2;
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
pper = per;
|
||||
pl = y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
||||
quit:
|
||||
/* finish off */
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
if (buf)
|
||||
free(buf);
|
||||
#endif
|
||||
fclose(f);
|
||||
return 1;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -904,16 +904,16 @@ load(ImlibImage * im, ImlibProgressFunction progress,
|
|||
char
|
||||
save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
||||
{
|
||||
int rc;
|
||||
FILE *f;
|
||||
int i, j, pad;
|
||||
DATA32 pixel;
|
||||
|
||||
if (!im->data)
|
||||
return 0;
|
||||
|
||||
f = fopen(im->real_file, "wb");
|
||||
if (!f)
|
||||
return 0;
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
||||
/* calculate number of bytes to pad on end of each row */
|
||||
pad = (4 - ((im->w * 3) % 4)) & 0x03;
|
||||
|
@ -951,7 +951,8 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
}
|
||||
|
||||
fclose(f);
|
||||
return 1;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -89,42 +89,39 @@ load(ImlibImage * im, ImlibProgressFunction progress,
|
|||
}
|
||||
|
||||
char
|
||||
save(ImlibImage * im, ImlibProgressFunction progress, char progress_gran)
|
||||
save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
||||
{
|
||||
int rc;
|
||||
FILE *f;
|
||||
size_t rowlen, i, j;
|
||||
uint32_t tmp32;
|
||||
uint16_t *row;
|
||||
uint8_t *dat;
|
||||
|
||||
/* open the file for writing */
|
||||
if (!(f = fopen(im->real_file, "wb")))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
f = fopen(im->real_file, "wb");
|
||||
if (!f)
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
row = NULL;
|
||||
|
||||
/* write header */
|
||||
fputs("farbfeld", f);
|
||||
|
||||
tmp32 = htonl(im->w);
|
||||
if (fwrite(&tmp32, sizeof(uint32_t), 1, f) != 1)
|
||||
{
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
tmp32 = htonl(im->h);
|
||||
if (fwrite(&tmp32, sizeof(uint32_t), 1, f) != 1)
|
||||
{
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
/* write data */
|
||||
rowlen = im->w * (sizeof("RGBA") - 1);
|
||||
if (!(row = malloc(rowlen * sizeof(uint16_t))))
|
||||
{
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
row = malloc(rowlen * sizeof(uint16_t));
|
||||
if (!row)
|
||||
goto quit;
|
||||
|
||||
dat = (uint8_t *) im->data;
|
||||
for (i = 0; i < (uint32_t) im->h; ++i, dat += rowlen)
|
||||
{
|
||||
|
@ -140,20 +137,21 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_gran)
|
|||
row[j + 3] = htons(dat[j + 3] * 257);
|
||||
}
|
||||
if (fwrite(row, sizeof(uint16_t), rowlen, f) != rowlen)
|
||||
{
|
||||
free(row);
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
}
|
||||
|
||||
if (progress)
|
||||
{
|
||||
progress(im, 100, 0, 0, im->w, im->h);
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
||||
quit:
|
||||
free(row);
|
||||
fclose(f);
|
||||
return 1;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -202,6 +202,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
|
|||
char
|
||||
save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
||||
{
|
||||
int rc;
|
||||
struct jpeg_compress_struct cinfo;
|
||||
ImLib_JPEG_data jdata;
|
||||
FILE *f;
|
||||
|
@ -213,31 +214,21 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
int i, j, pl;
|
||||
char pper;
|
||||
|
||||
/* no image data? abort */
|
||||
if (!im->data)
|
||||
return 0;
|
||||
|
||||
/* allocate a small buffer to convert image data */
|
||||
buf = malloc(im->w * 3 * sizeof(DATA8));
|
||||
if (!buf)
|
||||
return 0;
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
|
||||
f = fopen(im->real_file, "wb");
|
||||
if (!f)
|
||||
{
|
||||
free(buf);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
/* set up error handling */
|
||||
cinfo.err = _jdata_init(&jdata);
|
||||
if (sigsetjmp(jdata.setjmp_buffer, 1))
|
||||
{
|
||||
jpeg_destroy_compress(&cinfo);
|
||||
free(buf);
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
/* setup compress params */
|
||||
jpeg_create_compress(&cinfo);
|
||||
|
@ -310,24 +301,25 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
l = y - pl;
|
||||
if (!progress(im, per, 0, (y - l), im->w, l))
|
||||
{
|
||||
jpeg_finish_compress(&cinfo);
|
||||
jpeg_destroy_compress(&cinfo);
|
||||
free(buf);
|
||||
fclose(f);
|
||||
return 2;
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
pper = per;
|
||||
pl = y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
||||
quit:
|
||||
/* finish off */
|
||||
jpeg_finish_compress(&cinfo);
|
||||
jpeg_destroy_compress(&cinfo);
|
||||
free(buf);
|
||||
fclose(f);
|
||||
return 1;
|
||||
progress = NULL;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -206,6 +206,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
|
|||
char
|
||||
save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
||||
{
|
||||
int rc;
|
||||
FILE *f;
|
||||
png_structp png_ptr;
|
||||
png_infop info_ptr;
|
||||
|
@ -216,32 +217,24 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
ImlibImageTag *tag;
|
||||
int quality = 75, compression = 3, num_passes = 1, pass;
|
||||
|
||||
if (!im->data)
|
||||
return 0;
|
||||
|
||||
f = fopen(im->real_file, "wb");
|
||||
if (!f)
|
||||
return 0;
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
info_ptr = NULL;
|
||||
data = NULL;
|
||||
|
||||
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||
if (!png_ptr)
|
||||
{
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
info_ptr = png_create_info_struct(png_ptr);
|
||||
if (!info_ptr)
|
||||
{
|
||||
fclose(f);
|
||||
png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
if (setjmp(png_jmpbuf(png_ptr)))
|
||||
{
|
||||
fclose(f);
|
||||
png_destroy_write_struct(&png_ptr, (png_infopp) & info_ptr);
|
||||
png_destroy_info_struct(png_ptr, (png_infopp) & info_ptr);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
/* check whether we should use interlacing */
|
||||
interlace = PNG_INTERLACE_NONE;
|
||||
|
@ -252,7 +245,6 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
#endif
|
||||
}
|
||||
|
||||
data = NULL;
|
||||
png_init_io(png_ptr, f);
|
||||
if (im->flags & F_HAS_ALPHA)
|
||||
{
|
||||
|
@ -352,15 +344,8 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
l = y - pl;
|
||||
if (!progress(im, per, 0, (y - l), im->w, l))
|
||||
{
|
||||
if (data)
|
||||
free(data);
|
||||
png_write_end(png_ptr, info_ptr);
|
||||
png_destroy_write_struct(&png_ptr,
|
||||
(png_infopp) & info_ptr);
|
||||
png_destroy_info_struct(png_ptr,
|
||||
(png_infopp) & info_ptr);
|
||||
fclose(f);
|
||||
return 2;
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
pper = per;
|
||||
pl = y;
|
||||
|
@ -369,14 +354,21 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
ptr += im->w;
|
||||
}
|
||||
}
|
||||
if (data)
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
||||
quit:
|
||||
free(data);
|
||||
png_write_end(png_ptr, info_ptr);
|
||||
png_destroy_write_struct(&png_ptr, (png_infopp) & info_ptr);
|
||||
if (info_ptr)
|
||||
png_destroy_info_struct(png_ptr, (png_infopp) & info_ptr);
|
||||
if (png_ptr)
|
||||
png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
|
||||
|
||||
fclose(f);
|
||||
return 1;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* fills the ImlibLoader struct with a string array of format file */
|
||||
|
|
|
@ -421,24 +421,22 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
int x, y, pl = 0;
|
||||
char pper = 0;
|
||||
|
||||
/* no image data? abort */
|
||||
if (!im->data)
|
||||
return 0;
|
||||
f = fopen(im->real_file, "wb");
|
||||
if (!f)
|
||||
return 0;
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = 0; /* Error */
|
||||
rc = LOAD_FAIL;
|
||||
|
||||
/* if the image has a useful alpha channel */
|
||||
if (im->flags & F_HAS_ALPHA)
|
||||
{
|
||||
/* allocate a small buffer to convert image data */
|
||||
buf = malloc(im->w * 4 * sizeof(DATA8));
|
||||
if (!buf)
|
||||
goto quit;
|
||||
|
||||
ptr = im->data;
|
||||
|
||||
/* if the image has a useful alpha channel */
|
||||
if (im->flags & F_HAS_ALPHA)
|
||||
{
|
||||
fprintf(f, "P8\n" "# PNM File written by Imlib2\n" "%i %i\n" "255\n",
|
||||
im->w, im->h);
|
||||
for (y = 0; y < im->h; y++)
|
||||
|
@ -462,12 +460,6 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* allocate a small buffer to convert image data */
|
||||
buf = malloc(im->w * 3 * sizeof(DATA8));
|
||||
if (!buf)
|
||||
goto quit;
|
||||
|
||||
ptr = im->data;
|
||||
fprintf(f, "P6\n" "# PNM File written by Imlib2\n" "%i %i\n" "255\n",
|
||||
im->w, im->h);
|
||||
for (y = 0; y < im->h; y++)
|
||||
|
@ -489,15 +481,17 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
}
|
||||
}
|
||||
|
||||
rc = 1; /* Ok */
|
||||
rc = LOAD_SUCCESS;
|
||||
|
||||
quit:
|
||||
/* finish off */
|
||||
free(buf);
|
||||
quit:
|
||||
fclose(f);
|
||||
|
||||
return rc;
|
||||
|
||||
quit_progress:
|
||||
rc = 2;
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
|
||||
|
|
|
@ -65,20 +65,19 @@ typedef struct {
|
|||
char
|
||||
save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
||||
{
|
||||
int rc;
|
||||
FILE *f;
|
||||
DATA32 *dataptr;
|
||||
unsigned char *buf, *bufptr;
|
||||
int y, pl = 0;
|
||||
char pper = 0;
|
||||
|
||||
tga_header header;
|
||||
|
||||
if (!im->data)
|
||||
return 0;
|
||||
|
||||
f = fopen(im->real_file, "wb");
|
||||
if (!f)
|
||||
return 0;
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
|
||||
/* assemble the TGA header information */
|
||||
|
||||
|
@ -109,10 +108,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
/* allocate a buffer to receive the BGRA-swapped pixel values */
|
||||
buf = malloc(im->w * im->h * ((im->flags & F_HAS_ALPHA) ? 4 : 3));
|
||||
if (!buf)
|
||||
{
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
/* now we have to read from im->data into buf, swapping RGBA to BGRA */
|
||||
dataptr = im->data;
|
||||
|
@ -147,9 +143,8 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
l = y - pl;
|
||||
if (!progress(im, per, 0, (y - l), im->w, l))
|
||||
{
|
||||
free(buf);
|
||||
fclose(f);
|
||||
return 2;
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
pper = per;
|
||||
pl = y;
|
||||
|
@ -163,9 +158,13 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
/* write the image data */
|
||||
fwrite(buf, 1, im->w * im->h * ((im->flags & F_HAS_ALPHA) ? 4 : 3), f);
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
||||
quit:
|
||||
free(buf);
|
||||
fclose(f);
|
||||
return 1;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* Load up a TGA file
|
||||
|
|
|
@ -400,6 +400,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
|
|||
char
|
||||
save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
||||
{
|
||||
int rc;
|
||||
TIFF *tif = NULL;
|
||||
uint8 *buf = NULL;
|
||||
DATA32 pixel, *data = im->data;
|
||||
|
@ -415,13 +416,11 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
ImlibImageTag *tag;
|
||||
int compression_type = COMPRESSION_DEFLATE;
|
||||
|
||||
if (!im->data)
|
||||
return 0;
|
||||
|
||||
tif = TIFFOpen(im->real_file, "w");
|
||||
|
||||
if (!tif)
|
||||
return 0;
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
|
||||
/* None of the TIFFSetFields are checked for errors, but since they */
|
||||
/* shouldn't fail, this shouldn't be a problem */
|
||||
|
@ -445,49 +444,27 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
switch (compression_type)
|
||||
{
|
||||
case COMPRESSION_NONE:
|
||||
break;
|
||||
case COMPRESSION_CCITTRLE:
|
||||
break;
|
||||
case COMPRESSION_CCITTFAX3:
|
||||
break;
|
||||
case COMPRESSION_CCITTFAX4:
|
||||
break;
|
||||
case COMPRESSION_LZW:
|
||||
break;
|
||||
case COMPRESSION_OJPEG:
|
||||
break;
|
||||
case COMPRESSION_JPEG:
|
||||
break;
|
||||
case COMPRESSION_NEXT:
|
||||
break;
|
||||
case COMPRESSION_CCITTRLEW:
|
||||
break;
|
||||
case COMPRESSION_PACKBITS:
|
||||
break;
|
||||
case COMPRESSION_THUNDERSCAN:
|
||||
break;
|
||||
case COMPRESSION_IT8CTPAD:
|
||||
break;
|
||||
case COMPRESSION_IT8LW:
|
||||
break;
|
||||
case COMPRESSION_IT8MP:
|
||||
break;
|
||||
case COMPRESSION_IT8BL:
|
||||
break;
|
||||
case COMPRESSION_PIXARFILM:
|
||||
break;
|
||||
case COMPRESSION_PIXARLOG:
|
||||
break;
|
||||
case COMPRESSION_DEFLATE:
|
||||
break;
|
||||
case COMPRESSION_ADOBE_DEFLATE:
|
||||
break;
|
||||
case COMPRESSION_DCS:
|
||||
break;
|
||||
case COMPRESSION_JBIG:
|
||||
break;
|
||||
case COMPRESSION_SGILOG:
|
||||
break;
|
||||
case COMPRESSION_SGILOG24:
|
||||
break;
|
||||
default:
|
||||
|
@ -511,12 +488,8 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tif, 0));
|
||||
|
||||
buf = (uint8 *) _TIFFmalloc(TIFFScanlineSize(tif));
|
||||
|
||||
if (!buf)
|
||||
{
|
||||
TIFFClose(tif);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
for (y = 0; y < im->h; y++)
|
||||
{
|
||||
|
@ -547,11 +520,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
}
|
||||
|
||||
if (!TIFFWriteScanline(tif, buf, y, 0))
|
||||
{
|
||||
_TIFFfree(buf);
|
||||
TIFFClose(tif);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
if (progress)
|
||||
{
|
||||
|
@ -569,10 +538,15 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
}
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
||||
quit:
|
||||
if (buf)
|
||||
_TIFFfree(buf);
|
||||
if (tif)
|
||||
TIFFClose(tif);
|
||||
|
||||
return 1;
|
||||
return rc;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -113,23 +113,20 @@ load(ImlibImage * im, ImlibProgressFunction progress,
|
|||
char
|
||||
save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
||||
{
|
||||
int rc;
|
||||
int encoded_fd;
|
||||
ImlibImageTag *quality_tag;
|
||||
float quality;
|
||||
uint8_t *encoded_data;
|
||||
ssize_t encoded_size;
|
||||
|
||||
if (!im->data)
|
||||
return 0;
|
||||
|
||||
encoded_fd = open(im->real_file,
|
||||
O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
||||
|
||||
if (encoded_fd < 0)
|
||||
{
|
||||
perror(im->real_file);
|
||||
return 0;
|
||||
}
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
encoded_data = NULL;
|
||||
|
||||
quality = 75;
|
||||
quality_tag = __imlib_GetTag(im, "quality");
|
||||
|
@ -157,16 +154,16 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
im->w * 4, quality, &encoded_data);
|
||||
|
||||
if (write(encoded_fd, encoded_data, encoded_size) < encoded_size)
|
||||
{
|
||||
close(encoded_fd);
|
||||
WebPFree(encoded_data);
|
||||
perror(im->real_file);
|
||||
return 0;
|
||||
}
|
||||
goto quit;
|
||||
|
||||
close(encoded_fd);
|
||||
rc = LOAD_SUCCESS;
|
||||
|
||||
quit:
|
||||
if (encoded_data)
|
||||
WebPFree(encoded_data);
|
||||
return 1;
|
||||
close(encoded_fd);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in New Issue