summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'util.c')
-rw-r--r--util.c37
1 files changed, 32 insertions, 5 deletions
diff --git a/util.c b/util.c
index db43e0c..e5aec3b 100644
--- a/util.c
+++ b/util.c
@@ -1,4 +1,3 @@
-#include <ctype.h>
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
@@ -46,6 +45,16 @@ errx(int exitstatus, const char *fmt, ...)
exit(exitstatus);
}
+/* Handle read or write errors for a FILE * stream */
+void
+checkfileerror(FILE *fp, const char *name, int mode)
+{
+ if (mode == 'r' && ferror(fp))
+ errx(1, "read error: %s", name);
+ else if (mode == 'w' && (fflush(fp) || ferror(fp)))
+ errx(1, "write error: %s", name);
+}
+
/* strcasestr() included for portability */
char *
strcasestr(const char *h, const char *n)
@@ -56,8 +65,8 @@ strcasestr(const char *h, const char *n)
return (char *)h;
for (; *h; ++h) {
- for (i = 0; n[i] && tolower((unsigned char)n[i]) ==
- tolower((unsigned char)h[i]); ++i)
+ for (i = 0; n[i] && TOLOWER((unsigned char)n[i]) ==
+ TOLOWER((unsigned char)h[i]); ++i)
;
if (n[i] == '\0')
return (char *)h;
@@ -72,7 +81,7 @@ uri_hasscheme(const char *s)
{
const char *p = s;
- for (; isalpha((unsigned char)*p) || isdigit((unsigned char)*p) ||
+ for (; ISALPHA((unsigned char)*p) || ISDIGIT((unsigned char)*p) ||
*p == '+' || *p == '-' || *p == '.'; p++)
;
/* scheme, except if empty and starts with ":" then it is a path */
@@ -99,7 +108,7 @@ uri_parse(const char *s, struct uri *u)
}
/* scheme / protocol part */
- for (; isalpha((unsigned char)*p) || isdigit((unsigned char)*p) ||
+ for (; ISALPHA((unsigned char)*p) || ISDIGIT((unsigned char)*p) ||
*p == '+' || *p == '-' || *p == '.'; p++)
;
/* scheme, except if empty and starts with ":" then it is a path */
@@ -309,6 +318,24 @@ strtotime(const char *s, time_t *t)
return 0;
}
+time_t
+getcomparetime(void)
+{
+ time_t now, t;
+ char *p;
+
+ if ((now = time(NULL)) == (time_t)-1)
+ return (time_t)-1;
+
+ if ((p = getenv("SFEED_NEW_AGE"))) {
+ if (strtotime(p, &t) == -1)
+ return (time_t)-1;
+ return now - t;
+ }
+
+ return now - 86400; /* 1 day is old news */
+}
+
/* Escape characters below as HTML 2.0 / XML 1.0. */
void
xmlencode(const char *s, FILE *fp)