commit 4ddeb2209f63cf2dba12f73263f5de07822b3690
parent 1f39da499c98b30e8763d4a64215ac0863d16248
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Wed, 5 Aug 2015 23:27:38 +0200
sfeed: gettag: simplify
Diffstat:
M | sfeed.c | | | 36 | ++++++++++++++---------------------- |
1 file changed, 14 insertions(+), 22 deletions(-)
diff --git a/sfeed.c b/sfeed.c
@@ -105,7 +105,7 @@ static enum TagId
gettag(enum FeedType feedtype, const char *name, size_t namelen)
{
/* RSS, alphabetical order */
- static FeedTag rsstag[] = {
+ static FeedTag rsstags[] = {
{ STRP("author"), RSSTagAuthor },
{ STRP("content:encoded"), RSSTagContentencoded },
{ STRP("dc:creator"), RSSTagDccreator },
@@ -118,7 +118,7 @@ gettag(enum FeedType feedtype, const char *name, size_t namelen)
{ NULL, 0, -1 }
};
/* Atom, alphabetical order */
- static FeedTag atomtag[] = {
+ static FeedTag atomtags[] = {
{ STRP("author"), AtomTagAuthor },
{ STRP("content"), AtomTagContent },
{ STRP("id"), AtomTagId },
@@ -131,6 +131,7 @@ gettag(enum FeedType feedtype, const char *name, size_t namelen)
{ STRP("updated"), AtomTagUpdated },
{ NULL, 0, -1 }
};
+ const FeedTag *tags = NULL;
int i, n;
/* optimization: these are always non-matching */
@@ -138,26 +139,17 @@ gettag(enum FeedType feedtype, const char *name, size_t namelen)
return TagUnknown;
switch (feedtype) {
- case FeedTypeRSS:
- for (i = 0; rsstag[i].name; i++) {
- if (!(n = strncasecmp(rsstag[i].name, name, rsstag[i].len)))
- return rsstag[i].id; /* found */
- /* optimization: it's sorted so nothing after it matches. */
- if (n > 0)
- return TagUnknown;
- }
- break;
- case FeedTypeAtom:
- for (i = 0; atomtag[i].name; i++) {
- if (!(n = strncasecmp(atomtag[i].name, name, atomtag[i].len)))
- return atomtag[i].id; /* found */
- /* optimization: it's sorted so nothing after it matches. */
- if (n > 0)
- return TagUnknown;
- }
- break;
- default:
- return TagUnknown;
+ case FeedTypeRSS: tags = &rsstags[0]; break;
+ case FeedTypeAtom: tags = &atomtags[0]; break;
+ default: return TagUnknown;
+ }
+ /* search */
+ for (i = 0; tags[i].name; i++) {
+ if (!(n = strncasecmp(tags[i].name, name, tags[i].len)))
+ return tags[i].id; /* found */
+ /* optimization: it's sorted so nothing after it matches. */
+ if (n > 0)
+ return TagUnknown;
}
return TagUnknown; /* NOTREACHED */
}