Age | Commit message (Collapse) | Author |
|
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.
|
|
This should not use the plain-text URL file ($SFEED_URL_FILE).
|
|
In the past there was an ioctl() call in setupterm(), so this include is not
needed anymore.
|
|
|
|
It would mess up the output since the progress bar writes to stderr aswell.
|
|
|
|
|
|
Do not restart the syscall waitpid, explicitly mention not setting SA_RESTART.
|
|
This now handles SIGTERM on sfeed_curses properly while an interactive child program is running.
Test-case program:
https://git.codemadness.org/sfeed_tests/commit/cd4268d4f71b5d7ab0df593d95e70188475d76bb.html
|
|
This is only for plumbing in non-interactive mode in forkexec(), but not piping
content.
Probably obvious what the descriptors are, but also add a few comments to dup2
of the file descriptors (stdin, stdout, stderr).
To reproduce a behaviour:
Plumb script:
#!/bin/sh
dmenu
Then launch it:
SFEED_PLUMB_INTERACTIVE=0 SFEED_PLUMB=thescript sfeed_curses ~/.sfeed/feeds/*
The program now waits on input while in non-interactive mode and only seems to
hang.
After:
The program starts but just has no input passed to it.
|
|
- SIGINT: reword, canceling the line editor is the exception.
- Document the order of signal handling.
- Document interactive and non-interactive behaviour in a separate section and
in more detail.
Remove repetition for each *_INTERACTIVE environment variable.
- Document SIGINT and SIGTERM exit status.
- Typo: "statusbar" -> "status bar".
- Reword a few sentences.
With additional changes and feedback from adc, thanks!
|
|
... and bump the date also.
|
|
From the mdoc(7) extended introduction[0]:
>To output a backslash, use the escape sequence ‘\e’. Never use the
>escape sequence ‘\\’ in any context.
0: https://mandoc.bsd.lv/mdoc/intro/escaping.html
|
|
Noticed by the Debian scanner for typos (typo-in-manual-page):
https://mentors.debian.net/package/sfeed/
|
|
|
|
No functional change intended. Just slightly more clear.
|
|
This makes sure when processes exit they are reaped immediately (instead of
after closing the line editor).
|
|
editor
This allows pasting in the terminal and also doesnt spam mouse events, which
are not useful here.
|
|
Reported by Leon Fisher, thanks!
"Each signal should have its own sig_atomic_t variable if you want to
keep state for all of them independently."
A similar issue was referenced in a OpenBSD tech mailinglist thread:
https://marc.info/?l=openbsd-tech&m=162940120614641&w=2
|
|
|
|
|
|
Keep a bitmask of the received signals and handle them all.
Also handle them in a particular order now.
|
|
- Wait on the exact process id and get its status.
- Handle SIGCHLD explicitly and reap zombie children: ignoring them by using
sigaction(SIGCHLD, &sa, NULL); would be racy in this case because sfeed_curses
has interactive and non-interactive programs.
Note while testing: if the markread program would be slow and in the meantime a
plumb process would exit. This signal is now pending and is a zombie process
until the SIGCHLD signal can be processed. This is fine.
This also fixes a regression from commit
30a70fa2dab1925b0eaea04f67e3f86b360386dd because SIGCHLD was ignored in the
parent for interactive processes aswell. This broke reading the exit status of
the markread program, reproducable by plumbing an item and then trying to mark
it as read (with SFEED_URL_FILE set).
|
|
|
|
|
|
This is not clearly defined by the C99 standard.
Define ctype-like macros to force it to be ASCII / UTF-8 (not extended ASCII or
something like noticed on OpenBSD 3.8).
(In practise modern libc libraries are all ASCII and UTF-8-compatible. Otherwise
this would break many programs)
|
|
It is unspecified if the C locale iscntrl is compatible with ASCII or not.
Noticed when testing on OpenBSD 3.8 which uses extended ASCII and also uses the
C1 range for control-characters. This breaks support with UTF-8.
Reference:
https://en.wikipedia.org/wiki/C0_and_C1_control_codes#C1_control_codes_for_general_use
C1 table.
Force an own definition of an ASCII-compatible control-character range since
sfeed expects input to be UTF-8 (or converted from iconv) and so output to be
UTF-8 aswell.
|
|
|
|
This is a regression from the introduced change.
Else wait(&status) returned -1 and status was uninitialized.
The status of the returned program in the markread() function is used to
visually show it as read/unread. If the program failed it is assumed the
program could not mark it and so it is visually unchanged.
Just to be sure also initialize status to -1 (which can never happen normally)
since the exitstatus range is 0-255.
https://man.openbsd.org/wait#ERRORS
[ECHILD]: "No status from the terminated child process is available because the calling
process has asked the system to discard such status by ignoring the signal
SIGCHLD or setting the flag SA_NOCLDWAIT for that signal."
|
|
Pedantic change:
Make main more consistent since other functions in it exit too and main is not
supposed to return or used like that.
|
|
Change the example to reload the feeds anyway, even if one of the feeds
(temporarily) failed to update.
|
|
|
|
This reverts commit db1dcafd03997127f2cbc82376e2cc8df9b77356.
This is needed. Tested on an (old) Slackware 11 install.
|
|
|
|
plumbing
Only set/override it in the interactive case.
Also add some comments.
No functional change intended.
|
|
From POSIX:
Consequences of Process Termination:
https://pubs.opengroup.org/onlinepubs/9699919799/functions/_Exit.html#tag_16_01_03_01
"
[XSI] [Option Start] If the parent process of the calling process has set its
SA_NOCLDWAIT flag or has set the action for the SIGCHLD signal to SIG_IGN:
The process' status information (see Status Information), if any, shall be
discarded.
The lifetime of the calling process shall end immediately. If SA_NOCLDWAIT is
set, it is implementation-defined whether a SIGCHLD signal is sent to the
parent process.
If a thread in the parent process of the calling process is blocked in wait(),
waitpid(), or waitid(), and the parent process has no remaining child processes
in the set of waited-for children, the wait(), waitid(), or waitpid() function
shall fail and set errno to [ECHILD].
"
Noticed on Linux (but not on OpenBSD).
To reproduce:
- SFEED_PLUMBER_INTERACTIVE=0 SFEED_PLUMBER="less" sfeed_curses ~/.sfeed/feeds/*
- Then open and close the child program.
- Notice it becoming a zombie or "<defunct>" in the process table.
|
|
This include is not needed. It was intended for ssize_t but this is already
defined by stdio.h for getline().
|
|
separator
echo is unportable in this way and names containing characters like an option
(-n) or backslash or escape codes (\e, \n, etc) could be messy.
For awk set LC_ALL=C for simple collation.
This makes sfeed_opml_export slower in some shells that don't have printf
builtin though. For example with about 150 feeds in a config file it is a bit
slower on OpenBSD ksh.
time ./sfeed_opml_export | wc -l
152
0m00.29s real 0m00.05s user 0m00.20s system
time sfeed_opml_export | wc -l
152
0m00.02s real 0m00.00s user 0m00.03s system
|
|
|
|
|
|
- Return exit code, which makes xargs return 123 when any of the downloads
failed.
- Write errors to stderr.
- Write non-errors to stdout.
|
|
This can be useful for scripts, for example the sfeed_update_xargs example
script in the README. This way the process can signal an error and xargs will
exit with the code 123:
"One or more invocations of utility returned a nonzero exit status."
|
|
Set exit status non-zero if any of the feeds failed similar to what
sfeed_update also does now.
|
|
|