shithub: riscv

Download patch

ref: a8d00e5d56b261376410c3c87c46327362763bd8
parent: 6d97f77c2d95abcdf13593e8530c1f9f7ae1cd87
author: cinap_lenrek <[email protected]>
date: Fri Oct 21 20:35:17 EDT 2016

gif: just read and decode the first image when -9 or -c flag is specified

--- a/sys/src/cmd/jpg/gif.c
+++ b/sys/src/cmd/jpg/gif.c
@@ -288,7 +288,7 @@
 	char buf[32];
 
 	err = nil;
-	images = readgif(fd, CRGB);
+	images = readgif(fd, CRGB, dflag);
 	if(images == nil){
 		fprint(2, "gif: decode %s failed: %r\n", name);
 		return "decode";
--- a/sys/src/cmd/jpg/imagefile.h
+++ b/sys/src/cmd/jpg/imagefile.h
@@ -55,7 +55,7 @@
 Rawimage**	Breadpng(Biobuf*, int);
 Rawimage**	readtif(int, int);
 Rawimage**	Breadtif(Biobuf*, int);
-Rawimage**	readgif(int, int);
+Rawimage**	readgif(int, int, int);
 Rawimage**	readpixmap(int, int);
 Rawimage*	torgbv(Rawimage*, int);
 Rawimage*	totruecolor(Rawimage*, int);
--- a/sys/src/cmd/jpg/readgif.c
+++ b/sys/src/cmd/jpg/readgif.c
@@ -39,7 +39,7 @@
 static char		extreaderr[] = "ReadGIF: can't read extension: %r";
 static char		memerr[] = "ReadGIF: malloc failed: %r";
 
-static Rawimage**	readarray(Header*);
+static Rawimage**	readarray(Header*, int);
 static Rawimage*	readone(Header*);
 static void			readheader(Header*);
 static void			skipextension(Header*);
@@ -100,7 +100,7 @@
 
 
 Rawimage**
-readgif(int fd, int colorspace)
+readgif(int fd, int colorspace, int justone)
 {
 	Rawimage **a;
 	Biobuf b;
@@ -122,7 +122,7 @@
 	if(setjmp(h->errlab))
 		a = nil;
 	else
-		a = readarray(h);
+		a = readarray(h, justone);
 	giffreeall(h, 0);
 	free(h);
 	return a;
@@ -144,7 +144,7 @@
 
 static
 Rawimage**
-readarray(Header *h)
+readarray(Header *h, int justone)
 {
 	Entry *tbl;
 	Rawimage *new, **array;
@@ -202,6 +202,8 @@
 			array[nimages] = nil;
 			h->array = array;
 			h->new = nil;
+			if(justone)
+				goto Return;
 			break;
 
 		case 0x3B:	/* Trailer */