Sigrid Solveig Haflínudóttircheck whether the file even existsd3149945 years agoHistory
95 lines · 1.7 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <bio.h>#include "common.h" enum{	Outbufsz = 256*1024,	Inbufsz = 256*1024,}; Biobuf stderr, out;int dflag, trackdump; static voidusage(void){	fprint(2, "usage: %s [-t INDEX|audio|video] [FILE]\n", argv0);	exits("usage");} voidmain(int argc, char **argv){	u8int d[4], *outbuf, *inbuf;	char *s, *status;	Biobuf f;	int fd; 	fmtinstall('H', encodefmt);	fmtinstall('T', isotypefmt);	fmtinstall('P', srttsfmt); 	dflag = 0;	trackdump = Nodump;	ARGBEGIN{	case 'd':		dflag++;		break;	case 't':		s = EARGF(usage());		if(strcmp(s, "audio") == 0)			trackdump = Dumpaudio;		else if(strcmp(s, "video") == 0)			trackdump = Dumpvideo;		else			trackdump = atoi(s);		break;	default:		usage();	}ARGEND 	if((outbuf = malloc(Outbufsz)) == nil)		sysfatal("memory");	if((inbuf = malloc(Inbufsz)) == nil)		sysfatal("memory"); 	fd = 0;	if(argc == 1)		fd = open(*argv, OREAD);	else if(argc != 0)		usage();	if(fd < 0)		sysfatal("%r"); 	if(Binits(&f, fd, OREAD, inbuf, Inbufsz) != 0)		sysfatal("%r");	if(Binits(&out, 1, OWRITE, outbuf, Outbufsz) != 0)		sysfatal("%r");	if(Binit(&stderr, 2, OWRITE) != 0)		sysfatal("%r"); 	status = nil;	if(Bread(&f, d, 4) != 4){		Bprint(&stderr, "unknown format\n");		status = "unknown format";	}else if(Bungetc(&f) < 0 || Bungetc(&f) < 0 || Bungetc(&f) < 0 || Bungetc(&f) < 0){		Bprint(&stderr, "seek back failed: %r\n");		status = "seek failed";	}else if(memcmp(d, "\x1a\x45\xdf\xa3", 4) == 0){		if(matroskarun(&f) != 0){			Bprint(&stderr, "matroska: %r\n");			status = "matroska failed";		}	}else if(isorun(&f) != 0){		Bprint(&stderr, "iso: %r\n");		status = "iso failed";	} 	Bterm(&f);	Bterm(&out);	Bterm(&stderr); 	exits(status);}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t