[Extractor-gtk-cvslog] SF.net SVN: extractor-gtk:[114] trunk/extractor/generic.c
Extract files from unusual archive formats
Brought to you by:
someone-guy
|
From: <som...@us...> - 2009-02-08 12:42:11
|
Revision: 114
http://extractor-gtk.svn.sourceforge.net/extractor-gtk/?rev=114&view=rev
Author: someone-guy
Date: 2009-02-08 12:42:05 +0000 (Sun, 08 Feb 2009)
Log Message:
-----------
Add detection for DV headers.
Modified Paths:
--------------
trunk/extractor/generic.c
Modified: trunk/extractor/generic.c
===================================================================
--- trunk/extractor/generic.c 2008-09-17 19:00:18 UTC (rev 113)
+++ trunk/extractor/generic.c 2009-02-08 12:42:05 UTC (rev 114)
@@ -57,6 +57,18 @@
return res;
}
+static inline uint64_t get_le64(uint8_t **p) {
+ uint64_t res = get_le32(p);
+ res += (uint64_t)get_le32(p) << 32;
+ return res;
+}
+
+static inline uint64_t get_be64(uint8_t **p) {
+ uint64_t res = (uint64_t)get_be32(p) << 32;
+ res += get_be32(p);
+ return res;
+}
+
static file_t *get_list(FILE *in) {
register buffer_t t = 0;
uint8_t *rambuf = malloc(2 * RAMBUF_SZ);
@@ -85,6 +97,7 @@
t = t << 8 | rambuf[rambuf_pos++];
p = rambuf + rambuf_pos;
fpos++;
+ // NOTE: at least RAMBUF_SZ bytes after p are valid (unless EOF was reached)
switch (t) {
case HUGETAG(0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1):
add_entry(&list, cnt, "msi");
@@ -105,6 +118,18 @@
break;
}
switch ((uint32_t)t) {
+ case 0x1f07003f:
+ case 0x1f0700bf: {
+ uint32_t dvhdr = get_be32(&p);
+ uint64_t padding = get_be64(&p);
+ p -= 12;
+ if (padding != 0xffffffffffffffff) break;
+ add_entry(&list, cnt, "dv");
+ list[cnt].start = fpos - 4;
+ list[cnt].len = 0;
+ cnt++;
+ break;
+ }
case TAG('M', 'S', 'C', 'F'): {
uint32_t unk = get_le32(&p);
uint32_t size = get_le32(&p);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|