Load as much of a corrupted gif file as possible
This commit is contained in:
		
							parent
							
								
									14d1daf280
								
							
						
					
					
						commit
						8f34b7e95c
					
				
							
								
								
									
										16
									
								
								image.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								image.c
									
									
									
									
									
								
							| @ -60,7 +60,7 @@ void img_init(img_t *img, win_t *win) { | ||||
| } | ||||
| 
 | ||||
| #ifdef HAVE_GIFLIB | ||||
| /* originally based on, but in it's current form merely inspired by Imlib2's
 | ||||
| /* Originally based on, but in its current form merely inspired by Imlib2's
 | ||||
|  * src/modules/loaders/loader_gif.c:load(), written by Carsten Haitzler. | ||||
|  */ | ||||
| int img_load_gif(img_t *img, const fileinfo_t *file) { | ||||
| @ -97,7 +97,6 @@ int img_load_gif(img_t *img, const fileinfo_t *file) { | ||||
| 
 | ||||
| 	do { | ||||
| 		if (DGifGetRecordType(gif, &rec) == GIF_ERROR) { | ||||
| 			warn("could not open gif file: %s", file->name); | ||||
| 			err = 1; | ||||
| 			break; | ||||
| 		} | ||||
| @ -122,7 +121,6 @@ int img_load_gif(img_t *img, const fileinfo_t *file) { | ||||
| 			} | ||||
| 		} else if (rec == IMAGE_DESC_RECORD_TYPE) { | ||||
| 			if (DGifGetImageDesc(gif) == GIF_ERROR) { | ||||
| 				warn("could not open gif frame # %d: %s", img->multi.cnt, file->name); | ||||
| 				err = 1; | ||||
| 				break; | ||||
| 			} | ||||
| @ -181,7 +179,6 @@ int img_load_gif(img_t *img, const fileinfo_t *file) { | ||||
| 			free(data); | ||||
| 
 | ||||
| 			if (!im) { | ||||
| 				warn("could not open gif frame # %d: %s", img->multi.cnt, file->name); | ||||
| 				err = 1; | ||||
| 				break; | ||||
| 			} | ||||
| @ -207,16 +204,17 @@ int img_load_gif(img_t *img, const fileinfo_t *file) { | ||||
| 
 | ||||
| 	DGifCloseFile(gif); | ||||
| 
 | ||||
| 	if (!err && img->multi.cnt > 1) { | ||||
| 	if (err && !file->loaded) | ||||
| 		warn("corrupted gif file: %s", file->name); | ||||
| 
 | ||||
| 	if (img->multi.cnt > 1) { | ||||
| 		imlib_context_set_image(img->im); | ||||
| 		imlib_free_image(); | ||||
| 		img->im = img->multi.frames[0].im; | ||||
| 		img->multi.animate = GIF_AUTOPLAY; | ||||
| 	} else { | ||||
| 		for (i = 0; i < img->multi.cnt; i++) { | ||||
| 			imlib_context_set_image(img->multi.frames[i].im); | ||||
| 	} else if (img->multi.cnt == 1) { | ||||
| 		imlib_context_set_image(img->multi.frames[0].im); | ||||
| 		imlib_free_image(); | ||||
| 		} | ||||
| 		img->multi.cnt = 0; | ||||
| 		img->multi.animate = 0; | ||||
| 	} | ||||
|  | ||||
							
								
								
									
										6
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								main.c
									
									
									
									
									
								
							| @ -99,6 +99,7 @@ void check_add_file(char *filename) { | ||||
| 			return; | ||||
| 		} | ||||
| 	} | ||||
| 	files[fileidx].loaded = 0; | ||||
| 	files[fileidx].name = s_strdup(filename); | ||||
| 	if (*filename == '/') | ||||
| 		files[fileidx].path = files[fileidx].name; | ||||
| @ -198,18 +199,17 @@ void load_image(int new) { | ||||
| 			new = filecnt - 1; | ||||
| 	} | ||||
| 
 | ||||
| 	files[new].loaded = 1; | ||||
| 	fileidx = new; | ||||
| 	if (!stat(files[new].path, &fstats)) | ||||
| 		filesize = fstats.st_size; | ||||
| 	else | ||||
| 		filesize = 0; | ||||
| 
 | ||||
| 	if (img.multi.cnt) { | ||||
| 		if (img.multi.animate) | ||||
| 	if (img.multi.cnt && img.multi.animate) | ||||
| 		set_timeout(animate, img.multi.frames[img.multi.sel].delay, 1); | ||||
| 	else | ||||
| 		reset_timeout(animate); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void update_title() { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Bert
						Bert