summaryrefslogtreecommitdiff
path: root/sfeed.c
AgeCommit message (Collapse)Author
2019-05-25gettzoffset: fix possible arithmetic overflow if int is 16-bitHiltjo Posthuma
also reduce size of return type (32-bit+ should be enough).
2019-05-10remove unused variablesHiltjo Posthuma
2019-05-10sfeed: remove support for military zones and simplifyHiltjo Posthuma
see RFC2822 4.3 page 32: " [...] However, because of the error in [RFC822], they SHOULD all be considered equivalent to "-0000" unless there is out-of-band information confirming their meaning. "
2019-05-02sfeed: improve content type (attribute) handlingHiltjo Posthuma
- handle type attribute for MRSS media:description, media:description type="plain" is now parsed properly. - handle default content-types per tag now. - when multiple content-like fields are specified use the proper content-type. - be flexible about type attribute handling. - minor code tweaks.
2019-04-14sfeed: add support for the first enclosure of an itemHiltjo Posthuma
This is useful for example for podcasts (audio attachment), newsposts (usually some image) or comic strips (link to page, image as enclosure). thanks leot for the feedback!
2019-04-06optimization: define GETNEXT as an inline macroHiltjo Posthuma
This reduces much function call overhead. getnext is defined in xml.h for inline optimization. sfeed only uses one XML parser context per program, this allows further optimizations of the compiler also. On OpenBSD it was noticable because of retpoline etc function call overhead. Using clang and a 500MB test XML file reduces processing time from +- 12s to 5s. Tested using some crazy optimization flags: SFEED_CFLAGS = -O3 -std=c99 -DGETNEXT=getchar_unlocked -fno-ret-protector \ -mno-retpoline -static A GETNEXT macro is also nice for programs which mmap(2) some big XML file. Then you can simply define: #define GETNEXT() (off >= len ? EOF : reg[off++])
2019-04-06sfeed: gettag: simplify and use ANSI bsearch()Hiltjo Posthuma
2019-03-03gettzoffset: bit more strict UTC offset parsingHiltjo Posthuma
2019-03-03skip spaces in parsetime() itselfHiltjo Posthuma
2019-03-03sfeed: style, break in switch instead of returnHiltjo Posthuma
this style change is useful for my local coverage profile.
2019-02-27atomlinktype make enum TagId instead of intHiltjo Posthuma
2019-02-27improve RSS2 permalink supportHiltjo Posthuma
In RSS2 (but not RSS0.9), a <link> is optional and it can also be specified by <guid isPermaLink="true"> (permalink is "true" by default). When a <link> is also present this will be used instead of the GUID permalink.
2019-02-27sfeed.c: improve commentHiltjo Posthuma
2019-02-24stricter Atom link parsingHiltjo Posthuma
the Atom link parsing is more strict now and checks the rel attribute. When the rel attribute is empty it is handled as a normal link ("alternate"). This makes sure when an link with an other type is specified (such as "enclosure", "related", "self" or "via") before a link it is not used. sfeed does not handle enclosures, but the code is reworked so it is very simple to add this. Enclosures are often used for example to attach some image to a newspost or an audio file to a podcast.
2019-02-24fix RFC822 ANSI and military zones parsingHiltjo Posthuma
2019-02-08don't read XML data inside tag for Atom <link href/>Hiltjo Posthuma
Noticed in the webcomic "amphibian": http://amphibian.com/feeds/atom
2019-02-08trim whitespace around uri field valueHiltjo Posthuma
... and abstract printing timetamp and uri to string_print_{timestamp,uri} similar to string_print_trimmed (normal string) and string_print_encoded (content). Noticed with whitespace around the field in the webcomic "amphibian": http://amphibian.com/feeds/atom
2019-02-08short some callback variable names, change "name" to "t" (tag)Hiltjo Posthuma
2019-01-29sfeed: use the same handler names as the XMLParserHiltjo Posthuma
2018-12-14sfeed: rename buffer to buf, change entitytostr check, it can never happenHiltjo Posthuma
2018-10-08improve code-style for parsing timeHiltjo Posthuma
- reorder and remove a goto. - no need for a separate variable "end". - don't use s[0] style because the pointer was changed.
2018-10-05sfeed: parsetime: weekday part in RFC822 time is optionalHiltjo Posthuma
noticed in "RMS notes" RSS.
2018-09-07fix many undefined behaviour in usage of ctype functionsHiltjo Posthuma
- cast all ctype(3) function argument to (unsigned char) to avoid UB POSIX says: "The c argument is an int, the value of which the application shall ensure is a character representable as an unsigned char or equal to the value of the macro EOF. If the argument has any other value, the behavior is undefined." Many libc cast implicitly the value, but NetBSD does not, which is probably the correct thing to interpret it. - no need to cast for putchar + rename some fputc(..., stdout) to putchar POSIX says: "The fputc() function shall write the byte specified by c (converted to an unsigned char) to the output stream pointed to by stream [...]" Major thanks to Leonardo Taccari <iamleot@gmail.com> for reporting and testing it on NetBSD!
2018-08-22remove stdint.h includeHiltjo Posthuma
the uint* types in XML are not exposed anymore.
2018-03-11include <sys/types.h> for types size_t, ssize_t etcHiltjo Posthuma
This makes sure xml.c in particular can be compiled without further feature macros.
2017-04-27improve gettag()Hiltjo Posthuma
2017-04-27simplify pledge stubHiltjo Posthuma
2016-08-06add USE_PLEDGE, remove pledge dummy functionHiltjo Posthuma
2016-08-06gettzoffset: simplify, default is 0 so remove UTC zones to checkHiltjo Posthuma
2016-04-18simplify sfeed(5) format, remove feedtype alsoHiltjo Posthuma
Remove type of feed per item, it is not that interesting. sfeed(1) can parse both RSS and Atom feeds.
2016-04-10absuri, encodeuri: make encodeuri static, change argument orderHiltjo Posthuma
2016-04-10strtotime: improveHiltjo Posthuma
use long long: atleast 32-bit, but now time_t (real) to 32-bit or 64-bit is supported. Long long is C99 though, but that is fine. check errno, it can have ERANGE.
2016-04-10small style fixHiltjo Posthuma
2016-04-03fix warning: return early, fixes bogus end NULL dereference warningHiltjo Posthuma
2016-04-03just initialize to zero, no need for memsetHiltjo Posthuma
2016-03-29add time parsing to sfeed itself, remove time fieldHiltjo Posthuma
- less overhead (we only need GMT time) so no setenv("TZ", ...) tzset() crap. - timezone format (for example %z in strptime) is non-standard, this will add some lines of code and some complexity to our code though, but the trade-off is worth it imho.
2016-03-27time experimentHiltjo Posthuma
2016-03-21check for tagid == TagUnknown, bit more clearHiltjo Posthuma
2016-03-20code cleanup: put table of parsed tagid at top (near reverse table)Hiltjo Posthuma
2016-03-20fix crash with repeated <link href=""> tags in Atom feedsHiltjo Posthuma
add some detail to the comments
2016-03-19don't use temporary pointer for realloc, it will exit on errorHiltjo Posthuma
2016-03-10remove cast of unused variablesHiltjo Posthuma
2016-03-04remove optimization with no effect, makes the code cleanerHiltjo Posthuma
2016-03-02sfeed: no need to call strlen, we know the length alreadyHiltjo Posthuma
2016-02-27various improvementsHiltjo Posthuma
- pledge tools and add define to enable it on platforms that support it, currently only OpenBSD 5.9+ - separate getline and parseline functionality. - use murmur3 hash instead of jenkins1: faster and less collisions. - make some error messages a bit more clear, for example with path truncation. - some small cleanups, move printutf8pad to util.
2016-02-27check <author><name> tag case-insensitively, just like the restHiltjo Posthuma
2016-02-27consistency: check snprintf result == -1Hiltjo Posthuma
2016-02-27remove some unneeded checksHiltjo Posthuma
2016-01-31Revert "sfeed: realloc, faster near pow 2 bufsiz"Hiltjo Posthuma
This reverts commit 5e43bd658e578ced54f6065e95f6efb4892e114c. It is a neat bit trick, but it doesn't matter much in thiscase and it's less readable and possibly less portable.
2016-01-31sfeed: realloc, faster near pow 2 bufsizHiltjo Posthuma