sfeed_twtxt.c - sfeed - RSS and Atom parser | |
git clone git://git.codemadness.org/sfeed | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
sfeed_twtxt.c (1569B) | |
--- | |
1 #include <stdio.h> | |
2 #include <string.h> | |
3 #include <time.h> | |
4 | |
5 #include "util.h" | |
6 | |
7 static char *line; | |
8 static size_t linesize; | |
9 | |
10 static void | |
11 printfeed(FILE *fp, const char *feedname) | |
12 { | |
13 char *fields[FieldLast]; | |
14 struct tm parsedtm, *tm; | |
15 time_t parsedtime; | |
16 ssize_t linelen; | |
17 | |
18 while ((linelen = getline(&line, &linesize, fp)) > 0 && | |
19 !ferror(stdout)) { | |
20 if (line[linelen - 1] == '\n') | |
21 line[--linelen] = '\0'; | |
22 parseline(line, fields); | |
23 | |
24 parsedtime = 0; | |
25 if (!strtotime(fields[FieldUnixTimestamp], &parsedtime) … | |
26 (tm = gmtime_r(&parsedtime, &parsedtm))) { | |
27 fprintf(stdout, "%04d-%02d-%02dT%02d:%02d:%02dZ\… | |
28 tm->tm_year + 1900, tm->tm_mon + 1, tm->… | |
29 tm->tm_hour, tm->tm_min, tm->tm_sec); | |
30 } else { | |
31 fputs("\t", stdout); | |
32 } | |
33 if (feedname[0]) | |
34 printf("[%s] ", feedname); | |
35 fputs(fields[FieldTitle], stdout); | |
36 if (fields[FieldLink][0]) { | |
37 fputs(": ", stdout); | |
38 fputs(fields[FieldLink], stdout); | |
39 } | |
40 putchar('\n'); | |
41 } | |
42 } | |
43 | |
44 int | |
45 main(int argc, char *argv[]) | |
46 { | |
47 FILE *fp; | |
48 char *name; | |
49 int i; | |
50 | |
51 if (pledge(argc == 1 ? "stdio" : "stdio rpath", NULL) == -1) | |
52 err(1, "pledge"); | |
53 | |
54 if (argc == 1) { | |
55 printfeed(stdin, ""); | |
56 checkfileerror(stdin, "<stdin>", 'r'); | |
57 } else { | |
58 for (i = 1; i < argc; i++) { | |
59 if (!(fp = fopen(argv[i], "r"))) | |
60 err(1, "fopen: %s", argv[i]); | |
61 name = ((name = strrchr(argv[i], '/'))) ? name +… | |
62 printfeed(fp, name); | |
63 checkfileerror(fp, argv[i], 'r'); | |
64 checkfileerror(stdout, "<stdout>", 'w'); | |
65 fclose(fp); | |
66 } | |
67 } | |
68 | |
69 checkfileerror(stdout, "<stdout>", 'w'); | |
70 | |
71 return 0; | |
72 } |