sfeed

Simple RSS and Atom feed parser
git clone https://git.sinitax.com/codemadness/sfeed
Log | Files | Refs | README | LICENSE | Upstream | sfeed.txt

commit a2aa09baf8a1f4a98313f8691d999eaff8b4ceea
parent 63308527f5197ddbcad6b06c5c1bbaf12f997e57
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Fri, 15 Dec 2023 13:46:21 +0100

sfeed_update: add die() function for exit and cleanup, respect $TMPDIR

- Add a die() helper function to cleanup and exit.
  - NOTE that with an empty sfeedtmpdir the case rm -rf "" is fine.
- Respect $TMPDIR for creating temporary files like many UNIX tools do.
- Fix: when creating "${sfeedtmpdir}/ok" fails for some reason cleanup the
  whole temporary directory as well.
- Fix: when the feeds() function is not defined exit with status code 1 (this
  was incorrectly status code 0).
  Reproduce: sfeed_update /dev/null; echo $?

Diffstat:
Msfeed_update | 21++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/sfeed_update b/sfeed_update @@ -29,7 +29,7 @@ loadconfig() { else printf "Configuration file \"%s\" cannot be read.\n" "${config}" >&2 echo "See the sfeedrc.example file or the sfeedrc(5) man page for an example." >&2 - exit 1 + die fi } @@ -178,6 +178,14 @@ cleanup() { rm -rf "${sfeedtmpdir}" } +# die(statuscode) +die() { + statuscode="${1:-1}" # default: exit 1 + # cleanup temporary files etc. + cleanup + exit "${statuscode}" +} + sighandler() { signo="$1" # ignore TERM signal for myself. @@ -189,6 +197,7 @@ sighandler() { feeds() { printf "Configuration file \"%s\" is invalid or does not contain a \"feeds\" function.\n" "${config}" >&2 echo "See sfeedrc.example for an example." >&2 + die } main() { @@ -203,9 +212,9 @@ main() { # load config file. loadconfig "$1" # fetch feeds and store in temporary directory. - sfeedtmpdir="$(mktemp -d '/tmp/sfeed_XXXXXX')" || exit 1 + sfeedtmpdir="$(mktemp -p "${TMPDIR:-/tmp}" -d 'sfeed_XXXXXX')" || die mkdir -p "${sfeedtmpdir}/feeds" - touch "${sfeedtmpdir}/ok" || exit 1 + touch "${sfeedtmpdir}/ok" || die # make sure path exists. mkdir -p "${sfeedpath}" # fetch feeds specified in config file. @@ -215,11 +224,9 @@ main() { # check error exit status indicator for parallel jobs. [ -f "${sfeedtmpdir}/ok" ] statuscode=$? - # cleanup temporary files etc. - cleanup # on signal SIGINT and SIGTERM exit with signal number + 128. - [ ${signo} -ne 0 ] && exit $((signo+128)) - exit ${statuscode} + [ ${signo} -ne 0 ] && die $((signo+128)) + die ${statuscode} } [ "${SFEED_UPDATE_INCLUDE}" = "1" ] || main "$@"