xref: /plan9-contrib/sys/src/cmd/aux/htmlsanitize.c (revision 6a2cc21f07c6a2c082bb5178d720bb1892afa621)
1*6a2cc21fSDavid du Colombier /*
2*6a2cc21fSDavid du Colombier  * Because sed can't handle really long lines.
3*6a2cc21fSDavid du Colombier  */
4*6a2cc21fSDavid du Colombier #include <u.h>
5*6a2cc21fSDavid du Colombier #include <libc.h>
6*6a2cc21fSDavid du Colombier #include <bio.h>
7*6a2cc21fSDavid du Colombier 
8*6a2cc21fSDavid du Colombier Biobuf bout;
9*6a2cc21fSDavid du Colombier 
10*6a2cc21fSDavid du Colombier void
cat(Biobuf * b)11*6a2cc21fSDavid du Colombier cat(Biobuf *b)
12*6a2cc21fSDavid du Colombier {
13*6a2cc21fSDavid du Colombier 	int c;
14*6a2cc21fSDavid du Colombier 
15*6a2cc21fSDavid du Colombier 	while((c = Bgetrune(b)) >= 0){
16*6a2cc21fSDavid du Colombier 		switch(c){
17*6a2cc21fSDavid du Colombier 		case '<':
18*6a2cc21fSDavid du Colombier 			Bprint(&bout, "&lt;");
19*6a2cc21fSDavid du Colombier 			break;
20*6a2cc21fSDavid du Colombier 		case '>':
21*6a2cc21fSDavid du Colombier 			Bprint(&bout, "&gt;");
22*6a2cc21fSDavid du Colombier 			break;
23*6a2cc21fSDavid du Colombier 		case '&':
24*6a2cc21fSDavid du Colombier 			Bprint(&bout, "&amp;");
25*6a2cc21fSDavid du Colombier 			break;
26*6a2cc21fSDavid du Colombier 		default:
27*6a2cc21fSDavid du Colombier 			Bputrune(&bout, c);
28*6a2cc21fSDavid du Colombier 			break;
29*6a2cc21fSDavid du Colombier 		}
30*6a2cc21fSDavid du Colombier 	}
31*6a2cc21fSDavid du Colombier }
32*6a2cc21fSDavid du Colombier 
33*6a2cc21fSDavid du Colombier void
main(int argc,char * argv[])34*6a2cc21fSDavid du Colombier main(int argc, char *argv[])
35*6a2cc21fSDavid du Colombier {
36*6a2cc21fSDavid du Colombier 	int i;
37*6a2cc21fSDavid du Colombier 	Biobuf *b, bin;
38*6a2cc21fSDavid du Colombier 
39*6a2cc21fSDavid du Colombier 	argv0 = "htmlsanitize";
40*6a2cc21fSDavid du Colombier 	Binit(&bout, 1, OWRITE);
41*6a2cc21fSDavid du Colombier 	if(argc == 1){
42*6a2cc21fSDavid du Colombier 		Binit(&bin, 0, OREAD);
43*6a2cc21fSDavid du Colombier 		cat(&bin);
44*6a2cc21fSDavid du Colombier 	}
45*6a2cc21fSDavid du Colombier 	else for(i=1; i<argc; i++){
46*6a2cc21fSDavid du Colombier 		b = Bopen(argv[i], OREAD);
47*6a2cc21fSDavid du Colombier 		if(b == nil)
48*6a2cc21fSDavid du Colombier 			sysfatal("can't open %s: %r", argv[i]);
49*6a2cc21fSDavid du Colombier 		else{
50*6a2cc21fSDavid du Colombier 			cat(b);
51*6a2cc21fSDavid du Colombier 			Bterm(b);
52*6a2cc21fSDavid du Colombier 		}
53*6a2cc21fSDavid du Colombier 	}
54*6a2cc21fSDavid du Colombier 	Bflush(&bout);
55*6a2cc21fSDavid du Colombier 	exits(0);
56*6a2cc21fSDavid du Colombier }
57