Age | Commit message (Collapse) | Author |
|
|
|
By introducing the new environment variable $SFEED_NEW_MAX_SECS in all
sfeed_* utilities marking feeds as new based on comparing their age, it
is now possible to override this age limit.
This allows, for example, to be notified about new feeds within the last
hour with
SFEED_NEW_MAX_SECS=3600 sfeed_plain ~/.sfeed/feeds/*
while creating a beautiful web report for last week's news by
SFEED_NEW_MAX_SECS=604800 sfeed_html ~/.sfeed/feeds/*
|
|
|
|
This matches the behaviour of setting errno for malloc/calloc on the following
systems too:
glibc, musl libc, OpenBSD libc.
It is also more portable for (older) systems.
|
|
A numeric entity could be 5 bytes, so use a round number of 8 bytes.
|
|
This would skip checking the end of the string of checking a NUL byte, because
the iteration was done before checking it.
It would proceed into the data that comes after. Note that sfeed itself can't
generate such malformed data itself.
Example input:
0 title link content\ html
Would incorrect print "contenthtml" as the content.
|
|
|
|
This outputs the TSV data to JSON.
It uses a subset of JSON Feed 1.1:
https://www.jsonfeed.org/version/1.1/
|
|
A numeric entity could be 5 bytes, so use a round number of 8 bytes.
No other change intended and no performance difference noticed.
|
|
Technically for sfeed_atom this violates the RFC standard. There must be an
author in the feed or for an item. However sfeed is not the author, it is a
generator. All readers will read these feeds anyway.
https://www.rfc-editor.org/rfc/rfc4287#section-4.1.1
"atom:feed elements MUST contain one or more atom:author elements, unless all of
the atom:feed element's child atom:entry elements contain at least one
atom:author element." *shrug*
|
|
Save a few bytes in the output by removing it.
https://www.rfc-editor.org/rfc/rfc4287
3.1.1. The "type" Attribute
The title is an atomTextConstruct.
|
|
|
|
This is an active maintained fork.
|
|
Similar to the recent fix for sfeed_update in commit
5a27c58675ddf4113d64a84f715cb3fecb681a6d
|
|
https://www.jsonfeed.org/version/1.1/
|
|
If creating a temporary directory for the feed files failed then $sfeedtmpdir
would be empty and it would try to:
mkdir -p "/feed"
touch "/feed/ok"
After failing it would also still try to process all the feeds.
Now just fail early.
mktemp or touch themselve will print the actual error to stderr.
|
|
https://datatracker.ietf.org/doc/html/rfc2822#section-4.3
"Where a two or three digit year occurs in a date, the year is to be
interpreted as follows: If a two digit year is encountered whose
value is between 00 and 49, the year is interpreted by adding 2000,
ending up with a value between 2000 and 2049. If a two digit year is
encountered with a value between 50 and 99, or any three digit year
is encountered, the year is interpreted by adding 1900."
Improvement on commit 7086670e4335714e1df982bf1058082b7400b653
For example (output from TZ=UTC sfeed_plain):
input: Sun, 26 Jul 049 19:26:34
was: 2049-07-26 19:26
now: 1949-07-26 19:26 (because this is a 3-digit year)
input: Sun, 26 Jul 1 19:26:34
was: 2001-07-26 19:26
now: 0001-07-26 19:26 (because this is a 1-digit year and doesn't match the short year rule)
input: Sun, 26 Jul 001 19:26:34
was: 2001-07-26 19:26
now: 1901-07-26 19:26 (because this is a 3 digit year)
These cases are all added to the tests in the sfeed_tests repo (times.xml file).
|
|
This also fixes a calculation (possibly a compiler bug) with Open Watcom 1.9.
|
|
Tested sfeed, sfeed_plain and sfeed_html for now.
There are minor changes required for sfeed and some additional compatibility
function changes required to make the format tools compile.
Rough list of changes required:
- xml.c: rename getchar_unlocked -> getchar
- sfeed.c: EOVERFLOW -> ENOMEM
- wcwidth: just filter ASCII range < 32 = -1 and > 127 = 0, rest = 1.
- getline
- localtime_r -> just do a localtime + memcpy.
Make sure to increase stack size when compiling:
owcc -k32768 -Os -s -o sfeed.exe sfeed.c util.c xml.c
Resulting .exe binary is 27KB, 17KB compressed with UPX.
The HTML output looks fine in Netscape Navigator and Internet Explorer 3 :)
|
|
Found while testing sfeed on MS-DOS with Open Watcom (for fun :)).
There an int is 16-bit and sfeed incorrectly wrapped the value, which produced
incorrect parsed UNIX timestamps as output.
|
|
|
|
for lazyloaded items
Fix the code pattern of freeing the line when getline returns -1 but no error
flag is set on the stream (such as EOF).
Note that on errors (even ENOMEM: out-of-memory) an error flag is set on the
stream and the process would exit and clean up all it's resources.
This would be very hard to trigger. The following conditions would have to be
true:
* Lazyloading of items is enabled: SFEED_LAZYLOAD=1 is set.
* Items of the feed are read and their offsets stored.
* The line is read/lazy-loaded again by it's offset but returns EOF (not a read
error) this time.
This could maybe happen if the feed file was changed and made smaller while
sfeed_curses is running and the remembered offset is now beyond the file.
Note that the sfeed_curses(1) man page describes a workaround for a similar
condition by sending SIGHUP if the sfeed(5) data was changed to reload the feed
file.
References:
* https://man.openbsd.org/getline
"It is the responsibility of the caller to free(3) *lineptr when it is no
longer needed. Even when it fails, getdelim() may update *lineptr."
* https://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html
|
|
|
|
... and some small rewording.
|
|
This fixes the keys on the sun-color console on OpenIndiana/Illumos/OpenSolaris
(and other systems using these keys).
See also the table:
https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
Section "Non-Function Keys".
|
|
This fixes the page up and page down keys in the cons25 console on
DragonFlyBSD.
See also the table:
https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
Section "Non-Function Keys".
|
|
|
|
|
|
This was a copy-pasta.
|
|
This make it also cleanly compile without any other changes on GNU/Hurd.
Reference: https://www.gnu.org/software/hurd/hurd/porting/guidelines.html
Section: "PATH_MAX, MAX_PATH, MAXPATHLEN, _POSIX_PATH_MAX"
The fopen() functions will return NULL when the path is too long and set
errno = ENAMETOOLONG.
"The length of a pathname exceeds {PATH_MAX}, or pathname resolution of a
symbolic link produced an intermediate result with a length that exceeds
{PATH_MAX}."
Reference: https://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html
|
|
- Fix a typo "Url" -> "URL".
- Be a bit more clear some overridable functions read from stdin.
- Some small rewording.
|
|
It is used in the examples.
(Do not directly reference iconv to keep some kind of clear reference list)
|
|
It is a caveat while parsing the data in the sfeed(1) program.
Keep it described in the sfeed(1) man page.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Introduced by a code cleanup/refactor in commit
59ba2ed29bcbe67de6e9ee1e7fb18744f7490c22
|
|
|
|
This makes it easier to reuse the code from reading plain-text list of items
from a file and uses a struct urls to keep its state in a cleaner way.
+ some small code-style improvements and reshuffling.
Inspired by a question from NRK by mail about implementing a "read later"
feature.
(A quick local experiment shows it can be done in ~70 lines of added code).
|
|
this check is already done in util.h and is no longer needed after the
`sfeed_curses -> sfeed` merge.
|
|
Write it in a more verbose, clear and C90-style manner.
This workarounds a bug in scc too (reported upstream and will be fixed of
course). All tools in sfeed can now be compiled with minicurses-mode with the
scc compiler and musl libc without any modifications needed.
scc: http://www.simple-cc.org/
|
|
found via codespell
$ codespell --ignore-regex Nd
|
|
|
|
|
|
|
|
Multiple function calls should still be nested in a do { } while(0), but this
is hopefully obvious looking at the other lines.
While testing, gcc with -O0 created the same binary.
clang added a single jmp instruction.
|
|
This was used in commit a58fa45f25da4f18d7b8c1a815884f67b965406f and previous,
but the code for non-interactive process cleanup was later removed, so clearing
the struct is not not needed anymore, because it is unused.
|