-
Notifications
You must be signed in to change notification settings - Fork 39
/
Copy pathcat-escape.c
56 lines (48 loc) · 1.03 KB
/
cat-escape.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
cat-escape.c -- cat command which escapes \t and \n
Copyright (c) 2017 Minero Aoki
This program is free software.
Redistribution and use in source and binary forms,
with or without modification, are permitted.
*/
#include <stdio.h>
#include <stdlib.h>
static void do_cat(FILE *f);
int
main(int argc, char *argv[])
{
if (argc == 1) {
do_cat(stdin);
}
else {
int i;
for (i = 1; i < argc; i++) {
FILE *f = fopen(argv[i], "r");
if (!f) {
perror(argv[i]);
exit(1);
}
do_cat(f);
fclose(f);
}
}
exit(0);
}
static void
do_cat(FILE *f)
{
int c;
while ((c = fgetc(f)) != EOF) {
switch (c) {
case '\t':
if (fputs("\\t", stdout) == EOF) exit(1);
break;
case '\n':
if (fputs("$\n", stdout) == EOF) exit(1);
break;
default:
if (putchar(c) < 0) exit(1);
break;
}
}
}