diff --git a/Makefile b/Makefile index a20109e..4eee98c 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ all: sxiv -VERSION=git-20110404 +VERSION=git-20110405 CC?=gcc PREFIX?=/usr/local diff --git a/image.c b/image.c index 02df898..a7530a8 100644 --- a/image.c +++ b/image.c @@ -56,6 +56,23 @@ void img_free(img_t* img) { imlib_free_image(); } +int img_check(const char *filename) { + Imlib_Image *im; + + if (!filename) + return 0; + + if ((im = imlib_load_image(filename))) { + imlib_context_set_image(im); + imlib_image_set_changes_on_disk(); + imlib_free_image(); + return 1; + } else { + warn("invalid file: %s", filename); + return 0; + } +} + int img_load(img_t *img, const char *filename) { if (!img || !filename) return 0; @@ -66,7 +83,7 @@ int img_load(img_t *img, const char *filename) { imlib_context_set_anti_alias(img->aa); img->scalemode = options->scalemode; } else { - warn("not an image: %s", filename); + warn("invalid file: %s", filename); imlib_context_set_image(im_invalid); imlib_context_set_anti_alias(0); } diff --git a/main.c b/main.c index 2ab8410..a20e62c 100644 --- a/main.c +++ b/main.c @@ -178,7 +178,7 @@ void update_title() { fileidx + 1, filecnt, (int) (img.zoom * 100.0), size, unit, filenames[fileidx]); } else { - n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] not an image: %s", + n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] invalid: %s", fileidx + 1, filecnt, filenames[fileidx]); } } @@ -193,7 +193,13 @@ void update_title() { } int check_append(const char *filename) { - if (filename && !access(filename, R_OK)) { + if (!filename) + return 0; + + if (access(filename, R_OK)) { + warn("could not open file: %s", filename); + return 0; + } else if (img_check(filename)) { if (fileidx == filecnt) { filecnt *= 2; filenames = (const char**) s_realloc(filenames, @@ -202,7 +208,6 @@ int check_append(const char *filename) { filenames[fileidx++] = filename; return 1; } else { - warn("could not open file: %s", filename); return 0; } }