diff options
Diffstat (limited to 'image.c')
-rw-r--r-- | image.c | 32 |
1 files changed, 23 insertions, 9 deletions
@@ -293,21 +293,35 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) } #endif /* HAVE_GIFLIB */ -bool img_load(img_t *img, const fileinfo_t *file) +Imlib_Image img_open(const fileinfo_t *file) { - const char *fmt; struct stat st; + Imlib_Image im = NULL; - if (access(file->path, R_OK) == -1 || - stat(file->path, &st) == -1 || !S_ISREG(st.st_mode) || - (img->im = imlib_load_image(file->path)) == NULL) + if (access(file->path, R_OK) == 0 && + stat(file->path, &st) == 0 && S_ISREG(st.st_mode)) { - if (file->flags & FF_WARN) - error(0, 0, "%s: Error opening image", file->name); - return false; + im = imlib_load_image(file->path); + if (im != NULL) { + imlib_context_set_image(im); + if (imlib_image_get_data_for_reading_only() == NULL) { + imlib_free_image(); + im = NULL; + } + } } + if (im == NULL && (file->flags & FF_WARN)) + error(0, 0, "%s: Error opening image", file->name); + return im; +} + +bool img_load(img_t *img, const fileinfo_t *file) +{ + const char *fmt; + + if ((img->im = img_open(file)) == NULL) + return false; - imlib_context_set_image(img->im); imlib_image_set_changes_on_disk(); #if HAVE_LIBEXIF |