util.h - sfeed - RSS and Atom parser | |
git clone git://git.codemadness.org/sfeed | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
util.h (2334B) | |
--- | |
1 #include <stdio.h> | |
2 #include <time.h> | |
3 | |
4 #ifdef __OpenBSD__ | |
5 #include <unistd.h> | |
6 #else | |
7 #define pledge(p1,p2) 0 | |
8 #define unveil(p1,p2) 0 | |
9 #endif | |
10 | |
11 /* ctype-like macros, but always compatible with ASCII / UTF-8 */ | |
12 #define ISALPHA(c) ((((unsigned)c) | 32) - 'a' < 26) | |
13 #define ISCNTRL(c) ((c) < ' ' || (c) == 0x7f) | |
14 #define ISDIGIT(c) (((unsigned)c) - '0' < 10) | |
15 #define ISSPACE(c) ((c) == ' ' || ((((unsigned)c) - '\t') < 5)) | |
16 #define TOLOWER(c) ((((unsigned)c) - 'A' < 26) ? ((c) | 32) : (c)) | |
17 | |
18 #undef strcasestr | |
19 char *strcasestr(const char *, const char *); | |
20 #undef strlcat | |
21 size_t strlcat(char *, const char *, size_t); | |
22 #undef strlcpy | |
23 size_t strlcpy(char *, const char *, size_t); | |
24 | |
25 #ifndef SFEED_DUMBTERM | |
26 #define PAD_TRUNCATE_SYMBOL "\xe2\x80\xa6" /* symbol: "ellipsis" */ | |
27 #define UTF_INVALID_SYMBOL "\xef\xbf\xbd" /* symbol: "replacement" */ | |
28 #else | |
29 #define PAD_TRUNCATE_SYMBOL "." | |
30 #define UTF_INVALID_SYMBOL "?" | |
31 #endif | |
32 | |
33 /* feed info */ | |
34 struct feed { | |
35 char *name; /* feed name */ | |
36 unsigned long totalnew; /* amount of new items per feed */ | |
37 unsigned long total; /* total items */ | |
38 /* sfeed_curses */ | |
39 char *path; /* path to feed or NULL for stdin */ | |
40 FILE *fp; /* file pointer */ | |
41 }; | |
42 | |
43 /* URI */ | |
44 struct uri { | |
45 char proto[48]; /* scheme including ":" or "://" */ | |
46 char userinfo[256]; /* username [:password] */ | |
47 char host[256]; | |
48 char port[6]; /* numeric port */ | |
49 char path[1024]; | |
50 char query[1024]; | |
51 char fragment[1024]; | |
52 }; | |
53 | |
54 enum { | |
55 FieldUnixTimestamp = 0, FieldTitle, FieldLink, FieldContent, | |
56 FieldContentType, FieldId, FieldAuthor, FieldEnclosure, FieldCat… | |
57 FieldLast | |
58 }; | |
59 | |
60 /* hint for compilers and static analyzers that a function does not retu… | |
61 * some compilers use: __attribute__((noreturn)), _Noreturn, noreturn */ | |
62 #ifndef __dead | |
63 #define __dead | |
64 #endif | |
65 | |
66 __dead void err(int, const char *, ...); | |
67 __dead void errx(int, const char *, ...); | |
68 | |
69 int uri_format(char *, size_t, struct uri *); | |
70 int uri_hasscheme(const char *); | |
71 int uri_makeabs(struct uri *, struct uri *, struct uri *); | |
72 int uri_parse(const char *, struct uri *); | |
73 | |
74 void checkfileerror(FILE *, const char *, int); | |
75 time_t getcomparetime(void); | |
76 void parseline(char *, char *[FieldLast]); | |
77 void printutf8pad(FILE *, const char *, size_t, int); | |
78 int strtotime(const char *, time_t *); | |
79 void xmlencode(const char *, FILE *); |