Skip to content

Commit 923145f

Browse files
committed
add file features
1 parent bcb64da commit 923145f

File tree

3 files changed

+129
-30
lines changed

3 files changed

+129
-30
lines changed

ff_file_formats.c

Lines changed: 106 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -199,29 +199,47 @@ const FFFeature g_ff_pdf[] = {
199199
{3, FF_NEED, 0x46},
200200
};
201201

202-
const FFFeature g_ff_doc[] = {
203-
{0, FF_NEED, 0xD0},
204-
{1, FF_NEED, 0xCF},
205-
{2, FF_NEED, 0x11},
206-
{3, FF_NEED, 0xE0},
202+
const FFFeature g_ff_zip[] = {
203+
{0, 0, 0x50},
204+
{1, 0, 0x4B},
205+
{2, 0, 0x03},
206+
{3, 0, 0x04},
207+
208+
{0, 1, 0x50},
209+
{1, 1, 0x4B},
210+
{2, 1, 0x05},
211+
{3, 1, 0x06},
212+
213+
{0, 2, 0x50},
214+
{1, 2, 0x4B},
215+
{2, 2, 0x07},
216+
{3, 2, 0x08},
217+
218+
{30, 3, 0x50},
219+
{31, 3, 0x4B},
220+
{32, 3, 0x4C},
221+
{33, 3, 0x49},
222+
{34, 3, 0x54},
223+
{35, 3, 0x45},
224+
};
225+
226+
const FFFeature g_ff_rar[] = {
227+
{0, FF_NEED, 0x52},
228+
{1, FF_NEED, 0x61},
229+
{2, FF_NEED, 0x72},
230+
{3, FF_NEED, 0x21},
207231

208-
{4, FF_NEED, 0xA1},
209-
{5, FF_NEED, 0xB1},
210-
{6, FF_NEED, 0x1A},
211-
{7, FF_NEED, 0xE1},
232+
{4, FF_NEED, 0x1A},
233+
{5, FF_NEED, 0x07},
234+
{6, FF_NEED, 0x00},
212235
};
213236

214-
const FFFeature g_ff_docx[] = {
215-
{4, FF_NEED, 0x14},
216-
{5, FF_NEED, 0x00},
217-
{6, 0, 0x06},
218-
{6, 1, 0x00},
219-
{7, FF_NEED, 0x00},
220-
221-
{0, FF_NEED, 0x50},
222-
{1, FF_NEED, 0x4B},
223-
{2, FF_NEED, 0x03},
224-
{3, FF_NEED, 0x04},
237+
const FFFeature g_ff_iso[] = {
238+
{0, FF_NEED, 0x43},
239+
{1, FF_NEED, 0x44},
240+
{2, FF_NEED, 0x30},
241+
{3, FF_NEED, 0x30},
242+
{4, FF_NEED, 0x31},
225243
};
226244

227245
//------------------------------------------------------------------------------------------------------
@@ -348,7 +366,7 @@ const FFFeature g_ff_psb[] = {
348366
};
349367

350368
//------------------------------------------------------------------------------------------------------
351-
// AUDIO & VIDEO
369+
// AUDIO & VIDEO 1
352370
const FFFeature g_ff_m4a[] = {
353371
{10, FF_NEED, 0x41},
354372

@@ -583,6 +601,47 @@ const FFFeature g_ff_ape[] = {
583601
{3, FF_NEED, 0x20},
584602
};
585603

604+
const FFFeature g_ff_rm[] = {
605+
{0, FF_NEED, 0x2E},
606+
{1, FF_NEED, 0x52},
607+
{2, FF_NEED, 0x4D},
608+
{3, FF_NEED, 0x46},
609+
};
610+
611+
//------------------------------------------------------------------------------------------------------
612+
// APPLICATION
613+
const FFFeature g_ff_exe[] = {
614+
{0, FF_NEED, 0x4D},
615+
{1, FF_NEED, 0x5A},
616+
};
617+
618+
//------------------------------------------------------------------------------------------------------
619+
// DOCUMENT 2
620+
const FFFeature g_ff_ms_doc[] = {
621+
{0, FF_NEED, 0xD0},
622+
{1, FF_NEED, 0xCF},
623+
{2, FF_NEED, 0x11},
624+
{3, FF_NEED, 0xE0},
625+
626+
{4, FF_NEED, 0xA1},
627+
{5, FF_NEED, 0xB1},
628+
{6, FF_NEED, 0x1A},
629+
{7, FF_NEED, 0xE1},
630+
};
631+
632+
const FFFeature g_ff_ms_docx[] = {
633+
{4, FF_NEED, 0x14},
634+
{5, FF_NEED, 0x00},
635+
{6, 0, 0x06},
636+
{6, 1, 0x00},
637+
{7, FF_NEED, 0x00},
638+
639+
{0, FF_NEED, 0x50},
640+
{1, FF_NEED, 0x4B},
641+
{2, FF_NEED, 0x03},
642+
{3, FF_NEED, 0x04},
643+
};
644+
586645
//------------------------------------------------------------------------------------------------------
587646
// IMAGE 2
588647
const FFFeature g_ff_svg[] = {
@@ -599,13 +658,17 @@ const FFFeature g_ff_svg[] = {
599658
const FFFormat g_ff_formats[FFTypeXCount] = {
600659
{"", 0, NULL}, // Unknown
601660

602-
// DOCUMENT
661+
// BY FILE SIGNATURE
662+
663+
// DOCUMENT 1
603664
{"PDF", sizeof(g_ff_pdf)/sizeof(FFFeature), g_ff_pdf},
604-
{"DOC", sizeof(g_ff_doc)/sizeof(FFFeature), g_ff_doc},
605-
{"DOCX", sizeof(g_ff_docx)/sizeof(FFFeature), g_ff_docx},
665+
{"ZIP", sizeof(g_ff_zip)/sizeof(FFFeature), g_ff_zip},
666+
{"RAR", sizeof(g_ff_rar)/sizeof(FFFeature), g_ff_rar},
667+
{"ISO", sizeof(g_ff_iso)/sizeof(FFFeature), g_ff_iso},
606668

607669
// IMAGE 1
608670
{"JPEG", sizeof(g_ff_jpeg)/sizeof(FFFeature), g_ff_jpeg},
671+
{"JPG", sizeof(g_ff_jpeg)/sizeof(FFFeature), g_ff_jpeg},
609672
{"PNG", sizeof(g_ff_png)/sizeof(FFFeature), g_ff_png},
610673
{"WEBP", sizeof(g_ff_webp)/sizeof(FFFeature), g_ff_webp},
611674
{"GIF", sizeof(g_ff_gif)/sizeof(FFFeature), g_ff_gif},
@@ -618,7 +681,7 @@ const FFFormat g_ff_formats[FFTypeXCount] = {
618681
{"PSD", sizeof(g_ff_psd)/sizeof(FFFeature), g_ff_psd},
619682
{"PSB", sizeof(g_ff_psb)/sizeof(FFFeature), g_ff_psb},
620683

621-
// AUDIO
684+
// AUDIO & VIDEO 1
622685
{"M4A", sizeof(g_ff_m4a)/sizeof(FFFeature), g_ff_m4a},
623686
{"M4B", sizeof(g_ff_m4b)/sizeof(FFFeature), g_ff_m4b},
624687
{"M4P", sizeof(g_ff_m4p)/sizeof(FFFeature), g_ff_m4p},
@@ -635,16 +698,33 @@ const FFFormat g_ff_formats[FFTypeXCount] = {
635698
{"MID", sizeof(g_ff_mid)/sizeof(FFFeature), g_ff_mid},
636699
{"FLAC", sizeof(g_ff_flac)/sizeof(FFFeature), g_ff_flac},
637700
{"APE", sizeof(g_ff_ape)/sizeof(FFFeature), g_ff_ape},
701+
{"RM", sizeof(g_ff_rm)/sizeof(FFFeature), g_ff_rm},
702+
{"RMVB", sizeof(g_ff_rm)/sizeof(FFFeature), g_ff_rm},
703+
704+
// APPLICATION
705+
{"EXE", sizeof(g_ff_exe)/sizeof(FFFeature), g_ff_exe},
638706

639707
{"", 0, NULL}, // padding
640708

709+
// BY EXT NAME
710+
711+
// DOCUMENT 2
712+
{"TXT", 0, NULL},
713+
{"HTML", 0, NULL},
714+
715+
{"DOC", sizeof(g_ff_ms_doc)/sizeof(FFFeature), g_ff_ms_doc},
716+
{"DOCX", sizeof(g_ff_ms_docx)/sizeof(FFFeature), g_ff_ms_docx},
717+
{"PPT", sizeof(g_ff_ms_doc)/sizeof(FFFeature), g_ff_ms_doc},
718+
{"PPTX", sizeof(g_ff_ms_docx)/sizeof(FFFeature), g_ff_ms_docx},
719+
{"XML", sizeof(g_ff_ms_doc)/sizeof(FFFeature), g_ff_ms_doc},
720+
{"XMLX", sizeof(g_ff_ms_docx)/sizeof(FFFeature), g_ff_ms_docx},
721+
641722
// IMAGE 2
642723
{"SVG", sizeof(g_ff_svg)/sizeof(FFFeature), g_ff_svg},
643724
{"DIB", 0, NULL},
644725
{"TGA", 0, NULL},
645726

646727
// AUDIO & VIDEO 2
647-
648728
{"WMA", sizeof(g_ff_asf)/sizeof(FFFeature), g_ff_asf},
649729
{"WMV", sizeof(g_ff_asf)/sizeof(FFFeature), g_ff_asf},
650730
{"ASF", sizeof(g_ff_asf)/sizeof(FFFeature), g_ff_asf},

ff_file_formats.h

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ SOFTWARE.
3232
typedef enum _FFType {
3333
FFTypeUnknown = 0,
3434

35-
// DOCUMENT
35+
// DOCUMENT 1
3636
FFTypePDF,
37-
FFTypeDOC, // Microsoft Office document [before 2007]
38-
FFTypeDOCX, // Microsoft Office document [after 2007]
37+
FFTypeZIP,
38+
FFTypeRAR,
39+
FFTypeISO,
3940

4041
// IMAGE 1
4142
FFTypeJPEG,
43+
FFTypeJPG,
4244
FFTypePNG,
4345
FFTypeWEBP,
4446
FFTypeGIF,
@@ -70,8 +72,25 @@ typedef enum _FFType {
7072
FFTypeFLAC,
7173
FFTypeAPE,
7274

75+
FFTypeRM,
76+
FFTypeRMVB,
77+
78+
// APPLICATION
79+
FFTypeEXE,
80+
7381
FFTypeCount,
7482

83+
// DOCUMENT 2
84+
FFTypeTXT,
85+
FFTypeHTML,
86+
87+
FFTypeDOC, // Microsoft Office document [before 2007]
88+
FFTypeDOCX, // Microsoft Office document [after 2007]
89+
FFTypePPT,
90+
FFTypePPTX,
91+
FFTypeXML,
92+
FFTypeXMLX,
93+
7594
// IMAGE 2
7695
FFTypeSVG,
7796
FFTypeDIB,

main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
int main(int argc, const char* argv[]) {
66
if (argc < 2 ) {
77
#ifdef DEBUG
8-
const char file_name[] = "/Users/henry/Downloads/1.docx";
8+
const char file_name[] = "/Users/henry/Downloads/1.rm";
99

1010
FFType type = ff_get_type_from_file(file_name);
1111
if (type == FFTypeUnknown) {

0 commit comments

Comments
 (0)