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