]> git.ipfire.org Git - thirdparty/systemd.git/commit
options: get rid of "on_error" parameter to FOREACH_OPTION
authorLennart Poettering <lennart@amutable.com>
Thu, 30 Apr 2026 06:52:35 +0000 (08:52 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Thu, 30 Apr 2026 10:12:33 +0000 (11:12 +0100)
commit99ce7a0770bd3eb53ebde3e93c35d8c684eb1abb
treeb0eebec3fadacabe4769a71f86df9534f450c872
parent7671b43cb88532cce2aa9ad12f777922206d6a42
options: get rid of "on_error" parameter to FOREACH_OPTION

I am really not a fan of full code lines passed to macros as parameters.
Let's get rid of the 3rd parameter of FOREACH_OPTION() hence:

1. Let's return errors just as a regular value (though a negative one),
   that can be handled via a OPTION_ERROR case statement for the switch.
   This normalizes handling of the error, just like any other event
   returned by the option parser.

2. In order to avoid exploding the amount of boilerplate in each use
   (that just propagates the error on OPTION_ERROR), let's then
   introduce an explicit FOREACH_OPTION_OR_RETURN(), that returns from
   the calling function on its own (and makes that clear in the name).

Together this cleans up, normalizes the logic and shortens the code.
111 files changed:
src/ac-power/ac-power.c
src/ask-password/ask-password.c
src/battery-check/battery-check.c
src/binfmt/binfmt.c
src/bless-boot/bless-boot.c
src/bless-boot/boot-check-no-failures.c
src/bootctl/bootctl.c
src/cgls/cgls.c
src/cgtop/cgtop.c
src/core/executor.c
src/creds/creds.c
src/cryptenroll/cryptenroll.c
src/cryptsetup/cryptsetup.c
src/delta/delta.c
src/detect-virt/detect-virt.c
src/dissect/dissect.c
src/escape/escape-tool.c
src/factory-reset/factory-reset-tool.c
src/firstboot/firstboot.c
src/growfs/growfs.c
src/hibernate-resume/hibernate-resume.c
src/hostname/hostnamectl.c
src/hwdb/hwdb.c
src/id128/id128.c
src/imds/imds-tool.c
src/imds/imdsd.c
src/import/export.c
src/import/import-fs.c
src/import/import.c
src/import/importctl.c
src/import/pull.c
src/journal-remote/journal-gatewayd.c
src/journal-remote/journal-remote-main.c
src/journal/bsod.c
src/journal/cat.c
src/keyutil/keyutil.c
src/libsystemd-network/test-ndisc-send.c
src/libsystemd/sd-journal/test-journal-append.c
src/libudev/test-libudev.c
src/login/inhibit.c
src/machine-id-setup/machine-id-setup-main.c
src/measure/measure-tool.c
src/modules-load/modules-load.c
src/mute-console/mute-console.c
src/network/generator/network-generator-main.c
src/notify/notify.c
src/nspawn/nspawn.c
src/oom/oomctl.c
src/oom/oomd.c
src/path/path-tool.c
src/pcrextend/pcrextend.c
src/pcrlock/pcrlock.c
src/ptyfwd/ptyfwd-tool.c
src/random-seed/random-seed-tool.c
src/repart/repart.c
src/report/report-basic-server.c
src/report/report.c
src/run/run.c
src/sbsign/sbsign.c
src/shared/options.h
src/shutdown/shutdown.c
src/sleep/sleep.c
src/socket-activate/socket-activate.c
src/socket-proxy/socket-proxyd.c
src/ssh-generator/ssh-issue.c
src/stdio-bridge/stdio-bridge.c
src/storage/storage-block.c
src/storage/storage-fs.c
src/storage/storagectl.c
src/storagetm/storagetm.c
src/sysctl/sysctl.c
src/sysupdate/sysupdate.c
src/sysupdate/updatectl.c
src/sysusers/sysusers.c
src/test/test-chase-manual.c
src/test/test-options.c
src/timedate/timedatectl.c
src/tmpfiles/test-offline-passwd.c
src/tmpfiles/tmpfiles.c
src/tpm2-setup/tpm2-clear.c
src/tpm2-setup/tpm2-setup.c
src/tty-ask-password-agent/tty-ask-password-agent.c
src/udev/ata_id/ata_id.c
src/udev/cdrom_id/cdrom_id.c
src/udev/dmi_memory_id/dmi_memory_id.c
src/udev/fido_id/fido_id.c
src/udev/iocost/iocost.c
src/udev/mtd_probe/mtd_probe.c
src/udev/scsi_id/scsi_id.c
src/udev/udev-builtin-blkid.c
src/udev/udev-builtin-hwdb.c
src/udev/udev-config.c
src/udev/udevadm-cat.c
src/udev/udevadm-control.c
src/udev/udevadm-hwdb.c
src/udev/udevadm-info.c
src/udev/udevadm-lock.c
src/udev/udevadm-monitor.c
src/udev/udevadm-settle.c
src/udev/udevadm-test-builtin.c
src/udev/udevadm-test.c
src/udev/udevadm-trigger.c
src/udev/udevadm-verify.c
src/udev/udevadm-wait.c
src/udev/udevadm.c
src/udev/v4l_id/v4l_id.c
src/update-done/update-done.c
src/validatefs/validatefs.c
src/varlinkctl/varlinkctl.c
src/vmspawn/vmspawn.c
src/vpick/vpick-tool.c