This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository legacy-imlib2.
View the commit online.
commit 43c54e1345ac58a214725c997d0167127b2ca99b
Author: Kim Woelders <[email protected]>
AuthorDate: Sun Sep 25 19:12:46 2022 +0200
Introduce imlib_get_error()
Some of the image loading functions have a version with an error_return,
and some not.
With imlib_get_error() it is now possible to fetch the load error for
any image loading function call.
---
src/lib/Imlib2.h.in | 13 +++++++++++++
src/lib/api.c | 29 +++++++++++++++++++++++------
src/lib/api.h | 1 +
test/test_load.cpp | 16 ++++++++++++++++
4 files changed, 53 insertions(+), 6 deletions(-)
diff --git a/src/lib/Imlib2.h.in b/src/lib/Imlib2.h.in
index 5d04db7..5445c0e 100644
--- a/src/lib/Imlib2.h.in
+++ b/src/lib/Imlib2.h.in
@@ -738,6 +738,19 @@ EAPI Visual *imlib_get_best_visual(Display * display, int screen,
*/
EAPI void imlib_flush_loaders(void);
+/**
+ * Get error code from previous imlib function call
+ *
+ * For now an error code is only meaningful when an image loading
+ * function (imlib_load_image...()) has failed (returned NULL).
+ *
+ * @return error code
+ * 0: Success,
+ * positive: Regular errnos,
+ * negative: IMLIB_ERR_... values, see above
+ */
+EAPI int imlib_get_error(void);
+
/**
* Load an image from file (header only)
*
diff --git a/src/lib/api.c b/src/lib/api.c
index cd46895..4607b5e 100644
--- a/src/lib/api.c
+++ b/src/lib/api.c
@@ -499,6 +499,12 @@ imlib_flush_loaders(void)
__imlib_RemoveAllLoaders();
}
+EAPI int
+imlib_get_error(void)
+{
+ return ctx->error;
+}
+
EAPI Imlib_Image
imlib_load_image(const char *file)
{
@@ -508,6 +514,7 @@ imlib_load_image(const char *file)
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
im = __imlib_LoadImage(file, &ila);
+ ctx->error = ila.err;
return im;
}
@@ -521,7 +528,8 @@ _imlib_load_image_immediately(const char *file, int *err)
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
im = __imlib_LoadImage(file, &ila);
- *err = ila.err;
+ ctx->error = ila.err;
+ *err = ctx->error;
return im;
}
@@ -543,6 +551,7 @@ imlib_load_image_without_cache(const char *file)
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
im = __imlib_LoadImage(file, &ila);
+ ctx->error = ila.err;
return im;
}
@@ -556,6 +565,7 @@ imlib_load_image_immediately_without_cache(const char *file)
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
im = __imlib_LoadImage(file, &ila);
+ ctx->error = ila.err;
return im;
}
@@ -599,18 +609,19 @@ imlib_load_image_fde(const char *file, int *err, int fd)
if (ila.fp)
{
im = __imlib_LoadImage(file, &ila);
+ ctx->error = ila.err;
fclose(ila.fp);
- if (err)
- *err = ila.err;
}
else
{
im = NULL;
+ ctx->error = errno;
close(fd);
- if (err)
- *err = errno;
}
+ if (err)
+ *err = ctx->error;
+
return im;
}
@@ -633,6 +644,7 @@ imlib_load_image_mem(const char *file, int *err, const void *data, size_t size)
ila.fsize = size;
im = __imlib_LoadImage(file, &ila);
+ ctx->error = ila.err;
return im;
}
@@ -646,6 +658,7 @@ imlib_load_image_frame(const char *file, int frame)
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
im = __imlib_LoadImage(file, &ila);
+ ctx->error = ila.err;
return im;
}
@@ -664,6 +677,7 @@ imlib_load_image_frame_mem(const char *file, int frame, const void *data,
ila.fsize = size;
im = __imlib_LoadImage(file, &ila);
+ ctx->error = ila.err;
return im;
}
@@ -1879,11 +1893,14 @@ _imlib_save_image(const char *file, int *err)
CHECK_PARAM_POINTER("file", file);
CAST_IMAGE(im, ctx->image);
+ ctx->error = 0;
+
if (__imlib_LoadImageData(im))
return;
__imlib_SaveImage(im, file, &ila);
- *err = ila.err;
+ ctx->error = ila.err;
+ *err = ctx->error;
}
EAPI void
diff --git a/src/lib/api.h b/src/lib/api.h
index 4f6c132..12f4459 100644
--- a/src/lib/api.h
+++ b/src/lib/api.h
@@ -41,6 +41,7 @@ typedef struct {
Drawable drawable;
Pixmap mask;
#endif
+ int error;
char anti_alias;
char dither;
char blend;
diff --git a/test/test_load.cpp b/test/test_load.cpp
index 7e0740b..8f7b6c0 100644
--- a/test/test_load.cpp
+++ b/test/test_load.cpp
@@ -150,10 +150,18 @@ test_load(void)
fp = fopen(fileo, "wb");
fclose(fp);
D("Load empty '%s'\n", fileo);
+
+ im = imlib_load_image(fileo);
+ err = imlib_get_error();
+ EXPECT_FALSE(im);
+ D(" err = %d\n", err);
+ EXPECT_EQ(err, IMLIB_ERR_BAD_IMAGE);
+
im = imlib_load_image_with_errno_return(fileo, &err);
D(" err = %d\n", err);
EXPECT_FALSE(im);
EXPECT_EQ(err, IMLIB_ERR_BAD_IMAGE);
+
im = imlib_load_image_with_error_return(fileo, &lerr);
D(" err = %d\n", lerr);
EXPECT_FALSE(im);
@@ -164,10 +172,18 @@ test_load(void)
unlink(fileo);
symlink("non-existing", fileo);
D("Load non-existing '%s'\n", fileo);
+
+ im = imlib_load_image(fileo);
+ EXPECT_FALSE(im);
+ err = imlib_get_error();
+ D(" err = %d\n", err);
+ EXPECT_EQ(err, ENOENT);
+
im = imlib_load_image_with_errno_return(fileo, &err);
D(" err = %d\n", err);
EXPECT_FALSE(im);
EXPECT_EQ(err, ENOENT);
+
im = imlib_load_image_with_error_return(fileo, &lerr);
D(" err = %d\n", lerr);
EXPECT_FALSE(im);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.