X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=sys%2Fsrc%2Fcmd%2Ffile.c;h=bd9d1afb5b492146277b6c53411a34177dbc2026;hb=ac88ce4f7f19be1aae1fdf390fa870b4be8dc3f5;hp=b64bb13a486933a53e6cfeea1d5093f58bc2ed3c;hpb=3edac8032702e5fb30dd78591ec0d104f83cfa33;p=plan9front.git diff --git a/sys/src/cmd/file.c b/sys/src/cmd/file.c index b64bb13a4..bd9d1afb5 100644 --- a/sys/src/cmd/file.c +++ b/sys/src/cmd/file.c @@ -152,6 +152,7 @@ int ismbox(void); int islimbo(void); int istga(void); int ismp3(void); +int ismp4(void); int ismung(void); int isp9bit(void); int isp9font(void); @@ -167,6 +168,7 @@ int longoff(void); int istar(void); int isface(void); int isexec(void); +int isudiff(void); int p9bitnum(char*, int*); int p9subfont(uchar*); void print_utf(void); @@ -183,6 +185,7 @@ int (*call[])(void) = iff, /* interchange file format (strings) */ longoff, /* recognizable by 4 bytes at some offset */ isoffstr, /* recognizable by string at some offset */ + isudiff, /* unified diff output */ isrfc822, /* email file */ ismbox, /* mail box */ istar, /* recognizable by tar checksum */ @@ -198,6 +201,7 @@ int (*call[])(void) = isicocur, /* windows icon or cursor file */ isface, /* ascii face file */ istga, + ismp4, ismp3, /* last resorts */ @@ -982,6 +986,25 @@ char* html_string[] = { 0, }; +int +isudiff(void) +{ + char *p; + + p = (char*)buf; + if((p = strstr(p, "diff")) != nil) + if((p = strchr(p, '\n')) != nil) + if(strncmp(++p, "--- ", 4) == 0) + if((p = strchr(p, '\n')) != nil) + if(strncmp(++p, "+++ ", 4) == 0) + if((p = strchr(p, '\n')) != nil) + if(strncmp(++p, "@@ ", 3) == 0){ + print("%s\n", mime ? "text/plain" : "unified diff output"); + return 1; + } + return 0; +} + int ishtml(void) { @@ -1221,6 +1244,24 @@ ismp3(void) return 0; } +int +ismp4(void) +{ + if(nbuf <= 12) + return 0; + if(memcmp(&buf[4], "ftyp", 4) != 0) + return 0; + if(memcmp(&buf[8], "isom", 4) == 0){ + print("%s\n", mime ? "video/mp4" : "mp4 video"); + return 1; + } + if(memcmp(&buf[8], "M4A ", 4) == 0){ + print("%s\n", mime ? "audio/m4a" : "m4a audio"); + return 1; + } + return 0; +} + /* * low entropy means encrypted */