[Extractor-gtk-cvslog] SF.net SVN: extractor-gtk: [49] trunk/extractor/generic.c
Extract files from unusual archive formats
Brought to you by:
someone-guy
From: <som...@us...> - 2008-02-19 20:08:43
|
Revision: 49 http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=49&view=rev Author: someone-guy Date: 2008-02-19 12:08:39 -0800 (Tue, 19 Feb 2008) Log Message: ----------- Support finding and extracting PNG files Modified Paths: -------------- trunk/extractor/generic.c Modified: trunk/extractor/generic.c =================================================================== --- trunk/extractor/generic.c 2008-02-19 20:08:31 UTC (rev 48) +++ trunk/extractor/generic.c 2008-02-19 20:08:39 UTC (rev 49) @@ -43,12 +43,29 @@ static file_t *get_list(FILE *in) { register buffer_t t = 0; int bz2idx = -1; + int pngidx = -1; int cnt = 0; file_t *list = calloc(1, sizeof(file_t)); rewind(in); while (!feof(in) && cnt + 3 < SIZE_MAX / sizeof(file_t)) { int i; t = t << 8 | fgetc(in); + switch (t) { + case HUGETAG(0x89, 'P', 'N', 'G', 0x0d, 0x0a, 0x1a, 0x0a): + if (pngidx >= 0 && list[pngidx].len == 0) { + list[pngidx].start = ftell(in) - 8; + break; + } + add_entry(&list, cnt, "png"); + list[cnt].start = ftell(in) - 8; + pngidx = cnt; + cnt++; + break; + case HUGETAG(0, 0, 0, 0, 'I', 'E', 'N', 'D'): + if (pngidx >= 0) + list[pngidx].len = ftell(in) - list[pngidx].start + 4; + break; + } switch (t & 0xffffffff) { case TAG('R', 'I', 'F', 'F'): { uint32_t len = read_le32(in); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |