Introduce imlib_load_image_fde()

Same as imlib_load_image_fd() but with error return.
This commit is contained in:
Kim Woelders 2022-04-25 14:08:19 +02:00
parent 8dc921286c
commit cea1207efe
3 changed files with 34 additions and 3 deletions

View File

@ -816,6 +816,26 @@ EAPI Imlib_Image imlib_load_image_with_errno_return(const char *file,
*/ */
EAPI Imlib_Image imlib_load_image_fd(int fd, const char *file); EAPI Imlib_Image imlib_load_image_fd(int fd, const char *file);
/**
* Read an image from file descriptor with error return
*
* Same as imlib_load_image_fd() but with error return.
*
* On error @p error_return is set to the detail of the error.
* error values:
* 0: Success,
* positive: Regular errnos,
* negative: IMLIB_ERR_... values, see above
*
* @param file File name
* @param error_return The returned error
* @param fd Image file descriptor
*
* @return Image handle (NULL on failure)
*/
EAPI Imlib_Image imlib_load_image_fde(const char *file, int *error_return,
int fd);
/** /**
* Free the current image * Free the current image
*/ */

View File

@ -857,7 +857,7 @@ imlib_load_image_with_errno_return(const char *file, int *error_return)
} }
EAPI Imlib_Image EAPI Imlib_Image
imlib_load_image_fd(int fd, const char *file) imlib_load_image_fde(const char *file, int *err, int fd)
{ {
Imlib_Image im; Imlib_Image im;
ImlibLoadArgs ila = { ILA0(ctx, 1, 1) }; ImlibLoadArgs ila = { ILA0(ctx, 1, 1) };
@ -869,16 +869,26 @@ imlib_load_image_fd(int fd, const char *file)
{ {
im = __imlib_LoadImage(file, &ila); im = __imlib_LoadImage(file, &ila);
fclose(ila.fp); fclose(ila.fp);
if (err)
*err = ila.err;
} }
else else
{ {
im = NULL; im = NULL;
close(fd); close(fd);
if (err)
*err = errno;
} }
return im; return im;
} }
EAPI Imlib_Image
imlib_load_image_fd(int fd, const char *file)
{
return imlib_load_image_fde(file, NULL, fd);
}
EAPI Imlib_Image EAPI Imlib_Image
imlib_load_image_frame(const char *file, int frame) imlib_load_image_frame(const char *file, int frame)
{ {

View File

@ -178,12 +178,13 @@ test_load(void)
fd = open(fileo, O_RDONLY); fd = open(fileo, O_RDONLY);
D("Load fd %d '%s'\n", fd, fileo); D("Load fd %d '%s'\n", fd, fileo);
snprintf(fileo, sizeof(fileo), ".%s", pfxs[i]); snprintf(fileo, sizeof(fileo), ".%s", pfxs[i]);
im = imlib_load_image_fd(fd, pfxs[i]); im = imlib_load_image_fde(pfxs[i], &err, fd);
EXPECT_TRUE(im); EXPECT_TRUE(im);
if (im) if (im)
image_free(im); image_free(im);
EXPECT_EQ(err, 0);
err = close(fd); err = close(fd);
EXPECT_TRUE(err != 0); EXPECT_NE(err, 0);
} }
} }