Readded file-type check at startup

This commit is contained in:
Bert 2011-04-05 00:37:37 +02:00
parent 8d4e3a57ab
commit 426edfb349
3 changed files with 27 additions and 5 deletions

View file

@ -1,6 +1,6 @@
all: sxiv all: sxiv
VERSION=git-20110404 VERSION=git-20110405
CC?=gcc CC?=gcc
PREFIX?=/usr/local PREFIX?=/usr/local

19
image.c
View file

@ -56,6 +56,23 @@ void img_free(img_t* img) {
imlib_free_image(); 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) { int img_load(img_t *img, const char *filename) {
if (!img || !filename) if (!img || !filename)
return 0; return 0;
@ -66,7 +83,7 @@ int img_load(img_t *img, const char *filename) {
imlib_context_set_anti_alias(img->aa); imlib_context_set_anti_alias(img->aa);
img->scalemode = options->scalemode; img->scalemode = options->scalemode;
} else { } else {
warn("not an image: %s", filename); warn("invalid file: %s", filename);
imlib_context_set_image(im_invalid); imlib_context_set_image(im_invalid);
imlib_context_set_anti_alias(0); imlib_context_set_anti_alias(0);
} }

11
main.c
View file

@ -178,7 +178,7 @@ void update_title() {
fileidx + 1, filecnt, (int) (img.zoom * 100.0), size, unit, fileidx + 1, filecnt, (int) (img.zoom * 100.0), size, unit,
filenames[fileidx]); filenames[fileidx]);
} else { } 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]); fileidx + 1, filecnt, filenames[fileidx]);
} }
} }
@ -193,7 +193,13 @@ void update_title() {
} }
int check_append(const char *filename) { 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) { if (fileidx == filecnt) {
filecnt *= 2; filecnt *= 2;
filenames = (const char**) s_realloc(filenames, filenames = (const char**) s_realloc(filenames,
@ -202,7 +208,6 @@ int check_append(const char *filename) {
filenames[fileidx++] = filename; filenames[fileidx++] = filename;
return 1; return 1;
} else { } else {
warn("could not open file: %s", filename);
return 0; return 0;
} }
} }