Blob Blame History Raw
From 86eae9a1dade5ba15990196b1459e1394bf0a632 Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Wed, 16 Mar 2022 22:32:23 +0900
Subject: [PATCH] strv: make iterator in STRV_FOREACH() declaread in the loop

This also avoids multiple evaluations in STRV_FOREACH_BACKWARDS()

(cherry picked from commit de010b0b2e50cf0b3837ce350b116bc92605f67a)

Related: #2082131
---
 src/activate/activate.c                       |  3 --
 src/analyze/analyze-condition.c               |  2 --
 src/analyze/analyze-elf.c                     |  1 -
 src/analyze/analyze-security.c                |  7 +---
 src/analyze/analyze-verify.c                  |  3 --
 src/analyze/analyze.c                         | 27 ++------------
 src/ask-password/ask-password.c               |  1 -
 src/basic/conf-files.c                        |  9 ++---
 src/basic/env-file.c                          |  1 -
 src/basic/env-util.c                          | 19 +++-------
 src/basic/escape.c                            |  1 -
 src/basic/fileio.c                            |  2 --
 src/basic/hashmap.c                           |  1 -
 src/basic/ordered-set.c                       |  1 -
 src/basic/os-util.c                           |  1 -
 src/basic/path-lookup.c                       |  1 -
 src/basic/path-util.c                         | 20 ++++-------
 src/basic/process-util.c                      |  1 -
 src/basic/strv.c                              | 28 ++-------------
 src/basic/strv.h                              | 35 ++++++++++++-------
 src/basic/unit-file.c                         |  8 ++---
 src/binfmt/binfmt.c                           |  1 -
 src/boot/bless-boot.c                         |  2 --
 src/boot/bootctl.c                            |  2 --
 src/busctl/busctl.c                           |  5 +--
 src/cgls/cgls.c                               |  1 -
 src/core/bpf-firewall.c                       |  2 --
 src/core/cgroup.c                             |  1 -
 src/core/dbus-cgroup.c                        |  2 --
 src/core/dbus-execute.c                       | 26 +++-----------
 src/core/dbus-manager.c                       |  1 -
 src/core/dbus-socket.c                        |  4 +--
 src/core/dbus-unit.c                          |  5 +--
 src/core/device.c                             | 16 +++------
 src/core/execute.c                            | 16 +++------
 src/core/load-dropin.c                        |  2 --
 src/core/load-fragment.c                      |  1 -
 src/core/main.c                               |  1 -
 src/core/manager.c                            |  1 -
 src/core/namespace.c                          |  6 ----
 src/core/service.c                            |  2 --
 src/core/socket.c                             |  4 ---
 src/core/transaction.c                        |  3 +-
 src/core/unit-serialize.c                     |  2 +-
 src/core/unit.c                               |  6 ----
 src/coredump/coredumpctl.c                    |  1 -
 src/creds/creds.c                             |  1 -
 src/cryptenroll/cryptenroll.c                 |  1 -
 src/cryptsetup/cryptsetup-keyfile.c           |  1 -
 src/cryptsetup/cryptsetup.c                   |  4 +--
 src/debug-generator/debug-generator.c         |  2 --
 src/delta/delta.c                             |  2 --
 src/dissect/dissect.c                         |  3 --
 .../environment-d-generator.c                 |  1 -
 src/escape/escape.c                           |  1 -
 src/fstab-generator/fstab-generator.c         |  3 --
 src/home/homectl.c                            | 11 ++----
 src/home/homed-manager-bus.c                  |  1 -
 src/home/homed-manager.c                      |  1 -
 src/home/homed-varlink.c                      |  6 +---
 src/home/homework-cifs.c                      |  1 -
 src/home/homework-fscrypt.c                   |  3 --
 src/home/homework-luks.c                      |  3 --
 src/home/homework-pkcs11.c                    |  1 -
 src/home/homework.c                           | 13 ++-----
 src/home/user-record-pwquality.c              |  3 +-
 src/home/user-record-util.c                   |  3 --
 src/id128/id128.c                             |  1 -
 src/journal-remote/journal-remote-main.c      |  1 -
 src/journal-remote/microhttpd-util.c          |  5 ++-
 src/journal/journalctl.c                      |  5 +--
 src/libsystemd-network/dhcp-option.c          |  1 -
 src/libsystemd-network/dhcp6-option.c         |  2 --
 src/libsystemd-network/sd-dhcp-client.c       |  1 -
 src/libsystemd-network/sd-dhcp6-client.c      |  2 --
 src/libsystemd-network/sd-radv.c              |  1 -
 src/libsystemd/sd-bus/bus-dump.c              |  4 ---
 src/libsystemd/sd-bus/bus-match.c             |  6 ----
 src/libsystemd/sd-bus/bus-message.c           |  1 -
 src/libsystemd/sd-bus/bus-objects.c           |  4 +--
 src/libsystemd/sd-bus/test-bus-address.c      |  1 -
 src/libsystemd/sd-device/device-private.c     |  1 -
 src/libsystemd/sd-journal/catalog.c           |  2 --
 src/libsystemd/sd-journal/sd-journal.c        |  1 -
 src/libsystemd/sd-netlink/netlink-message.c   |  1 -
 src/libsystemd/sd-path/sd-path.c              |  2 +-
 src/locale/localectl.c                        |  2 --
 src/locale/localed.c                          |  1 -
 src/login/loginctl.c                          |  2 --
 src/login/logind-dbus.c                       |  1 -
 src/login/pam_systemd.c                       |  1 -
 src/modules-load/modules-load.c               |  1 -
 src/network/generator/network-generator.c     |  1 -
 src/network/netdev/netdev.c                   |  1 -
 src/network/networkctl.c                      |  1 -
 src/network/networkd-dhcp-server.c            |  2 --
 src/network/networkd-json.c                   |  3 +-
 src/network/networkd-link-bus.c               |  2 --
 src/network/networkd-link.c                   |  3 --
 src/network/networkd-ndisc.c                  |  1 -
 src/network/networkd-network.c                |  1 -
 src/nspawn/nspawn-bind-user.c                 |  1 -
 src/nspawn/nspawn-mount.c                     |  4 ---
 src/nspawn/nspawn-network.c                   |  5 ---
 src/nspawn/nspawn-oci.c                       |  1 -
 src/nspawn/nspawn-seccomp.c                   |  1 -
 src/nspawn/nspawn.c                           |  1 -
 src/nss-systemd/userdb-glue.c                 |  2 +-
 src/partition/repart.c                        |  3 --
 src/portable/portable.c                       |  7 ----
 src/portable/portablectl.c                    |  2 --
 src/resolve/resolvectl.c                      |  9 +----
 src/resolve/resolved-dns-trust-anchor.c       |  1 -
 src/resolve/resolved-dnssd.c                  |  1 -
 src/resolve/resolved-etc-hosts.c              |  3 --
 src/resolve/resolved-link-bus.c               |  1 -
 src/resolve/resolved-link.c                   |  2 --
 src/run-generator/run-generator.c             |  1 -
 src/shared/acl-util.c                         |  1 -
 src/shared/bootspec.c                         |  4 ---
 src/shared/bus-polkit.c                       |  1 -
 src/shared/bus-unit-util.c                    |  3 --
 src/shared/bus-util.c                         |  2 --
 src/shared/cgroup-setup.c                     |  1 -
 src/shared/condition.c                        |  1 -
 src/shared/conf-parser.c                      |  1 -
 src/shared/discover-image.c                   |  6 +---
 src/shared/dissect-image.c                    |  1 -
 src/shared/dropin.c                           |  1 -
 src/shared/exec-util.c                        |  4 +--
 src/shared/format-table.c                     |  1 -
 src/shared/hwdb-util.c                        |  3 +-
 src/shared/install.c                          | 28 +++------------
 src/shared/libcrypt-util.c                    |  1 -
 src/shared/libfido2-util.c                    |  3 --
 src/shared/mount-setup.c                      |  3 --
 src/shared/mount-util.c                       |  1 -
 src/shared/net-condition.c                    |  4 ---
 src/shared/nscd-flush.c                       |  1 -
 src/shared/pkcs11-util.c                      |  2 +-
 src/shared/pretty-print.c                     |  4 +--
 src/shared/seccomp-util.c                     |  1 -
 src/shared/serialize.c                        |  1 -
 src/shared/tests.c                            |  1 -
 src/shared/user-record-show.c                 | 13 ++-----
 src/sleep/sleep.c                             |  2 --
 src/sysctl/sysctl.c                           |  4 ---
 src/sysext/sysext.c                           |  6 ----
 src/systemctl/systemctl-cancel-job.c          |  1 -
 src/systemctl/systemctl-clean-or-freeze.c     |  1 -
 src/systemctl/systemctl-edit.c                |  6 +---
 src/systemctl/systemctl-enable.c              |  3 --
 src/systemctl/systemctl-is-active.c           |  1 -
 src/systemctl/systemctl-is-enabled.c          |  1 -
 src/systemctl/systemctl-kill.c                |  2 +-
 src/systemctl/systemctl-list-dependencies.c   |  3 +-
 src/systemctl/systemctl-list-machines.c       |  1 -
 src/systemctl/systemctl-list-units.c          |  1 -
 src/systemctl/systemctl-logind.c              |  2 --
 src/systemctl/systemctl-reset-failed.c        |  1 -
 src/systemctl/systemctl-set-environment.c     |  3 --
 src/systemctl/systemctl-set-property.c        |  1 -
 src/systemctl/systemctl-show.c                |  7 ----
 src/systemctl/systemctl-start-unit.c          |  6 +---
 src/systemctl/systemctl-util.c                |  7 +---
 src/sysusers/sysusers.c                       |  6 ----
 src/sysv-generator/sysv-generator.c           |  3 --
 src/test/test-bpf-foreign-programs.c          |  2 --
 src/test/test-bpf-lsm.c                       |  1 -
 src/test/test-copy.c                          |  1 -
 src/test/test-env-util.c                      |  1 -
 src/test/test-exec-util.c                     |  4 +--
 src/test/test-execute.c                       |  2 --
 src/test/test-fileio.c                        |  5 ---
 src/test/test-fs-util.c                       |  1 -
 src/test/test-kbd-util.c                      |  1 -
 src/test/test-locale-util.c                   |  2 --
 src/test/test-nss-hosts.c                     |  5 ---
 src/test/test-nss-users.c                     |  2 --
 src/test/test-path-lookup.c                   |  3 +-
 src/test/test-path-util.c                     |  1 -
 src/test/test-path.c                          |  1 -
 src/test/test-sd-path.c                       |  1 -
 src/test/test-socket-bind.c                   |  3 +-
 src/test/test-string-util.c                   |  1 -
 src/test/test-strv.c                          |  5 ---
 src/test/test-sysctl-util.c                   |  1 -
 src/test/test-time-util.c                     |  1 -
 src/test/test-unit-file.c                     |  1 -
 src/timedate/timedated.c                      |  1 -
 src/timesync/timesyncd-manager.c              |  1 -
 src/tmpfiles/tmpfiles.c                       | 14 ++------
 .../tty-ask-password-agent.c                  |  5 +--
 src/udev/net/link-config.c                    |  2 --
 src/udev/udev-event.c                         |  1 -
 src/udev/udev-rules.c                         |  4 +--
 src/udev/udevadm-info.c                       |  1 -
 src/userdb/userdbctl.c                        | 24 ++++---------
 .../xdg-autostart-condition.c                 |  1 -
 .../xdg-autostart-generator.c                 |  1 -
 200 files changed, 110 insertions(+), 611 deletions(-)

diff --git a/src/activate/activate.c b/src/activate/activate.c
index b625d97f2e..8ee7a3ec60 100644
--- a/src/activate/activate.c
+++ b/src/activate/activate.c
@@ -49,7 +49,6 @@ static int add_epoll(int epoll_fd, int fd) {
 }
 
 static int open_sockets(int *epoll_fd, bool accept) {
-        char **address;
         int n, fd, r, count = 0;
 
         n = sd_listen_fds(true);
@@ -124,7 +123,6 @@ static int open_sockets(int *epoll_fd, bool accept) {
 
 static int exec_process(const char *name, char **argv, int start_fd, size_t n_fds) {
         _cleanup_strv_free_ char **envp = NULL;
-        char **s;
         int r;
 
         if (arg_inetd && n_fds != 1)
@@ -389,7 +387,6 @@ static int parse_argv(int argc, char *argv[]) {
 
                 case ARG_FDNAME: {
                         _cleanup_strv_free_ char **names = NULL;
-                        char **s;
 
                         names = strv_split(optarg, ":");
                         if (!names)
diff --git a/src/analyze/analyze-condition.c b/src/analyze/analyze-condition.c
index f57bb27b9a..a7ad085f46 100644
--- a/src/analyze/analyze-condition.c
+++ b/src/analyze/analyze-condition.c
@@ -113,8 +113,6 @@ int verify_conditions(char **lines, UnitFileScope scope, const char *unit, const
                 if (r < 0)
                         return r;
         } else {
-                char **line;
-
                 r = unit_new_for_name(m, sizeof(Service), "test.service", &u);
                 if (r < 0)
                         return log_error_errno(r, "Failed to create test.service: %m");
diff --git a/src/analyze/analyze-elf.c b/src/analyze/analyze-elf.c
index 741cd20f99..a0aa97da69 100644
--- a/src/analyze/analyze-elf.c
+++ b/src/analyze/analyze-elf.c
@@ -11,7 +11,6 @@
 #include "strv.h"
 
 int analyze_elf(char **filenames, JsonFormatFlags json_flags) {
-        char **filename;
         int r;
 
         STRV_FOREACH(filename, filenames) {
diff --git a/src/analyze/analyze-security.c b/src/analyze/analyze-security.c
index 2691dc2c86..d8ccbf8c54 100644
--- a/src/analyze/analyze-security.c
+++ b/src/analyze/analyze-security.c
@@ -2663,7 +2663,6 @@ static int offline_security_checks(char **filenames,
         _cleanup_free_ char *var = NULL;
         int r, k;
         size_t count = 0;
-        char **filename;
 
         if (strv_isempty(filenames))
                 return 0;
@@ -2786,7 +2785,6 @@ int analyze_security(sd_bus *bus,
                 _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
                 _cleanup_strv_free_ char **list = NULL;
                 size_t n = 0;
-                char **i;
 
                 r = sd_bus_call_method(
                                 bus,
@@ -2838,9 +2836,7 @@ int analyze_security(sd_bus *bus,
                                 ret = r;
                 }
 
-        } else {
-                char **i;
-
+        } else
                 STRV_FOREACH(i, units) {
                         _cleanup_free_ char *mangled = NULL, *instance = NULL;
                         const char *name;
@@ -2872,7 +2868,6 @@ int analyze_security(sd_bus *bus,
                         if (r < 0 && ret >= 0)
                                 ret = r;
                 }
-        }
 
         if (overview_table) {
                 if (!FLAGS_SET(flags, ANALYZE_SECURITY_SHORT)) {
diff --git a/src/analyze/analyze-verify.c b/src/analyze/analyze-verify.c
index 943a1f27de..39eb5cf93b 100644
--- a/src/analyze/analyze-verify.c
+++ b/src/analyze/analyze-verify.c
@@ -75,7 +75,6 @@ int verify_prepare_filename(const char *filename, char **ret) {
 
 int verify_generate_path(char **var, char **filenames) {
         const char *old;
-        char **filename;
 
         _cleanup_strv_free_ char **ans = NULL;
         int r;
@@ -184,7 +183,6 @@ static int verify_executables(Unit *u, const char *root) {
 }
 
 static int verify_documentation(Unit *u, bool check_man) {
-        char **p;
         int r = 0, k;
 
         STRV_FOREACH(p, u->documentation) {
@@ -258,7 +256,6 @@ int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run
         Unit *units[strv_length(filenames)];
         _cleanup_free_ char *var = NULL;
         int r, k, i, count = 0;
-        char **filename;
 
         if (strv_isempty(filenames))
                 return 0;
diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c
index a1908ff442..846acf31d3 100644
--- a/src/analyze/analyze.c
+++ b/src/analyze/analyze.c
@@ -239,7 +239,6 @@ static int compare_unit_start(const UnitTimes *a, const UnitTimes *b) {
 
 static int process_aliases(char *argv[], char *tempdir, char ***ret) {
         _cleanup_strv_free_ char **filenames = NULL;
-        char **filename;
         int r;
 
         assert(argv);
@@ -961,7 +960,6 @@ static bool times_in_range(const UnitTimes *times, const BootTimes *boot) {
 
 static int list_dependencies_one(sd_bus *bus, const char *name, unsigned level, char ***units, unsigned branches) {
         _cleanup_strv_free_ char **deps = NULL;
-        char **c;
         int r;
         usec_t service_longest = 0;
         int to_print = 0;
@@ -1111,7 +1109,6 @@ static int analyze_critical_chain(int argc, char *argv[], void *userdata) {
              "The time the unit took to start is printed after the \"+\" character.\n");
 
         if (argc > 1) {
-                char **name;
                 STRV_FOREACH(name, strv_skip(argv, 1))
                         list_dependencies(bus, *name);
         } else
@@ -1207,7 +1204,6 @@ static int graph_one_property(
                 char *to_patterns[]) {
 
         _cleanup_strv_free_ char **units = NULL;
-        char **unit;
         int r;
         bool match_patterns;
 
@@ -1273,7 +1269,6 @@ static int graph_one(sd_bus *bus, const UnitInfo *u, char *patterns[], char *fro
 
 static int expand_patterns(sd_bus *bus, char **patterns, char ***ret) {
         _cleanup_strv_free_ char **expanded_patterns = NULL;
-        char **pattern;
         int r;
 
         STRV_FOREACH(pattern, patterns) {
@@ -1427,7 +1422,7 @@ static int dump(int argc, char *argv[], void *userdata) {
 }
 
 static int cat_config(int argc, char *argv[], void *userdata) {
-        char **arg, **list;
+        char **list;
         int r;
 
         pager_open(arg_pager_flags);
@@ -1476,7 +1471,6 @@ static int verb_log_control(int argc, char *argv[], void *userdata) {
 }
 
 static bool strv_fnmatch_strv_or_empty(char* const* patterns, char **strv, int flags) {
-        char **s;
         STRV_FOREACH(s, strv)
                 if (strv_fnmatch_or_empty(patterns, *s, flags))
                         return true;
@@ -1524,7 +1518,6 @@ static int do_unit_files(int argc, char *argv[], void *userdata) {
 static int dump_unit_paths(int argc, char *argv[], void *userdata) {
         _cleanup_(lookup_paths_free) LookupPaths paths = {};
         int r;
-        char **p;
 
         r = lookup_paths_init(&paths, arg_scope, 0, NULL);
         if (r < 0)
@@ -1737,7 +1730,6 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
 
                 if (!set_isempty(known)) {
                         _cleanup_free_ char **l = NULL;
-                        char **syscall;
 
                         printf("\n"
                                "# %sUngrouped System Calls%s (known but not included in any of the groups except @known):\n",
@@ -1760,7 +1752,6 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
                                 log_notice_errno(k, "# Not showing unlisted system calls, couldn't retrieve kernel system call list: %m");
                 } else if (!set_isempty(kernel)) {
                         _cleanup_free_ char **l = NULL;
-                        char **syscall;
 
                         printf("\n"
                                "# %sUnlisted System Calls%s (supported by the local kernel, but not included in any of the groups listed above):\n",
@@ -1775,9 +1766,7 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
                         STRV_FOREACH(syscall, l)
                                 printf("#   %s\n", *syscall);
                 }
-        } else {
-                char **name;
-
+        } else
                 STRV_FOREACH(name, strv_skip(argv, 1)) {
                         const SyscallFilterSet *set;
 
@@ -1796,7 +1785,6 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
                         dump_syscall_filter(set);
                         first = false;
                 }
-        }
 
         return 0;
 }
@@ -1944,7 +1932,6 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) {
 
                 if (!set_isempty(known)) {
                         _cleanup_free_ char **l = NULL;
-                        char **filesystem;
 
                         printf("\n"
                                "# %sUngrouped filesystems%s (known but not included in any of the groups except @known):\n",
@@ -1987,7 +1974,6 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) {
                         log_notice_errno(k, "# Not showing unlisted filesystems, couldn't retrieve kernel filesystem list: %m");
                 } else if (!set_isempty(kernel)) {
                         _cleanup_free_ char **l = NULL;
-                        char **filesystem;
 
                         printf("\n"
                                "# %sUnlisted filesystems%s (available to the local kernel, but not included in any of the groups listed above):\n",
@@ -2002,9 +1988,7 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) {
                         STRV_FOREACH(filesystem, l)
                                 printf("#   %s\n", *filesystem);
                 }
-        } else {
-                char **name;
-
+        } else
                 STRV_FOREACH(name, strv_skip(argv, 1)) {
                         const FilesystemSet *set;
 
@@ -2023,7 +2007,6 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) {
                         dump_filesystem_set(set);
                         first = false;
                 }
-        }
 
         return 0;
 }
@@ -2041,8 +2024,6 @@ static void parsing_hint(const char *p, bool calendar, bool timestamp, bool time
 }
 
 static int dump_timespan(int argc, char *argv[], void *userdata) {
-        char **input_timespan;
-
         STRV_FOREACH(input_timespan, strv_skip(argv, 1)) {
                 _cleanup_(table_unrefp) Table *table = NULL;
                 usec_t output_usecs;
@@ -2180,7 +2161,6 @@ static int test_timestamp_one(const char *p) {
 
 static int test_timestamp(int argc, char *argv[], void *userdata) {
         int ret = 0, r;
-        char **p;
 
         STRV_FOREACH(p, strv_skip(argv, 1)) {
                 r = test_timestamp_one(*p);
@@ -2312,7 +2292,6 @@ static int test_calendar_one(usec_t n, const char *p) {
 
 static int test_calendar(int argc, char *argv[], void *userdata) {
         int ret = 0, r;
-        char **p;
         usec_t n;
 
         if (arg_base_time != USEC_INFINITY)
diff --git a/src/ask-password/ask-password.c b/src/ask-password/ask-password.c
index a100679af2..093533182f 100644
--- a/src/ask-password/ask-password.c
+++ b/src/ask-password/ask-password.c
@@ -223,7 +223,6 @@ static int parse_argv(int argc, char *argv[]) {
 static int run(int argc, char *argv[]) {
         _cleanup_strv_free_erase_ char **l = NULL;
         usec_t timeout;
-        char **p;
         int r;
 
         log_show_color(true);
diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c
index 287428b561..82c6dc5677 100644
--- a/src/basic/conf-files.c
+++ b/src/basic/conf-files.c
@@ -145,7 +145,7 @@ static int conf_files_list_strv_internal(
 
         _cleanup_hashmap_free_ Hashmap *fh = NULL;
         _cleanup_set_free_free_ Set *masked = NULL;
-        char **files, **p;
+        char **files;
         int r;
 
         assert(ret);
@@ -202,11 +202,8 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p
                 int c;
 
                 c = base_cmp((char* const*) *strv + i, (char* const*) &path);
-                if (c == 0) {
-                        char **dir;
-
+                if (c == 0)
                         /* Oh, there already is an entry with a matching name (the last component). */
-
                         STRV_FOREACH(dir, dirs) {
                                 _cleanup_free_ char *rdir = NULL;
                                 char *p1, *p2;
@@ -233,7 +230,7 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p
                                 }
                         }
 
-                } else if (c > 0)
+                else if (c > 0)
                         /* Following files have lower priority, let's go insert our
                          * new entry. */
                         break;
diff --git a/src/basic/env-file.c b/src/basic/env-file.c
index 0e272da083..b46a679e06 100644
--- a/src/basic/env-file.c
+++ b/src/basic/env-file.c
@@ -520,7 +520,6 @@ static void write_env_var(FILE *f, const char *v) {
 int write_env_file(const char *fname, char **l) {
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_free_ char *p = NULL;
-        char **i;
         int r;
 
         assert(fname);
diff --git a/src/basic/env-util.c b/src/basic/env-util.c
index 885967e7f3..455f5d76f5 100644
--- a/src/basic/env-util.c
+++ b/src/basic/env-util.c
@@ -96,8 +96,6 @@ bool env_assignment_is_valid(const char *e) {
 }
 
 bool strv_env_is_valid(char **e) {
-        char **p, **q;
-
         STRV_FOREACH(p, e) {
                 size_t k;
 
@@ -115,8 +113,6 @@ bool strv_env_is_valid(char **e) {
 }
 
 bool strv_env_name_is_valid(char **l) {
-        char **p;
-
         STRV_FOREACH(p, l) {
                 if (!env_name_is_valid(*p))
                         return false;
@@ -129,8 +125,6 @@ bool strv_env_name_is_valid(char **l) {
 }
 
 bool strv_env_name_or_assignment_is_valid(char **l) {
-        char **p;
-
         STRV_FOREACH(p, l) {
                 if (!env_assignment_is_valid(*p) && !env_name_is_valid(*p))
                         return false;
@@ -272,7 +266,7 @@ static bool env_entry_has_name(const char *entry, const char *name) {
 
 char **strv_env_delete(char **x, size_t n_lists, ...) {
         size_t n, i = 0;
-        char **k, **r;
+        char **r;
         va_list ap;
 
         /* Deletes every entry from x that is mentioned in the other
@@ -287,7 +281,7 @@ char **strv_env_delete(char **x, size_t n_lists, ...) {
         STRV_FOREACH(k, x) {
                 va_start(ap, n_lists);
                 for (size_t v = 0; v < n_lists; v++) {
-                        char **l, **j;
+                        char **l;
 
                         l = va_arg(ap, char**);
                         STRV_FOREACH(j, l)
@@ -379,7 +373,6 @@ char **strv_env_unset_many(char **l, ...) {
 
 int strv_env_replace_consume(char ***l, char *p) {
         const char *t, *name;
-        char **f;
         int r;
 
         assert(p);
@@ -467,8 +460,6 @@ int strv_env_assign(char ***l, const char *key, const char *value) {
 }
 
 char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) {
-        char **i;
-
         assert(name);
 
         if (k <= 0)
@@ -496,7 +487,7 @@ char *strv_env_get(char **l, const char *name) {
 }
 
 char *strv_env_pairs_get(char **l, const char *name) {
-        char **key, **value, *result = NULL;
+        char *result = NULL;
 
         assert(name);
 
@@ -508,7 +499,6 @@ char *strv_env_pairs_get(char **l, const char *name) {
 }
 
 char **strv_env_clean_with_callback(char **e, void (*invalid_callback)(const char *p, void *userdata), void *userdata) {
-        char **p, **q;
         int k = 0;
 
         STRV_FOREACH(p, e) {
@@ -702,7 +692,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) {
 }
 
 char **replace_env_argv(char **argv, char **env) {
-        char **ret, **i;
+        char **ret;
         size_t k = 0, l = 0;
 
         l = strv_length(argv);
@@ -832,7 +822,6 @@ int setenv_systemd_exec_pid(bool update_only) {
 int getenv_path_list(const char *name, char ***ret_paths) {
         _cleanup_strv_free_ char **l = NULL;
         const char *e;
-        char **p;
         int r;
 
         assert(name);
diff --git a/src/basic/escape.c b/src/basic/escape.c
index ce57fcc762..1cb7ced545 100644
--- a/src/basic/escape.c
+++ b/src/basic/escape.c
@@ -549,7 +549,6 @@ char* quote_command_line(char **argv, ShellEscapeFlags flags) {
 
         assert(argv);
 
-        char **a;
         STRV_FOREACH(a, argv) {
                 _cleanup_free_ char *t = NULL;
 
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
index 8d92da327e..d9b988d117 100644
--- a/src/basic/fileio.c
+++ b/src/basic/fileio.c
@@ -1042,8 +1042,6 @@ static int search_and_fopen_internal(
                 FILE **ret,
                 char **ret_path) {
 
-        char **i;
-
         assert(path);
         assert(mode);
         assert(ret);
diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c
index b51d70bc87..bd7a6b0d6e 100644
--- a/src/basic/hashmap.c
+++ b/src/basic/hashmap.c
@@ -1864,7 +1864,6 @@ int _set_put_strdup_full(Set **s, const struct hash_ops *hash_ops, const char *p
 
 int _set_put_strdupv_full(Set **s, const struct hash_ops *hash_ops, char **l  HASHMAP_DEBUG_PARAMS) {
         int n = 0, r;
-        char **i;
 
         assert(s);
 
diff --git a/src/basic/ordered-set.c b/src/basic/ordered-set.c
index 0a76f04561..b4c2588395 100644
--- a/src/basic/ordered-set.c
+++ b/src/basic/ordered-set.c
@@ -58,7 +58,6 @@ int _ordered_set_put_strdup(OrderedSet **s, const char *p  HASHMAP_DEBUG_PARAMS)
 
 int _ordered_set_put_strdupv(OrderedSet **s, char **l  HASHMAP_DEBUG_PARAMS) {
         int n = 0, r;
-        char **i;
 
         STRV_FOREACH(i, l) {
                 r = _ordered_set_put_strdup(s, *i  HASHMAP_DEBUG_PASS_ARGS);
diff --git a/src/basic/os-util.c b/src/basic/os-util.c
index 38b2179e48..acfff24319 100644
--- a/src/basic/os-util.c
+++ b/src/basic/os-util.c
@@ -277,7 +277,6 @@ int load_os_release_pairs(const char *root, char ***ret) {
 
 int load_os_release_pairs_with_prefix(const char *root, const char *prefix, char ***ret) {
         _cleanup_strv_free_ char **os_release_pairs = NULL, **os_release_pairs_prefixed = NULL;
-        char **p, **q;
         int r;
 
         r = load_os_release_pairs(root, &os_release_pairs);
diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c
index ab51955e34..b699756658 100644
--- a/src/basic/path-lookup.c
+++ b/src/basic/path-lookup.c
@@ -463,7 +463,6 @@ static int patch_root_prefix(char **p, const char *root_dir) {
 }
 
 static int patch_root_prefix_strv(char **l, const char *root_dir) {
-        char **i;
         int r;
 
         if (!root_dir)
diff --git a/src/basic/path-util.c b/src/basic/path-util.c
index 4c952d863c..76af40aaf2 100644
--- a/src/basic/path-util.c
+++ b/src/basic/path-util.c
@@ -202,9 +202,9 @@ int path_make_relative(const char *from, const char *to, char **ret) {
 }
 
 char* path_startswith_strv(const char *p, char **set) {
-        char **s, *t;
-
         STRV_FOREACH(s, set) {
+                char *t;
+
                 t = path_startswith(p, *s);
                 if (t)
                         return t;
@@ -214,7 +214,6 @@ char* path_startswith_strv(const char *p, char **set) {
 }
 
 int path_strv_make_absolute_cwd(char **l) {
-        char **s;
         int r;
 
         /* Goes through every item in the string list and makes it
@@ -236,7 +235,6 @@ int path_strv_make_absolute_cwd(char **l) {
 }
 
 char **path_strv_resolve(char **l, const char *root) {
-        char **s;
         unsigned k = 0;
         bool enomem = false;
         int r;
@@ -700,12 +698,12 @@ int find_executable_full(const char *name, const char *root, char **exec_search_
                 p = DEFAULT_PATH;
 
         if (exec_search_path) {
-                char **element;
-
                 STRV_FOREACH(element, exec_search_path) {
                         _cleanup_free_ char *full_path = NULL;
+
                         if (!path_is_absolute(*element))
                                 continue;
+
                         full_path = path_join(*element, name);
                         if (!full_path)
                                 return -ENOMEM;
@@ -754,7 +752,6 @@ int find_executable_full(const char *name, const char *root, char **exec_search_
 
 bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool update) {
         bool changed = false, originally_unset;
-        const char* const* i;
 
         assert(timestamp);
 
@@ -1339,7 +1336,7 @@ int systemd_installation_has_version(const char *root, unsigned minimal_version)
 
                 _cleanup_strv_free_ char **names = NULL;
                 _cleanup_free_ char *path = NULL;
-                char *c, **name;
+                char *c;
 
                 path = path_join(root, pattern);
                 if (!path)
@@ -1411,8 +1408,6 @@ bool empty_or_root(const char *path) {
 }
 
 bool path_strv_contains(char **l, const char *path) {
-        char **i;
-
         STRV_FOREACH(i, l)
                 if (path_equal(*i, path))
                         return true;
@@ -1421,10 +1416,9 @@ bool path_strv_contains(char **l, const char *path) {
 }
 
 bool prefixed_path_strv_contains(char **l, const char *path) {
-        char **i, *j;
-
         STRV_FOREACH(i, l) {
-                j = *i;
+                const char *j = *i;
+
                 if (*j == '-')
                         j++;
                 if (*j == '+')
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index c971852158..c09d7d0321 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -214,7 +214,6 @@ int get_process_cmdline(pid_t pid, size_t max_columns, ProcessCmdlineFlags flags
                 assert(!(flags & PROCESS_CMDLINE_USE_LOCALE));
 
                 _cleanup_strv_free_ char **args = NULL;
-                char **p;
 
                 args = strv_parse_nulstr(t, k);
                 if (!args)
diff --git a/src/basic/strv.c b/src/basic/strv.c
index 2ba5a94839..d195606fff 100644
--- a/src/basic/strv.c
+++ b/src/basic/strv.c
@@ -17,8 +17,6 @@
 #include "strv.h"
 
 char* strv_find(char * const *l, const char *name) {
-        char * const *i;
-
         assert(name);
 
         STRV_FOREACH(i, l)
@@ -29,8 +27,6 @@ char* strv_find(char * const *l, const char *name) {
 }
 
 char* strv_find_case(char * const *l, const char *name) {
-        char * const *i;
-
         assert(name);
 
         STRV_FOREACH(i, l)
@@ -41,8 +37,6 @@ char* strv_find_case(char * const *l, const char *name) {
 }
 
 char* strv_find_prefix(char * const *l, const char *name) {
-        char * const *i;
-
         assert(name);
 
         STRV_FOREACH(i, l)
@@ -53,14 +47,14 @@ char* strv_find_prefix(char * const *l, const char *name) {
 }
 
 char* strv_find_startswith(char * const *l, const char *name) {
-        char * const *i, *e;
-
         assert(name);
 
         /* Like strv_find_prefix, but actually returns only the
          * suffix, not the whole item */
 
         STRV_FOREACH(i, l) {
+                char *e;
+
                 e = startswith(*i, name);
                 if (e)
                         return e;
@@ -80,8 +74,6 @@ char** strv_free(char **l) {
 }
 
 char** strv_free_erase(char **l) {
-        char **i;
-
         STRV_FOREACH(i, l)
                 erase_and_freep(i);
 
@@ -171,8 +163,8 @@ char** strv_new_internal(const char *x, ...) {
 }
 
 int strv_extend_strv(char ***a, char * const *b, bool filter_duplicates) {
-        char * const *s, **t;
         size_t p, q, i = 0;
+        char **t;
 
         assert(a);
 
@@ -217,7 +209,6 @@ rollback:
 }
 
 int strv_extend_strv_concat(char ***a, char * const *b, const char *suffix) {
-        char * const *s;
         int r;
 
         STRV_FOREACH(s, b) {
@@ -367,7 +358,6 @@ int strv_split_colon_pairs(char ***t, const char *s) {
 }
 
 char* strv_join_full(char * const *l, const char *separator, const char *prefix, bool unescape_separators) {
-        char * const *s;
         char *r, *e;
         size_t n, k, m;
 
@@ -595,8 +585,6 @@ int strv_extend_front(char ***l, const char *value) {
 }
 
 char** strv_uniq(char **l) {
-        char **i;
-
         /* Drops duplicate entries. The first identical string will be
          * kept, the others dropped */
 
@@ -607,8 +595,6 @@ char** strv_uniq(char **l) {
 }
 
 bool strv_is_uniq(char * const *l) {
-        char * const *i;
-
         STRV_FOREACH(i, l)
                 if (strv_find(i+1, *i))
                         return false;
@@ -717,7 +703,6 @@ int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) {
          */
 
         _cleanup_free_ char *m = NULL;
-        char * const *i;
         size_t n = 0;
 
         assert(ret);
@@ -754,8 +739,6 @@ int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) {
 }
 
 bool strv_overlap(char * const *a, char * const *b) {
-        char * const *i;
-
         STRV_FOREACH(i, a)
                 if (strv_contains(b, *i))
                         return true;
@@ -795,8 +778,6 @@ int strv_compare(char * const *a, char * const *b) {
 }
 
 void strv_print(char * const *l) {
-        char * const *s;
-
         STRV_FOREACH(s, l)
                 puts(*s);
 }
@@ -830,8 +811,6 @@ char** strv_reverse(char **l) {
 }
 
 char** strv_shell_escape(char **l, const char *bad) {
-        char **s;
-
         /* Escapes every character in every string in l that is in bad,
          * edits in-place, does not roll-back on error. */
 
@@ -914,7 +893,6 @@ rollback:
 
 int fputstrv(FILE *f, char * const *l, const char *separator, bool *space) {
         bool b = false;
-        char * const *s;
         int r;
 
         /* Like fputs(), but for strv, and with a less stupid argument order */
diff --git a/src/basic/strv.h b/src/basic/strv.h
index 27d4450468..3acf0a48f3 100644
--- a/src/basic/strv.h
+++ b/src/basic/strv.h
@@ -122,19 +122,30 @@ static inline int strv_from_nulstr(char ***a, const char *nulstr) {
 
 bool strv_overlap(char * const *a, char * const *b) _pure_;
 
+#define _STRV_FOREACH(s, l, i)                                          \
+        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
+
 #define STRV_FOREACH(s, l)                      \
-        for ((s) = (l); (s) && *(s); (s)++)
+        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
+
+#define _STRV_FOREACH_BACKWARDS(s, l, h, i)                             \
+        for (typeof(*(l)) *s, *h = (l), *i = ({                         \
+                                size_t _len = strv_length(h);           \
+                                _len > 0 ? h + _len - 1 : NULL;         \
+                        });                                             \
+             i && (s = i) >= h;                                         \
+             i--)
+
+#define STRV_FOREACH_BACKWARDS(s, l)                                    \
+        _STRV_FOREACH_BACKWARDS(s, l, UNIQ_T(h, UNIQ), UNIQ_T(i, UNIQ))
 
-#define STRV_FOREACH_BACKWARDS(s, l)                                \
-        for (s = ({                                                 \
-                        typeof(l) _l = l;                           \
-                        _l ? _l + strv_length(_l) - 1U : NULL;      \
-                        });                                         \
-             (l) && ((s) >= (l));                                   \
-             (s)--)
+#define _STRV_FOREACH_PAIR(x, y, l, i)                          \
+        for (typeof(*l) *x, *y, *i = (l);                       \
+             i && *(x = i) && *(y = i + 1);                     \
+             i += 2)
 
-#define STRV_FOREACH_PAIR(x, y, l)               \
-        for ((x) = (l), (y) = (x) ? (x+1) : NULL; (x) && *(x) && *(y); (x) += 2, (y) = (x + 1))
+#define STRV_FOREACH_PAIR(x, y, l)                      \
+        _STRV_FOREACH_PAIR(x, y, l, UNIQ_T(i, UNIQ))
 
 char** strv_sort(char **l);
 void strv_print(char * const *l);
@@ -185,7 +196,7 @@ void strv_print(char * const *l);
 #define STARTSWITH_SET(p, ...)                                  \
         ({                                                      \
                 const char *_p = (p);                           \
-                char  *_found = NULL, **_i;                     \
+                char *_found = NULL;                            \
                 STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) {      \
                         _found = startswith(_p, *_i);           \
                         if (_found)                             \
@@ -197,7 +208,7 @@ void strv_print(char * const *l);
 #define ENDSWITH_SET(p, ...)                                    \
         ({                                                      \
                 const char *_p = (p);                           \
-                char  *_found = NULL, **_i;                     \
+                char *_found = NULL;                            \
                 STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) {      \
                         _found = endswith(_p, *_i);             \
                         if (_found)                             \
diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c
index 142ba006f8..6cf66b45cf 100644
--- a/src/basic/unit-file.c
+++ b/src/basic/unit-file.c
@@ -215,8 +215,7 @@ bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_
 
         siphash24_init(&state, HASH_KEY.bytes);
 
-        char **dir;
-        STRV_FOREACH(dir, (char**) lp->search_path) {
+        STRV_FOREACH(dir, lp->search_path) {
                 struct stat st;
 
                 if (lookup_paths_mtime_exclude(lp, *dir))
@@ -388,7 +387,6 @@ int unit_file_build_name_map(
         _cleanup_hashmap_free_ Hashmap *ids = NULL, *names = NULL;
         _cleanup_set_free_free_ Set *paths = NULL;
         uint64_t timestamp_hash;
-        char **dir;
         int r;
 
         /* Before doing anything, check if the timestamp hash that was passed is still valid.
@@ -406,7 +404,7 @@ int unit_file_build_name_map(
                         return log_oom();
         }
 
-        STRV_FOREACH(dir, (char**) lp->search_path) {
+        STRV_FOREACH(dir, lp->search_path) {
                 _cleanup_closedir_ DIR *d = NULL;
 
                 d = opendir(*dir);
@@ -614,7 +612,7 @@ static int add_names(
                 Set **names,
                 const char *name) {
 
-        char **aliases, **alias;
+        char **aliases;
         int r;
 
         assert(name_type == UNIT_NAME_PLAIN || instance);
diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c
index 18231c2618..817ee387ff 100644
--- a/src/binfmt/binfmt.c
+++ b/src/binfmt/binfmt.c
@@ -213,7 +213,6 @@ static int run(int argc, char *argv[]) {
                 }
         else {
                 _cleanup_strv_free_ char **files = NULL;
-                char **f;
 
                 r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("binfmt.d"));
                 if (r < 0)
diff --git a/src/boot/bless-boot.c b/src/boot/bless-boot.c
index 9e4b0d1f72..49009cb1eb 100644
--- a/src/boot/bless-boot.c
+++ b/src/boot/bless-boot.c
@@ -320,7 +320,6 @@ static const char *skip_slash(const char *path) {
 static int verb_status(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *path = NULL, *prefix = NULL, *suffix = NULL, *good = NULL, *bad = NULL;
         uint64_t left, done;
-        char **p;
         int r;
 
         r = acquire_boot_count_path(&path, &prefix, &left, &done, &suffix);
@@ -397,7 +396,6 @@ static int verb_set(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *path = NULL, *prefix = NULL, *suffix = NULL, *good = NULL, *bad = NULL, *parent = NULL;
         const char *target, *source1, *source2;
         uint64_t done;
-        char **p;
         int r;
 
         r = acquire_boot_count_path(&path, &prefix, NULL, &done, &suffix);
diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c
index 9427a0e4ce..c1adae4962 100644
--- a/src/boot/bootctl.c
+++ b/src/boot/bootctl.c
@@ -440,7 +440,6 @@ static int boot_entry_show(const BootEntry *e, bool show_as_default) {
         if (e->kernel)
                 boot_entry_file_list("linux", e->root, e->kernel, &status);
 
-        char **s;
         STRV_FOREACH(s, e->initrd)
                 boot_entry_file_list(s == e->initrd ? "initrd" : NULL,
                                      e->root,
@@ -669,7 +668,6 @@ static const char *const dollar_boot_subdirs[] = {
 };
 
 static int create_subdirs(const char *root, const char * const *subdirs) {
-        const char *const *i;
         int r;
 
         STRV_FOREACH(i, subdirs) {
diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c
index c0c9b23ae9..fd646784b9 100644
--- a/src/busctl/busctl.c
+++ b/src/busctl/busctl.c
@@ -141,7 +141,7 @@ static int list_bus_names(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_hashmap_free_ Hashmap *names = NULL;
         _cleanup_(table_unrefp) Table *table = NULL;
-        char **i, *k;
+        char *k;
         void *v;
         int r;
 
@@ -502,7 +502,6 @@ static int tree_one(sd_bus *bus, const char *service) {
 
 static int tree(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        char **i;
         int r;
 
         /* Do superficial verification of arguments before even opening the bus */
@@ -1206,7 +1205,6 @@ static int monitor(int argc, char **argv, int (*dump)(sd_bus_message *m, FILE *f
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *message = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        char **i;
         uint32_t flags = 0;
         const char *unique_name;
         bool is_monitor = false;
@@ -2115,7 +2113,6 @@ static int emit_signal(int argc, char **argv, void *userdata) {
 static int get_property(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
-        char **i;
         int r;
 
         r = acquire_bus(false, &bus);
diff --git a/src/cgls/cgls.c b/src/cgls/cgls.c
index 775bd84ad2..8e8f97b3ce 100644
--- a/src/cgls/cgls.c
+++ b/src/cgls/cgls.c
@@ -201,7 +201,6 @@ static int run(int argc, char *argv[]) {
         if (arg_names) {
                 _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
                 _cleanup_free_ char *root = NULL;
-                char **name;
 
                 STRV_FOREACH(name, arg_names) {
                         int q;
diff --git a/src/core/bpf-firewall.c b/src/core/bpf-firewall.c
index 3c1c02e444..c149c0afff 100644
--- a/src/core/bpf-firewall.c
+++ b/src/core/bpf-firewall.c
@@ -596,8 +596,6 @@ int bpf_firewall_compile(Unit *u) {
 }
 
 static int load_bpf_progs_from_fs_to_set(Unit *u, char **filter_paths, Set **set) {
-        char **bpf_fs_path;
-
         set_clear(*set);
 
         STRV_FOREACH(bpf_fs_path, filter_paths) {
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index f58de95a49..17ec70567c 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -430,7 +430,6 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) {
         CGroupContext *c;
         CGroupSocketBindItem *bi;
         struct in_addr_prefix *iaai;
-        char **path;
 
         char cda[FORMAT_CGROUP_DIFF_MAX];
         char cdb[FORMAT_CGROUP_DIFF_MAX];
diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
index f0d8759e85..bd76ce7117 100644
--- a/src/core/dbus-cgroup.c
+++ b/src/core/dbus-cgroup.c
@@ -640,7 +640,6 @@ static int bus_cgroup_set_transient_property(
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *buf = NULL;
                         _cleanup_fclose_ FILE *f = NULL;
-                        char **entry;
                         size_t size = 0;
 
                         if (n == 0)
@@ -2050,7 +2049,6 @@ int bus_cgroup_set_property(
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *joined = NULL;
-                        char **s;
 
                         if (strv_isempty(l)) {
                                 c->restrict_network_interfaces_is_allow_list = false;
diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
index 5c499e5d06..2d49f86366 100644
--- a/src/core/dbus-execute.c
+++ b/src/core/dbus-execute.c
@@ -74,7 +74,6 @@ static int property_get_environment_files(
                 sd_bus_error *error) {
 
         ExecContext *c = userdata;
-        char **j;
         int r;
 
         assert(bus);
@@ -1143,15 +1142,12 @@ static int bus_property_get_exec_dir_symlink(
         if (r < 0)
                 return r;
 
-        for (size_t i = 0; i < d->n_items; i++) {
-                char **dst;
-
+        for (size_t i = 0; i < d->n_items; i++)
                 STRV_FOREACH(dst, d->items[i].symlinks) {
                         r = sd_bus_message_append(reply, "(sst)", d->items[i].path, *dst, 0 /* flags, unused for now */);
                         if (r < 0)
                                 return r;
                 }
-        }
 
         return sd_bus_message_close_container(reply);
 }
@@ -2021,7 +2017,6 @@ int bus_exec_context_set_transient_property(
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *joined = NULL;
                         FilesystemParseFlags invert_flag = allow_list ? 0 : FILESYSTEM_PARSE_INVERT;
-                        char **s;
 
                         if (strv_isempty(l)) {
                                 c->restrict_filesystems_allow_list = false;
@@ -2067,7 +2062,6 @@ int bus_exec_context_set_transient_property(
 
         if (streq(name, "SupplementaryGroups")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
@@ -2432,7 +2426,6 @@ int bus_exec_context_set_transient_property(
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *joined = NULL;
                         SeccompParseFlags invert_flag = allow_list ? 0 : SECCOMP_PARSE_INVERT;
-                        char **s;
 
                         if (strv_isempty(l)) {
                                 c->syscall_allow_list = false;
@@ -2517,7 +2510,6 @@ int bus_exec_context_set_transient_property(
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *joined = NULL;
                         SeccompParseFlags invert_flag = allow_list ? 0 : SECCOMP_PARSE_INVERT;
-                        char **s;
 
                         if (strv_isempty(l)) {
                                 c->syscall_log_allow_list = false;
@@ -2569,9 +2561,7 @@ int bus_exec_context_set_transient_property(
 
                         if (strv_isempty(l))
                                 c->syscall_archs = set_free(c->syscall_archs);
-                        else {
-                                char **s;
-
+                        else
                                 STRV_FOREACH(s, l) {
                                         uint32_t a;
 
@@ -2584,8 +2574,6 @@ int bus_exec_context_set_transient_property(
                                                 return r;
                                 }
 
-                        }
-
                         joined = strv_join(l, " ");
                         if (!joined)
                                 return -ENOMEM;
@@ -2617,7 +2605,6 @@ int bus_exec_context_set_transient_property(
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         _cleanup_free_ char *joined = NULL;
-                        char **s;
 
                         if (strv_isempty(l)) {
                                 c->address_families_allow_list = allow_list;
@@ -3146,7 +3133,6 @@ int bus_exec_context_set_transient_property(
                 _cleanup_fclose_ FILE *f = NULL;
                 _cleanup_strv_free_ char **l = NULL;
                 size_t size = 0;
-                char **i;
 
                 r = sd_bus_message_enter_container(message, 'a', "(sb)");
                 if (r < 0)
@@ -3264,7 +3250,6 @@ int bus_exec_context_set_transient_property(
                               "ReadWritePaths", "ReadOnlyPaths", "InaccessiblePaths", "ExecPaths", "NoExecPaths")) {
                 _cleanup_strv_free_ char **l = NULL;
                 char ***dirs;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
@@ -3316,16 +3301,15 @@ int bus_exec_context_set_transient_property(
 
         } else if (streq(name, "ExecSearchPath")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
                         return r;
 
-                STRV_FOREACH(p, l) {
+                STRV_FOREACH(p, l)
                         if (!path_is_absolute(*p) || !path_is_normalized(*p) || strchr(*p, ':'))
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid %s", name);
-                }
+
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         if (strv_isempty(l)) {
                                 c->exec_search_path = strv_free(c->exec_search_path);
@@ -3346,7 +3330,6 @@ int bus_exec_context_set_transient_property(
 
         } else if (STR_IN_SET(name, "RuntimeDirectory", "StateDirectory", "CacheDirectory", "LogsDirectory", "ConfigurationDirectory")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
@@ -3375,7 +3358,6 @@ int bus_exec_context_set_transient_property(
                                 unit_write_settingf(u, flags, name, "%s=", name);
                         } else {
                                 _cleanup_free_ char *joined = NULL;
-                                char **source;
 
                                 STRV_FOREACH(source, l) {
                                         r = exec_directory_add(&d->items, &d->n_items, *source, NULL);
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index 1a3098ceb1..0e3590d1c9 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -817,7 +817,6 @@ static int method_list_units_by_names(sd_bus_message *message, void *userdata, s
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         Manager *m = userdata;
         int r;
-        char **unit;
         _cleanup_strv_free_ char **units = NULL;
 
         assert(message);
diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c
index a3b1e0442f..989c3f74db 100644
--- a/src/core/dbus-socket.c
+++ b/src/core/dbus-socket.c
@@ -326,16 +326,14 @@ static int bus_socket_set_transient_property(
 
         if (streq(name, "Symlinks")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
                         return r;
 
-                STRV_FOREACH(p, l) {
+                STRV_FOREACH(p, l)
                         if (!path_is_absolute(*p))
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Symlink path is not absolute: %s", *p);
-                }
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         if (strv_isempty(l)) {
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index 1128c42ad9..c1cf6dfb6f 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -2245,16 +2245,14 @@ static int bus_unit_set_transient_property(
 
         if (streq(name, "Documentation")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
                         return r;
 
-                STRV_FOREACH(p, l) {
+                STRV_FOREACH(p, l)
                         if (!documentation_url_is_valid(*p))
                                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid URL in %s: %s", name, *p);
-                }
 
                 if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
                         if (strv_isempty(l)) {
@@ -2310,7 +2308,6 @@ static int bus_unit_set_transient_property(
 
         } else if (streq(name, "RequiresMountsFor")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **p;
 
                 r = sd_bus_message_read_strv(message, &l);
                 if (r < 0)
diff --git a/src/core/device.c b/src/core/device.c
index 43f49573b9..d2c5febd3f 100644
--- a/src/core/device.c
+++ b/src/core/device.c
@@ -307,13 +307,9 @@ static void device_dump(Unit *u, FILE *f, const char *prefix) {
                 prefix, strna(d->sysfs),
                 prefix, strna(s));
 
-        if (!strv_isempty(d->wants_property)) {
-                char **i;
-
-                STRV_FOREACH(i, d->wants_property)
-                        fprintf(f, "%sudev SYSTEMD_WANTS: %s\n",
-                                prefix, *i);
-        }
+        STRV_FOREACH(i, d->wants_property)
+                fprintf(f, "%sudev SYSTEMD_WANTS: %s\n",
+                        prefix, *i);
 }
 
 _pure_ static UnitActiveState device_active_state(Unit *u) {
@@ -419,9 +415,7 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) {
                 k = NULL;
         }
 
-        if (d->state != DEVICE_DEAD) {
-                char **i;
-
+        if (d->state != DEVICE_DEAD)
                 /* So here's a special hack, to compensate for the fact that the udev database's reload cycles are not
                  * synchronized with our own reload cycles: when we detect that the SYSTEMD_WANTS property of a device
                  * changes while the device unit is already up, let's manually trigger any new units listed in it not
@@ -431,7 +425,6 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) {
                  *
                  * We do this only if the device has been up already when we parse this, as otherwise the usual
                  * dependency logic that is run from the dead → plugged transition will trigger these deps. */
-
                 STRV_FOREACH(i, added) {
                         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
 
@@ -442,7 +435,6 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) {
                         if (r < 0)
                                 log_unit_warning_errno(u, r, "Failed to enqueue SYSTEMD_WANTS= job, ignoring: %s", bus_error_message(&error, r));
                 }
-        }
 
         return strv_free_and_replace(d->wants_property, added);
 }
diff --git a/src/core/execute.c b/src/core/execute.c
index 3cafd0f17d..306e563e4f 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -994,7 +994,6 @@ static int get_fixed_group(const ExecContext *c, const char **group, gid_t *gid)
 static int get_supplementary_groups(const ExecContext *c, const char *user,
                                     const char *group, gid_t gid,
                                     gid_t **supplementary_gids, int *ngids) {
-        char **i;
         int r, k = 0;
         int ngroups_max;
         bool keep_groups = false;
@@ -1185,7 +1184,7 @@ static int setup_pam(
         pam_handle_t *handle = NULL;
         sigset_t old_ss;
         int pam_code = PAM_SUCCESS, r;
-        char **nv, **e = NULL;
+        char **e = NULL;
         bool close_session = false;
         pid_t pam_pid = 0, parent_pid;
         int flags = 0;
@@ -2010,7 +2009,6 @@ static int build_environment(
 static int build_pass_environment(const ExecContext *c, char ***ret) {
         _cleanup_strv_free_ char **pass_env = NULL;
         size_t n_env = 0;
-        char **i;
 
         STRV_FOREACH(i, c->pass_environment) {
                 _cleanup_free_ char *x = NULL;
@@ -2283,7 +2281,6 @@ static bool exec_directory_is_private(const ExecContext *context, ExecDirectoryT
 
 static int create_many_symlinks(const char *root, const char *source, char **symlinks) {
         _cleanup_free_ char *src_abs = NULL;
-        char **dst;
         int r;
 
         assert(source);
@@ -3221,7 +3218,6 @@ static int compile_symlinks(
         for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++) {
                 for (size_t i = 0; i < context->directories[dt].n_items; i++) {
                         _cleanup_free_ char *private_path = NULL, *path = NULL;
-                        char **symlink;
 
                         STRV_FOREACH(symlink, context->directories[dt].items[i].symlinks) {
                                 _cleanup_free_ char *src_abs = NULL, *dst_abs = NULL;
@@ -5190,7 +5186,6 @@ int exec_context_destroy_runtime_directory(const ExecContext *c, const char *run
                  * service next. */
                 (void) rm_rf(p, REMOVE_ROOT);
 
-                char **symlink;
                 STRV_FOREACH(symlink, c->directories[EXEC_DIRECTORY_RUNTIME].items[i].symlinks) {
                         _cleanup_free_ char *symlink_abs = NULL;
 
@@ -5364,7 +5359,6 @@ static int exec_context_named_iofds(
 
 static int exec_context_load_environment(const Unit *unit, const ExecContext *c, char ***ret) {
         _cleanup_strv_free_ char **v = NULL;
-        char **i;
         int r;
 
         assert(c);
@@ -5471,8 +5465,6 @@ bool exec_context_may_touch_console(const ExecContext *ec) {
 }
 
 static void strv_fprintf(FILE *f, char **l) {
-        char **g;
-
         assert(f);
 
         STRV_FOREACH(g, l)
@@ -5492,7 +5484,6 @@ static void strv_dump(FILE* f, const char *prefix, const char *name, char **strv
 }
 
 void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
-        char **e, **d;
         int r;
 
         assert(c);
@@ -5924,9 +5915,11 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
         }
 
 #if HAVE_LIBBPF
-        if (exec_context_restrict_filesystems_set(c))
+        if (exec_context_restrict_filesystems_set(c)) {
+                char **e;
                 SET_FOREACH(e, c->restrict_filesystems)
                         fprintf(f, "%sRestrictFileSystems: %s\n", prefix, *e);
+        }
 #endif
 
         if (c->network_namespace_path)
@@ -6117,7 +6110,6 @@ int exec_context_get_clean_directories(
                                         return r;
                         }
 
-                        char **symlink;
                         STRV_FOREACH(symlink, c->directories[t].items[i].symlinks) {
                                 j = path_join(prefix[t], *symlink);
                                 if (!j)
diff --git a/src/core/load-dropin.c b/src/core/load-dropin.c
index 080a63bc7e..53d2a3daa1 100644
--- a/src/core/load-dropin.c
+++ b/src/core/load-dropin.c
@@ -13,7 +13,6 @@
 
 static int process_deps(Unit *u, UnitDependency dependency, const char *dir_suffix) {
         _cleanup_strv_free_ char **paths = NULL;
-        char **p;
         int r;
 
         r = unit_file_find_dropin_paths(NULL,
@@ -85,7 +84,6 @@ static int process_deps(Unit *u, UnitDependency dependency, const char *dir_suff
 
 int unit_load_dropin(Unit *u) {
         _cleanup_strv_free_ char **l = NULL;
-        char **f;
         int r;
 
         assert(u);
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index 461e073269..0acc350389 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -1634,7 +1634,6 @@ int config_parse_root_image_options(
 
         _cleanup_(mount_options_free_allp) MountOptions *options = NULL;
         _cleanup_strv_free_ char **l = NULL;
-        char **first = NULL, **second = NULL;
         ExecContext *c = data;
         const Unit *u = userdata;
         int r;
diff --git a/src/core/main.c b/src/core/main.c
index cb3131c12a..4bad2e84a0 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -2409,7 +2409,6 @@ static void fallback_rlimit_memlock(const struct rlimit *saved_rlimit_memlock) {
 }
 
 static void setenv_manager_environment(void) {
-        char **p;
         int r;
 
         STRV_FOREACH(p, arg_manager_environment) {
diff --git a/src/core/manager.c b/src/core/manager.c
index 22bd0866c5..60846a66e6 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -3582,7 +3582,6 @@ void manager_check_finished(Manager *m) {
 }
 
 static bool generator_path_any(const char* const* paths) {
-        char **path;
         bool found = false;
 
         /* Optimize by skipping the whole process by not creating output directories
diff --git a/src/core/namespace.c b/src/core/namespace.c
index c549dcc96b..4bd63f6227 100644
--- a/src/core/namespace.c
+++ b/src/core/namespace.c
@@ -313,8 +313,6 @@ static void mount_entry_done(MountEntry *p) {
 }
 
 static int append_access_mounts(MountEntry **p, char **strv, MountMode mode, bool forcibly_require_prefix) {
-        char **i;
-
         assert(p);
 
         /* Adds a list of user-supplied READWRITE/READWRITE_IMPLICIT/READONLY/INACCESSIBLE entries */
@@ -349,8 +347,6 @@ static int append_access_mounts(MountEntry **p, char **strv, MountMode mode, boo
 }
 
 static int append_empty_dir_mounts(MountEntry **p, char **strv) {
-        char **i;
-
         assert(p);
 
         /* Adds tmpfs mounts to provide readable but empty directories. This is primarily used to implement the
@@ -417,7 +413,6 @@ static int append_extension_images(
                 size_t n) {
 
         _cleanup_strv_free_ char **overlays = NULL;
-        char **hierarchy;
         int r;
 
         assert(p);
@@ -1590,7 +1585,6 @@ static void normalize_mounts(const char *root_directory, MountEntry *mounts, siz
 }
 
 static int create_symlinks_from_tuples(const char *root, char **strv_symlinks) {
-        char **src, **dst;
         int r;
 
         STRV_FOREACH_PAIR(src, dst, strv_symlinks) {
diff --git a/src/core/service.c b/src/core/service.c
index 49579f7998..5d9464d588 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -2592,7 +2592,6 @@ static int service_serialize_exec_command(Unit *u, FILE *f, ExecCommand *command
         ServiceExecCommand id;
         size_t length = 0;
         unsigned idx;
-        char **arg;
 
         assert(s);
         assert(f);
@@ -4028,7 +4027,6 @@ static void service_notify_message(
         Service *s = SERVICE(u);
         bool notify_dbus = false;
         const char *e;
-        char * const *i;
         int r;
 
         assert(u);
diff --git a/src/core/socket.c b/src/core/socket.c
index 8a5c7fdd0a..8da9f14db6 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -781,8 +781,6 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) {
                 fprintf(f, "%sSocketProtocol: %s\n", prefix, str);
 
         if (!strv_isempty(s->symlinks)) {
-                char **q;
-
                 fprintf(f, "%sSymlinks:", prefix);
                 STRV_FOREACH(q, s->symlinks)
                         fprintf(f, " %s", *q);
@@ -924,7 +922,6 @@ static int instance_from_socket(int fd, unsigned nr, char **instance) {
 
 static void socket_close_fds(Socket *s) {
         SocketPort *p;
-        char **i;
 
         assert(s);
 
@@ -1271,7 +1268,6 @@ static int mq_address_create(
 
 static int socket_symlink(Socket *s) {
         const char *p;
-        char **i;
         int r;
 
         assert(s);
diff --git a/src/core/transaction.c b/src/core/transaction.c
index ebe5f1910d..32badaaef1 100644
--- a/src/core/transaction.c
+++ b/src/core/transaction.c
@@ -329,7 +329,7 @@ _pure_ static bool unit_matters_to_anchor(Unit *u, Job *j) {
 }
 
 static char* merge_unit_ids(const char* unit_log_field, char **pairs) {
-        char **unit_id, **job_type, *ans = NULL;
+        char *ans = NULL;
         size_t size = 0, next;
 
         STRV_FOREACH_PAIR(unit_id, job_type, pairs) {
@@ -366,7 +366,6 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi
         if (j->generation == generation) {
                 Job *k, *delete = NULL;
                 _cleanup_free_ char **array = NULL, *unit_ids = NULL;
-                char **unit_id, **job_type;
 
                 /* If the marker is NULL we have been here already and decided the job was loop-free from
                  * here. Hence shortcut things and return right-away. */
diff --git a/src/core/unit-serialize.c b/src/core/unit-serialize.c
index 7d2e6bc130..65ed110ce6 100644
--- a/src/core/unit-serialize.c
+++ b/src/core/unit-serialize.c
@@ -623,7 +623,7 @@ static void print_unit_dependency_mask(FILE *f, const char *kind, UnitDependency
 }
 
 void unit_dump(Unit *u, FILE *f, const char *prefix) {
-        char *t, **j;
+        char *t;
         const char *prefix2;
         Unit *following;
         _cleanup_set_free_ Set *following_set = NULL;
diff --git a/src/core/unit.c b/src/core/unit.c
index 3d30f3807c..6eaa553255 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -568,8 +568,6 @@ static void unit_clear_dependencies(Unit *u) {
 }
 
 static void unit_remove_transient(Unit *u) {
-        char **i;
-
         assert(u);
 
         if (!u->transient)
@@ -3594,7 +3592,6 @@ int unit_add_blockdev_dependency(Unit *u, const char *what, UnitDependencyMask m
 
 int unit_coldplug(Unit *u) {
         int r = 0, q;
-        char **i;
 
         assert(u);
 
@@ -3667,7 +3664,6 @@ static bool fragment_mtime_newer(const char *path, usec_t mtime, bool path_maske
 
 bool unit_need_daemon_reload(Unit *u) {
         _cleanup_strv_free_ char **t = NULL;
-        char **path;
 
         assert(u);
 
@@ -4251,7 +4247,6 @@ char* unit_escape_setting(const char *s, UnitWriteFlags flags, char **buf) {
 char* unit_concat_strv(char **l, UnitWriteFlags flags) {
         _cleanup_free_ char *result = NULL;
         size_t n = 0;
-        char **i;
 
         /* Takes a list of strings, escapes them, and concatenates them. This may be used to format command lines in a
          * way suitable for ExecStart= stanzas */
@@ -5052,7 +5047,6 @@ int unit_fork_and_watch_rm_rf(Unit *u, char **paths, pid_t *ret_pid) {
                 return r;
         if (r == 0) {
                 int ret = EXIT_SUCCESS;
-                char **i;
 
                 STRV_FOREACH(i, paths) {
                         r = rm_rf(*i, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_MISSING_OK);
diff --git a/src/coredump/coredumpctl.c b/src/coredump/coredumpctl.c
index 2904de3728..7235544285 100644
--- a/src/coredump/coredumpctl.c
+++ b/src/coredump/coredumpctl.c
@@ -91,7 +91,6 @@ static int add_match(sd_journal *j, const char *match) {
 }
 
 static int add_matches(sd_journal *j, char **matches) {
-        char **match;
         int r;
 
         r = sd_journal_add_match(j, "MESSAGE_ID=" SD_MESSAGE_COREDUMP_STR, 0);
diff --git a/src/creds/creds.c b/src/creds/creds.c
index 3d2841c07d..2fd314ff37 100644
--- a/src/creds/creds.c
+++ b/src/creds/creds.c
@@ -311,7 +311,6 @@ static int write_blob(FILE *f, const void *data, size_t size) {
 static int verb_cat(int argc, char **argv, void *userdata) {
         _cleanup_(closedirp) DIR *d = NULL;
         int r, ret = 0;
-        char **cn;
 
         r = open_credential_directory(&d);
         if (r == -ENXIO)
diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c
index c9bc9a2489..7f397f197f 100644
--- a/src/cryptenroll/cryptenroll.c
+++ b/src/cryptenroll/cryptenroll.c
@@ -482,7 +482,6 @@ static int prepare_luks(
 
                 for (;;) {
                         _cleanup_strv_free_erase_ char **passwords = NULL;
-                        char **p;
 
                         if (--i == 0)
                                 return log_error_errno(SYNTHETIC_ERRNO(ENOKEY),
diff --git a/src/cryptsetup/cryptsetup-keyfile.c b/src/cryptsetup/cryptsetup-keyfile.c
index 924555d262..1867e9012c 100644
--- a/src/cryptsetup/cryptsetup-keyfile.c
+++ b/src/cryptsetup/cryptsetup-keyfile.c
@@ -12,7 +12,6 @@ int find_key_file(
                 void **ret_key,
                 size_t *ret_key_size) {
 
-        char **i;
         int r;
 
         assert(key_file);
diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
index 250a8314f6..dddd976dc8 100644
--- a/src/cryptsetup/cryptsetup.c
+++ b/src/cryptsetup/cryptsetup.c
@@ -562,7 +562,7 @@ static int get_password(
 
         _cleanup_free_ char *friendly = NULL, *text = NULL, *disk_path = NULL;
         _cleanup_strv_free_erase_ char **passwords = NULL;
-        char **p, *id;
+        char *id;
         int r = 0;
         AskPasswordFlags flags = arg_ask_password_flags | ASK_PASSWORD_PUSH_CACHE;
 
@@ -851,7 +851,6 @@ static int attach_luks2_by_fido2(
 #if HAVE_LIBCRYPTSETUP_PLUGINS
         AskPasswordFlags flags = ASK_PASSWORD_PUSH_CACHE | ASK_PASSWORD_ACCEPT_CACHED;
         _cleanup_strv_free_erase_ char **pins = NULL;
-        char **p;
         int r;
 
         r = crypt_activate_by_token_pin(cd, name, "systemd-fido2", CRYPT_ANY_TOKEN, NULL, 0, usrptr, activation_flags);
@@ -1523,7 +1522,6 @@ static int attach_luks_or_plain_or_bitlk_by_passphrase(
                 uint32_t flags,
                 bool pass_volume_key) {
 
-        char **p;
         int r;
 
         assert(cd);
diff --git a/src/debug-generator/debug-generator.c b/src/debug-generator/debug-generator.c
index a724ae510d..e2e1df5715 100644
--- a/src/debug-generator/debug-generator.c
+++ b/src/debug-generator/debug-generator.c
@@ -89,7 +89,6 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
 }
 
 static int generate_mask_symlinks(void) {
-        char **u;
         int r = 0;
 
         if (strv_isempty(arg_mask))
@@ -112,7 +111,6 @@ static int generate_mask_symlinks(void) {
 }
 
 static int generate_wants_symlinks(void) {
-        char **u;
         int r = 0;
 
         if (strv_isempty(arg_wants))
diff --git a/src/delta/delta.c b/src/delta/delta.c
index 3f1b206e6c..eafe1c05c4 100644
--- a/src/delta/delta.c
+++ b/src/delta/delta.c
@@ -195,7 +195,6 @@ static int enumerate_dir_d(
         _cleanup_free_ char *unit = NULL;
         _cleanup_free_ char *path = NULL;
         _cleanup_strv_free_ char **list = NULL;
-        char **file;
         char *c;
         int r;
 
@@ -292,7 +291,6 @@ static int enumerate_dir(
         _cleanup_closedir_ DIR *d = NULL;
         _cleanup_strv_free_ char **files = NULL, **dirs = NULL;
         size_t n_files = 0, n_dirs = 0;
-        char **t;
         int r;
 
         assert(top);
diff --git a/src/dissect/dissect.c b/src/dissect/dissect.c
index a9632a3f16..1d78dc5085 100644
--- a/src/dissect/dissect.c
+++ b/src/dissect/dissect.c
@@ -354,7 +354,6 @@ static int parse_argv(int argc, char *argv[]) {
 
 static int strv_pair_to_json(char **l, JsonVariant **ret) {
         _cleanup_strv_free_ char **jl = NULL;
-        char **a, **b;
 
         STRV_FOREACH_PAIR(a, b, l) {
                 char *j;
@@ -371,8 +370,6 @@ static int strv_pair_to_json(char **l, JsonVariant **ret) {
 }
 
 static void strv_pair_print(char **l, const char *prefix) {
-        char **p, **q;
-
         assert(prefix);
 
         STRV_FOREACH_PAIR(p, q, l) {
diff --git a/src/environment-d-generator/environment-d-generator.c b/src/environment-d-generator/environment-d-generator.c
index 1171fdc290..39c46c7c2b 100644
--- a/src/environment-d-generator/environment-d-generator.c
+++ b/src/environment-d-generator/environment-d-generator.c
@@ -41,7 +41,6 @@ static int environment_dirs(char ***ret) {
 
 static int load_and_print(void) {
         _cleanup_strv_free_ char **dirs = NULL, **files = NULL, **env = NULL;
-        char **i;
         int r;
 
         r = environment_dirs(&dirs);
diff --git a/src/escape/escape.c b/src/escape/escape.c
index 676b7dce54..0ad77f3f94 100644
--- a/src/escape/escape.c
+++ b/src/escape/escape.c
@@ -155,7 +155,6 @@ static int parse_argv(int argc, char *argv[]) {
 }
 
 static int run(int argc, char *argv[]) {
-        char **i;
         int r;
 
         log_setup();
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 9b32383a76..355f2b8668 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -237,7 +237,6 @@ static int write_dependency(
 
         _cleanup_strv_free_ char **names = NULL, **units = NULL;
         _cleanup_free_ char *res = NULL;
-        char **s;
         int r;
 
         assert(f);
@@ -518,8 +517,6 @@ static int add_mount(
                         if (r < 0)
                                 return r;
                 } else {
-                        char **s;
-
                         STRV_FOREACH(s, wanted_by) {
                                 r = generator_add_symlink(dest, *s, "wants", name);
                                 if (r < 0)
diff --git a/src/home/homectl.c b/src/home/homectl.c
index ac7b00889d..4aeaaf6b9a 100644
--- a/src/home/homectl.c
+++ b/src/home/homectl.c
@@ -554,7 +554,6 @@ static int acquire_passed_secrets(const char *user_name, UserRecord **ret) {
 static int activate_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -603,7 +602,6 @@ static int activate_home(int argc, char *argv[], void *userdata) {
 static int deactivate_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -690,7 +688,7 @@ static int inspect_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(strv_freep) char **mangled_list = NULL;
         int r, ret = 0;
-        char **items, **i;
+        char **items;
 
         pager_open(arg_pager_flags);
 
@@ -774,7 +772,7 @@ static int authenticate_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_(strv_freep) char **mangled_list = NULL;
         int r, ret = 0;
-        char **i, **items;
+        char **items;
 
         items = mangle_user_list(strv_skip(argv, 1), &mangled_list);
         if (!items)
@@ -1084,7 +1082,6 @@ static int add_disposition(JsonVariant **v) {
 static int acquire_new_home_record(UserRecord **ret) {
         _cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
-        char **i;
         int r;
 
         assert(ret);
@@ -1375,7 +1372,6 @@ static int create_home(int argc, char *argv[], void *userdata) {
 static int remove_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -1413,7 +1409,6 @@ static int acquire_updated_home_record(
 
         _cleanup_(json_variant_unrefp) JsonVariant *json = NULL;
         _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
-        char **i;
         int r;
 
         assert(ret);
@@ -1863,7 +1858,6 @@ static int resize_home(int argc, char *argv[], void *userdata) {
 static int lock_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
@@ -1895,7 +1889,6 @@ static int lock_home(int argc, char *argv[], void *userdata) {
 static int unlock_home(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         int r, ret = 0;
-        char **i;
 
         r = acquire_bus(&bus);
         if (r < 0)
diff --git a/src/home/homed-manager-bus.c b/src/home/homed-manager-bus.c
index 47eb287aa9..ba5ca42ed3 100644
--- a/src/home/homed-manager-bus.c
+++ b/src/home/homed-manager-bus.c
@@ -39,7 +39,6 @@ static int property_get_auto_login(
         HASHMAP_FOREACH(h, m->homes_by_name) {
                 _cleanup_(strv_freep) char **seats = NULL;
                 _cleanup_free_ char *home_path = NULL;
-                char **s;
 
                 r = home_auto_login(h, &seats);
                 if (r < 0) {
diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c
index a02248a6de..f04b87e366 100644
--- a/src/home/homed-manager.c
+++ b/src/home/homed-manager.c
@@ -1553,7 +1553,6 @@ static int manager_load_public_key_one(Manager *m, const char *path) {
 
 static int manager_load_public_keys(Manager *m) {
         _cleanup_strv_free_ char **files = NULL;
-        char **i;
         int r;
 
         assert(m);
diff --git a/src/home/homed-varlink.c b/src/home/homed-varlink.c
index 96a6ea754e..3dd5a14802 100644
--- a/src/home/homed-varlink.c
+++ b/src/home/homed-varlink.c
@@ -282,7 +282,6 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet
 
         if (p.user_name) {
                 const char *last = NULL;
-                char **i;
 
                 h = hashmap_get(m->homes_by_name, p.user_name);
                 if (!h)
@@ -335,9 +334,7 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet
         } else {
                 const char *last_user_name = NULL, *last_group_name = NULL;
 
-                HASHMAP_FOREACH(h, m->homes_by_name) {
-                        char **j;
-
+                HASHMAP_FOREACH(h, m->homes_by_name)
                         STRV_FOREACH(j, h->record->member_of) {
 
                                 if (last_user_name) {
@@ -353,7 +350,6 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet
                                 last_user_name = h->user_name;
                                 last_group_name = *j;
                         }
-                }
 
                 if (last_user_name) {
                         assert(last_group_name);
diff --git a/src/home/homework-cifs.c b/src/home/homework-cifs.c
index ed06d1f221..6d499f76b2 100644
--- a/src/home/homework-cifs.c
+++ b/src/home/homework-cifs.c
@@ -20,7 +20,6 @@ int home_setup_cifs(
                 HomeSetup *setup) {
 
         _cleanup_free_ char *chost = NULL, *cservice = NULL, *cdir = NULL, *chost_and_service = NULL, *j = NULL;
-        char **pw;
         int r;
 
         assert(h);
diff --git a/src/home/homework-fscrypt.c b/src/home/homework-fscrypt.c
index f9fef73f75..afa706a1bf 100644
--- a/src/home/homework-fscrypt.c
+++ b/src/home/homework-fscrypt.c
@@ -197,7 +197,6 @@ static int fscrypt_slot_try_many(
                 const uint8_t match_key_descriptor[static FS_KEY_DESCRIPTOR_SIZE],
                 void **ret_decrypted, size_t *ret_decrypted_size) {
 
-        char **i;
         int r;
 
         STRV_FOREACH(i, passwords) {
@@ -499,7 +498,6 @@ int home_create_fscrypt(
         _cleanup_free_ char *d = NULL;
         uint32_t nr = 0;
         const char *ip;
-        char **i;
         int r;
 
         assert(h);
@@ -649,7 +647,6 @@ int home_passwd_fscrypt(
         size_t volume_key_size = 0;
         uint32_t slot = 0;
         const char *xa;
-        char **p;
         int r;
 
         assert(h);
diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c
index 8063206358..f8f4afb253 100644
--- a/src/home/homework-luks.c
+++ b/src/home/homework-luks.c
@@ -303,7 +303,6 @@ static int luks_try_passwords(
                 size_t *volume_key_size,
                 key_serial_t *ret_key_serial) {
 
-        char **pp;
         int r;
 
         assert(h);
@@ -1721,7 +1720,6 @@ static int luks_format(
         _cleanup_free_ char *text = NULL;
         size_t volume_key_size;
         int slot = 0, r;
-        char **pp;
 
         assert(node);
         assert(dm_name);
@@ -3664,7 +3662,6 @@ static int luks_try_resume(
                 const char *dm_name,
                 char **password) {
 
-        char **pp;
         int r;
 
         assert(cd);
diff --git a/src/home/homework-pkcs11.c b/src/home/homework-pkcs11.c
index 15402b1002..7868fb6064 100644
--- a/src/home/homework-pkcs11.c
+++ b/src/home/homework-pkcs11.c
@@ -20,7 +20,6 @@ int pkcs11_callback(
         CK_TOKEN_INFO updated_token_info;
         size_t decrypted_key_size;
         CK_OBJECT_HANDLE object;
-        char **i;
         CK_RV rv;
         int r;
 
diff --git a/src/home/homework.c b/src/home/homework.c
index 9fdc74b775..0014a7f598 100644
--- a/src/home/homework.c
+++ b/src/home/homework.c
@@ -97,9 +97,7 @@ int user_record_authenticate(
                 log_info("None of the supplied plaintext passwords unlock the user record's hashed recovery keys.");
 
         /* Second, test cached PKCS#11 passwords */
-        for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) {
-                char **pp;
-
+        for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++)
                 STRV_FOREACH(pp, cache->pkcs11_passwords) {
                         r = test_password_one(h->pkcs11_encrypted_key[n].hashed_password, *pp);
                         if (r < 0)
@@ -109,12 +107,9 @@ int user_record_authenticate(
                                 return 1;
                         }
                 }
-        }
 
         /* Third, test cached FIDO2 passwords */
-        for (size_t n = 0; n < h->n_fido2_hmac_salt; n++) {
-                char **pp;
-
+        for (size_t n = 0; n < h->n_fido2_hmac_salt; n++)
                 /* See if any of the previously calculated passwords work */
                 STRV_FOREACH(pp, cache->fido2_passwords) {
                         r = test_password_one(h->fido2_hmac_salt[n].hashed_password, *pp);
@@ -125,7 +120,6 @@ int user_record_authenticate(
                                 return 1;
                         }
                 }
-        }
 
         /* Fourth, let's see if any of the PKCS#11 security tokens are plugged in and help us */
         for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) {
@@ -1096,7 +1090,6 @@ static int user_record_compile_effective_passwords(
 
         _cleanup_(strv_free_erasep) char **effective = NULL;
         size_t n;
-        char **i;
         int r;
 
         assert(h);
@@ -1116,7 +1109,6 @@ static int user_record_compile_effective_passwords(
 
         STRV_FOREACH(i, h->hashed_password) {
                 bool found = false;
-                char **j;
 
                 log_debug("Looking for plaintext password for: %s", *i);
 
@@ -1144,7 +1136,6 @@ static int user_record_compile_effective_passwords(
 
         for (n = 0; n < h->n_recovery_key; n++) {
                 bool found = false;
-                char **j;
 
                 log_debug("Looking for plaintext recovery key for: %s", h->recovery_key[n].hashed_password);
 
diff --git a/src/home/user-record-pwquality.c b/src/home/user-record-pwquality.c
index 23c3357836..609e620511 100644
--- a/src/home/user-record-pwquality.c
+++ b/src/home/user-record-pwquality.c
@@ -17,7 +17,7 @@ int user_record_quality_check_password(
                 sd_bus_error *error) {
 
         _cleanup_(sym_pwquality_free_settingsp) pwquality_settings_t *pwq = NULL;
-        char buf[PWQ_MAX_ERROR_MESSAGE_LEN], **pp;
+        char buf[PWQ_MAX_ERROR_MESSAGE_LEN];
         void *auxerror;
         int r;
 
@@ -37,7 +37,6 @@ int user_record_quality_check_password(
         /* Iterate through all new passwords */
         STRV_FOREACH(pp, secret->password) {
                 bool called = false;
-                char **old;
 
                 r = test_password_many(hr->hashed_password, *pp);
                 if (r < 0)
diff --git a/src/home/user-record-util.c b/src/home/user-record-util.c
index f4578783f3..1ae3e82bce 100644
--- a/src/home/user-record-util.c
+++ b/src/home/user-record-util.c
@@ -563,7 +563,6 @@ int user_record_test_image_path_and_warn(UserRecord *h) {
 }
 
 int user_record_test_password(UserRecord *h, UserRecord *secret) {
-        char **i;
         int r;
 
         assert(h);
@@ -585,7 +584,6 @@ int user_record_test_password(UserRecord *h, UserRecord *secret) {
 }
 
 int user_record_test_recovery_key(UserRecord *h, UserRecord *secret) {
-        char **i;
         int r;
 
         assert(h);
@@ -779,7 +777,6 @@ int user_record_update_last_changed(UserRecord *h, bool with_password) {
 int user_record_make_hashed_password(UserRecord *h, char **secret, bool extend) {
         _cleanup_(json_variant_unrefp) JsonVariant *priv = NULL;
         _cleanup_strv_free_ char **np = NULL;
-        char **i;
         int r;
 
         assert(h);
diff --git a/src/id128/id128.c b/src/id128/id128.c
index 484a72677d..6f4d65103c 100644
--- a/src/id128/id128.c
+++ b/src/id128/id128.c
@@ -102,7 +102,6 @@ static int show_one(Table **table, const char *name, sd_id128_t uuid, bool first
 
 static int verb_show(int argc, char **argv, void *userdata) {
         _cleanup_(table_unrefp) Table *table = NULL;
-        char **p;
         int r;
 
         argv = strv_skip(argv, 1);
diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c
index 6ab91263b1..13ca22ef26 100644
--- a/src/journal-remote/journal-remote-main.c
+++ b/src/journal-remote/journal-remote-main.c
@@ -594,7 +594,6 @@ static int create_remoteserver(
                 const char* trust) {
 
         int r, n, fd;
-        char **file;
 
         r = journal_remote_server_init(s, arg_output, arg_split_mode, arg_compress, arg_seal);
         if (r < 0)
diff --git a/src/journal-remote/microhttpd-util.c b/src/journal-remote/microhttpd-util.c
index e6a8254491..a8119bd687 100644
--- a/src/journal-remote/microhttpd-util.c
+++ b/src/journal-remote/microhttpd-util.c
@@ -151,18 +151,17 @@ static int log_enable_gnutls_category(const char *cat) {
 }
 
 int setup_gnutls_logger(char **categories) {
-        char **cat;
         int r;
 
         gnutls_global_set_log_function(log_func_gnutls);
 
-        if (categories) {
+        if (categories)
                 STRV_FOREACH(cat, categories) {
                         r = log_enable_gnutls_category(*cat);
                         if (r < 0)
                                 return r;
                 }
-        } else
+        else
                 log_reset_gnutls_level();
 
         return 0;
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 3c4a7c0a7a..6353c77c91 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -1139,7 +1139,6 @@ static int parse_argv(int argc, char *argv[]) {
 }
 
 static int add_matches(sd_journal *j, char **args) {
-        char **i;
         bool have_term = false;
 
         assert(j);
@@ -1562,7 +1561,7 @@ static int get_possible_units(
                         return r;
 
                 SD_JOURNAL_FOREACH_UNIQUE(j, data, size) {
-                        char **pattern, *eq;
+                        char *eq;
                         size_t prefix;
                         _cleanup_free_ char *u = NULL;
 
@@ -1615,7 +1614,6 @@ static int get_possible_units(
 static int add_units(sd_journal *j) {
         _cleanup_strv_free_ char **patterns = NULL;
         int r, count = 0;
-        char **i;
 
         assert(j);
 
@@ -1760,7 +1758,6 @@ static int add_facilities(sd_journal *j) {
 
 static int add_syslog_identifier(sd_journal *j) {
         int r;
-        char **i;
 
         assert(j);
 
diff --git a/src/libsystemd-network/dhcp-option.c b/src/libsystemd-network/dhcp-option.c
index ebe8eecc9d..efb676e60b 100644
--- a/src/libsystemd-network/dhcp-option.c
+++ b/src/libsystemd-network/dhcp-option.c
@@ -58,7 +58,6 @@ static int option_append(uint8_t options[], size_t size, size_t *offset,
 
         case SD_DHCP_OPTION_USER_CLASS: {
                 size_t total = 0;
-                char **s;
 
                 if (strv_isempty((char **) optval))
                         return -EINVAL;
diff --git a/src/libsystemd-network/dhcp6-option.c b/src/libsystemd-network/dhcp6-option.c
index 28fe036a40..8b2ecfc44b 100644
--- a/src/libsystemd-network/dhcp6-option.c
+++ b/src/libsystemd-network/dhcp6-option.c
@@ -468,7 +468,6 @@ int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn) {
 int dhcp6_option_append_user_class(uint8_t **buf, size_t *buflen, char * const *user_class) {
         _cleanup_free_ uint8_t *p = NULL;
         size_t total = 0, offset = 0;
-        char * const *s;
 
         assert(buf);
         assert(*buf);
@@ -501,7 +500,6 @@ int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *buflen, char * const
         _cleanup_free_ uint8_t *p = NULL;
         uint32_t enterprise_identifier;
         size_t total, offset;
-        char * const *s;
 
         assert(buf);
         assert(*buf);
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index c33be947b7..1c34893de6 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -612,7 +612,6 @@ int sd_dhcp_client_set_user_class(
                 sd_dhcp_client *client,
                 char * const *user_class) {
 
-        char * const *p;
         char **s = NULL;
 
         assert_return(client, -EINVAL);
diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c
index 706904c720..122c878a66 100644
--- a/src/libsystemd-network/sd-dhcp6-client.c
+++ b/src/libsystemd-network/sd-dhcp6-client.c
@@ -510,7 +510,6 @@ int sd_dhcp6_client_set_request_mud_url(sd_dhcp6_client *client, const char *mud
 }
 
 int sd_dhcp6_client_set_request_user_class(sd_dhcp6_client *client, char * const *user_class) {
-        char * const *p;
         char **s;
 
         assert_return(client, -EINVAL);
@@ -532,7 +531,6 @@ int sd_dhcp6_client_set_request_user_class(sd_dhcp6_client *client, char * const
 }
 
 int sd_dhcp6_client_set_request_vendor_class(sd_dhcp6_client *client, char * const *vendor_class) {
-        char * const *p;
         char **s;
 
         assert_return(client, -EINVAL);
diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c
index e332f6a2ab..26f782208e 100644
--- a/src/libsystemd-network/sd-radv.c
+++ b/src/libsystemd-network/sd-radv.c
@@ -800,7 +800,6 @@ int sd_radv_set_dnssl(sd_radv *ra, uint32_t lifetime,
                                char **search_list) {
         _cleanup_free_ struct sd_radv_opt_dns *opt_dnssl = NULL;
         size_t len = 0;
-        char **s;
         uint8_t *p;
 
         assert_return(ra, -EINVAL);
diff --git a/src/libsystemd/sd-bus/bus-dump.c b/src/libsystemd/sd-bus/bus-dump.c
index 0a4b3cbf68..42790ee3b4 100644
--- a/src/libsystemd/sd-bus/bus-dump.c
+++ b/src/libsystemd/sd-bus/bus-dump.c
@@ -412,8 +412,6 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f, bool terse) {
 
         r = sd_bus_creds_get_cmdline(c, &cmdline);
         if (r >= 0) {
-                char **i;
-
                 fprintf(f, "%sCommandLine=%s", prefix, color);
                 STRV_FOREACH(i, cmdline) {
                         if (i != cmdline)
@@ -478,8 +476,6 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f, bool terse) {
                 fprintf(f, "%sUniqueName=%s%s%s", prefix, color, c->unique_name, suffix);
 
         if (sd_bus_creds_get_well_known_names(c, &well_known) >= 0) {
-                char **i;
-
                 fprintf(f, "%sWellKnownNames=%s", prefix, color);
                 STRV_FOREACH(i, well_known) {
                         if (i != well_known)
diff --git a/src/libsystemd/sd-bus/bus-match.c b/src/libsystemd/sd-bus/bus-match.c
index 12a50845db..d4da60717e 100644
--- a/src/libsystemd/sd-bus/bus-match.c
+++ b/src/libsystemd/sd-bus/bus-match.c
@@ -139,8 +139,6 @@ static bool value_node_test(
                         return true;
 
                 if (m->creds.mask & SD_BUS_CREDS_WELL_KNOWN_NAMES) {
-                        char **i;
-
                         /* on kdbus we have the well known names list
                          * in the credentials, let's make use of that
                          * for an accurate match */
@@ -174,8 +172,6 @@ static bool value_node_test(
                 return false;
 
         case BUS_MATCH_ARG_HAS ... BUS_MATCH_ARG_HAS_LAST: {
-                char **i;
-
                 STRV_FOREACH(i, value_strv)
                         if (streq_ptr(node->value.str, *i))
                                 return true;
@@ -386,8 +382,6 @@ int bus_match_run(
                 if (test_str)
                         found = hashmap_get(node->compare.children, test_str);
                 else if (test_strv) {
-                        char **i;
-
                         STRV_FOREACH(i, test_strv) {
                                 found = hashmap_get(node->compare.children, *i);
                                 if (found) {
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
index 96529b422b..b77372c3a0 100644
--- a/src/libsystemd/sd-bus/bus-message.c
+++ b/src/libsystemd/sd-bus/bus-message.c
@@ -2815,7 +2815,6 @@ _public_ int sd_bus_message_append_string_memfd(
 }
 
 _public_ int sd_bus_message_append_strv(sd_bus_message *m, char **l) {
-        char **i;
         int r;
 
         assert_return(m, -EINVAL);
diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
index 40158a7326..35546afebc 100644
--- a/src/libsystemd/sd-bus/bus-objects.c
+++ b/src/libsystemd/sd-bus/bus-objects.c
@@ -109,7 +109,7 @@ static int add_enumerated_to_set(
         assert(s);
 
         LIST_FOREACH(enumerators, c, first) {
-                char **children = NULL, **k;
+                char **children = NULL;
                 sd_bus_slot *slot;
 
                 if (bus->nodes_modified)
@@ -2072,7 +2072,6 @@ static int emit_properties_changed_on_interface(
         struct vtable_member key = {};
         struct node_vtable *c;
         struct node *n;
-        char **property;
         void *u = NULL;
         int r;
 
@@ -2854,7 +2853,6 @@ static int interfaces_added_append_one(
 _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, char **interfaces) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
         struct node *object_manager;
-        char **i;
         int r;
 
         assert_return(bus, -EINVAL);
diff --git a/src/libsystemd/sd-bus/test-bus-address.c b/src/libsystemd/sd-bus/test-bus-address.c
index 59421094c5..6de9f7cd57 100644
--- a/src/libsystemd/sd-bus/test-bus-address.c
+++ b/src/libsystemd/sd-bus/test-bus-address.c
@@ -27,7 +27,6 @@ static void test_bus_set_address_system_remote(char **args) {
 
         assert_se(sd_bus_new(&b) >= 0);
         if (!strv_isempty(args)) {
-                char **a;
                 STRV_FOREACH(a, args)
                         test_one_address(b, *a, 0, NULL);
                 return;
diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c
index 37eda23a5f..d3898ba959 100644
--- a/src/libsystemd/sd-device/device-private.c
+++ b/src/libsystemd/sd-device/device-private.c
@@ -429,7 +429,6 @@ static int device_verify(sd_device *device) {
 
 int device_new_from_strv(sd_device **ret, char **strv) {
         _cleanup_(sd_device_unrefp) sd_device *device = NULL;
-        char **key;
         const char *major = NULL, *minor = NULL;
         int r;
 
diff --git a/src/libsystemd/sd-journal/catalog.c b/src/libsystemd/sd-journal/catalog.c
index 4a2ba02ad0..d9ba9d11d3 100644
--- a/src/libsystemd/sd-journal/catalog.c
+++ b/src/libsystemd/sd-journal/catalog.c
@@ -442,7 +442,6 @@ error:
 
 int catalog_update(const char* database, const char* root, const char* const* dirs) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         _cleanup_(strbuf_freep) struct strbuf *sb = NULL;
         _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL;
         _cleanup_free_ CatalogItem *items = NULL;
@@ -709,7 +708,6 @@ int catalog_list(FILE *f, const char *database, bool oneline) {
 }
 
 int catalog_list_items(FILE *f, const char *database, bool oneline, char **items) {
-        char **item;
         int r = 0;
 
         STRV_FOREACH(item, items) {
diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c
index 7a6cc4aca3..ecd755c705 100644
--- a/src/libsystemd/sd-journal/sd-journal.c
+++ b/src/libsystemd/sd-journal/sd-journal.c
@@ -2029,7 +2029,6 @@ _public_ int sd_journal_open_directory(sd_journal **ret, const char *path, int f
 
 _public_ int sd_journal_open_files(sd_journal **ret, const char **paths, int flags) {
         _cleanup_(sd_journal_closep) sd_journal *j = NULL;
-        const char **path;
         int r;
 
         assert_return(ret, -EINVAL);
diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c
index 182c74ed3d..469076ae23 100644
--- a/src/libsystemd/sd-netlink/netlink-message.c
+++ b/src/libsystemd/sd-netlink/netlink-message.c
@@ -258,7 +258,6 @@ int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type,
 
 int sd_netlink_message_append_strv(sd_netlink_message *m, unsigned short type, char * const *data) {
         size_t length, size;
-        char * const *p;
         int r;
 
         assert_return(m, -EINVAL);
diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c
index ff1e0d5f8e..8d9cfbc0af 100644
--- a/src/libsystemd/sd-path/sd-path.c
+++ b/src/libsystemd/sd-path/sd-path.c
@@ -669,7 +669,7 @@ _public_ int sd_path_lookup_strv(uint64_t type, const char *suffix, char ***path
         if (!n)
                 return -ENOMEM;
 
-        char **i, **j = n;
+        char **j = n;
         STRV_FOREACH(i, l) {
                 *j = path_join(*i, suffix);
                 if (!*j)
diff --git a/src/locale/localectl.c b/src/locale/localectl.c
index b5624209dc..661d54c27d 100644
--- a/src/locale/localectl.c
+++ b/src/locale/localectl.c
@@ -98,8 +98,6 @@ static void print_status_info(StatusInfo *i) {
         if (strv_isempty(i->locale))
                 puts("   System Locale: n/a");
         else {
-                char **j;
-
                 printf("   System Locale: %s\n", i->locale[0]);
                 STRV_FOREACH(j, i->locale + 1)
                         printf("                  %s\n", *j);
diff --git a/src/locale/localed.c b/src/locale/localed.c
index f3e6ef2db1..89bf9c6fba 100644
--- a/src/locale/localed.c
+++ b/src/locale/localed.c
@@ -346,7 +346,6 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er
         Context *c = userdata;
         bool modified = false;
         int interactive, r;
-        char **i;
         bool use_localegen;
 
         assert(m);
diff --git a/src/login/loginctl.c b/src/login/loginctl.c
index 3e1916725d..4198f13f00 100644
--- a/src/login/loginctl.c
+++ b/src/login/loginctl.c
@@ -601,7 +601,6 @@ static int print_user_status_info(sd_bus *bus, const char *path, bool *new_line)
                 printf("\t   State: %s\n", i.state);
 
         if (!strv_isempty(i.sessions)) {
-                char **l;
                 printf("\tSessions:");
 
                 STRV_FOREACH(l, i.sessions)
@@ -662,7 +661,6 @@ static int print_seat_status_info(sd_bus *bus, const char *path, bool *new_line)
         printf("%s\n", strna(i.id));
 
         if (!strv_isempty(i.sessions)) {
-                char **l;
                 printf("\tSessions:");
 
                 STRV_FOREACH(l, i.sessions) {
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
index c05c0d02cc..31a41bd271 100644
--- a/src/login/logind-dbus.c
+++ b/src/login/logind-dbus.c
@@ -3947,7 +3947,6 @@ int manager_start_scope(
                 char **job) {
 
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
-        char **i;
         int r;
 
         assert(manager);
diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c
index 5bd7efc3e8..2047dc1817 100644
--- a/src/login/pam_systemd.c
+++ b/src/login/pam_systemd.c
@@ -533,7 +533,6 @@ static int pam_putenv_and_log(pam_handle_t *handle, const char *e, bool debug) {
 }
 
 static int apply_user_record_settings(pam_handle_t *handle, UserRecord *ur, bool debug) {
-        char **i;
         int r;
 
         assert(handle);
diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c
index eda847cb4a..9e20d59389 100644
--- a/src/modules-load/modules-load.c
+++ b/src/modules-load/modules-load.c
@@ -194,7 +194,6 @@ static int run(int argc, char *argv[]) {
 
         } else {
                 _cleanup_strv_free_ char **files = NULL;
-                char **fn, **i;
 
                 STRV_FOREACH(i, arg_proc_cmdline_modules) {
                         k = module_load_and_warn(ctx, *i, true);
diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c
index c081ec673c..7d7f35253b 100644
--- a/src/network/generator/network-generator.c
+++ b/src/network/generator/network-generator.c
@@ -1132,7 +1132,6 @@ void network_dump(Network *network, FILE *f) {
         Address *address;
         Route *route;
         const char *dhcp;
-        char **dns;
 
         assert(network);
         assert(f);
diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c
index 8e7fe11c18..7b15c281e3 100644
--- a/src/network/netdev/netdev.c
+++ b/src/network/netdev/netdev.c
@@ -866,7 +866,6 @@ int netdev_load_one(Manager *manager, const char *filename) {
 
 int netdev_load(Manager *manager, bool reload) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         assert(manager);
diff --git a/src/network/networkctl.c b/src/network/networkctl.c
index c35f851bdb..3eb63efa9c 100644
--- a/src/network/networkctl.c
+++ b/src/network/networkctl.c
@@ -525,7 +525,6 @@ static int decode_link(sd_netlink_message *m, LinkInfo *info, char **patterns, b
                 if (!strv_fnmatch_full(patterns, str, 0, &pos) &&
                     !strv_fnmatch_full(patterns, name, 0, &pos)) {
                         bool match = false;
-                        char **p;
 
                         STRV_FOREACH(p, altnames)
                                 if (strv_fnmatch_full(patterns, *p, 0, &pos)) {
diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c
index 9acfd17d49..41c8122b5a 100644
--- a/src/network/networkd-dhcp-server.c
+++ b/src/network/networkd-dhcp-server.c
@@ -206,8 +206,6 @@ static int link_push_uplink_to_dhcp_server(
                 break;
 
         case SD_DHCP_LEASE_NTP: {
-                char **i;
-
                 /* For NTP things are similar, but for NTP hostnames can be configured too, which we cannot
                  * propagate via DHCP. Hence let's only propagate those which are IP addresses. */
 
diff --git a/src/network/networkd-json.c b/src/network/networkd-json.c
index fb1f50063e..dc9823c375 100644
--- a/src/network/networkd-json.c
+++ b/src/network/networkd-json.c
@@ -699,7 +699,6 @@ static int server_build_json_one_string(const char *str, NetworkConfigSource s,
 static int ntp_build_json(Link *link, JsonVariant **ret) {
         JsonVariant **elements = NULL;
         size_t n = 0;
-        char **p;
         int r;
 
         assert(link);
@@ -878,7 +877,7 @@ static int domains_build_json(Link *link, bool is_route, JsonVariant **ret) {
         JsonVariant **elements = NULL;
         DHCPUseDomains use_domains;
         union in_addr_union s;
-        char **p, **domains;
+        char **domains;
         const char *domain;
         size_t n = 0;
         int r;
diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c
index 765733b38c..4173eaa15f 100644
--- a/src/network/networkd-link-bus.c
+++ b/src/network/networkd-link-bus.c
@@ -81,7 +81,6 @@ int bus_link_method_set_ntp_servers(sd_bus_message *message, void *userdata, sd_
         _cleanup_strv_free_ char **ntp = NULL;
         Link *l = userdata;
         int r;
-        char **i;
 
         assert(message);
         assert(l);
@@ -484,7 +483,6 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
         _cleanup_strv_free_ char **ntas = NULL;
         Link *l = userdata;
         int r;
-        char **i;
 
         assert(message);
         assert(l);
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 7bc391d68d..f409d1f33a 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -998,8 +998,6 @@ static void link_drop_requests(Link *link) {
 }
 
 static Link *link_drop(Link *link) {
-        char **n;
-
         if (!link)
                 return NULL;
 
@@ -2280,7 +2278,6 @@ static int link_update_mtu(Link *link, sd_netlink_message *message) {
 
 static int link_update_alternative_names(Link *link, sd_netlink_message *message) {
         _cleanup_strv_free_ char **altnames = NULL;
-        char **n;
         int r;
 
         assert(link);
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index f616f2c9bc..3be078b179 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -786,7 +786,6 @@ static int ndisc_router_process_dnssl(Link *link, sd_ndisc_router *rt) {
         struct in6_addr router;
         uint32_t lifetime_sec;
         bool updated = false;
-        char **j;
         int r;
 
         assert(link);
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index 873ad2e703..03f09d730f 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -573,7 +573,6 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
 
 int network_load(Manager *manager, OrderedHashmap **networks) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         assert(manager);
diff --git a/src/nspawn/nspawn-bind-user.c b/src/nspawn/nspawn-bind-user.c
index d3113c303e..c9386e91f7 100644
--- a/src/nspawn/nspawn-bind-user.c
+++ b/src/nspawn/nspawn-bind-user.c
@@ -203,7 +203,6 @@ int bind_user_prepare(
 
         _cleanup_(bind_user_context_freep) BindUserContext *c = NULL;
         uid_t current_uid = MAP_UID_START;
-        char **n;
         int r;
 
         assert(custom_mounts);
diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c
index 678fde3669..4379bd9b37 100644
--- a/src/nspawn/nspawn-mount.c
+++ b/src/nspawn/nspawn-mount.c
@@ -166,8 +166,6 @@ int custom_mount_prepare_all(const char *dest, CustomMount *l, size_t n) {
                 }
 
                 if (m->type == CUSTOM_MOUNT_OVERLAY) {
-                        char **j;
-
                         STRV_FOREACH(j, m->lower) {
                                 char *s;
 
@@ -319,8 +317,6 @@ int overlay_mount_parse(CustomMount **l, size_t *n, const char *s, bool read_onl
                 if (!destination)
                         return -ENOMEM;
         } else {
-                char **i;
-
                 /* If more than two parameters are specified, the last one is the destination, the second to last one
                  * the "upper", and all before that the "lower" directories. */
 
diff --git a/src/nspawn/nspawn-network.c b/src/nspawn/nspawn-network.c
index 023b1e7e1a..fab4eb9609 100644
--- a/src/nspawn/nspawn-network.c
+++ b/src/nspawn/nspawn-network.c
@@ -288,7 +288,6 @@ int setup_veth_extra(
 
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         uint64_t idx = 0;
-        char **a, **b;
         int r;
 
         assert(machine_name);
@@ -495,7 +494,6 @@ int test_network_interface_initialized(const char *name) {
 
 int move_network_interfaces(int netns_fd, char **ifaces) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        char **i;
         int r;
 
         if (strv_isempty(ifaces))
@@ -532,7 +530,6 @@ int move_network_interfaces(int netns_fd, char **ifaces) {
 int setup_macvlan(const char *machine_name, pid_t pid, char **ifaces) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
         unsigned idx = 0;
-        char **i;
         int r;
 
         if (strv_isempty(ifaces))
@@ -619,7 +616,6 @@ int setup_macvlan(const char *machine_name, pid_t pid, char **ifaces) {
 
 int setup_ipvlan(const char *machine_name, pid_t pid, char **ifaces) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        char **i;
         int r;
 
         if (strv_isempty(ifaces))
@@ -728,7 +724,6 @@ int veth_extra_parse(char ***l, const char *p) {
 
 int remove_veth_links(const char *primary, char **pairs) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        char **a, **b;
         int r;
 
         /* In some cases the kernel might pin the veth links between host and container even after the namespace
diff --git a/src/nspawn/nspawn-oci.c b/src/nspawn/nspawn-oci.c
index 9e59d6a814..afdac67427 100644
--- a/src/nspawn/nspawn-oci.c
+++ b/src/nspawn/nspawn-oci.c
@@ -1892,7 +1892,6 @@ static int oci_seccomp_syscalls(const char *name, JsonVariant *v, JsonDispatchFl
                 struct syscall_rule rule = {
                         .action = UINT32_MAX,
                 };
-                char **i;
 
                 r = json_dispatch(e, table, oci_unexpected, flags, &rule);
                 if (r < 0)
diff --git a/src/nspawn/nspawn-seccomp.c b/src/nspawn/nspawn-seccomp.c
index c94512ef30..77f4c2ac88 100644
--- a/src/nspawn/nspawn-seccomp.c
+++ b/src/nspawn/nspawn-seccomp.c
@@ -140,7 +140,6 @@ static int add_syscall_filters(
         };
 
         _cleanup_strv_free_ char **added = NULL;
-        char **p;
         int r;
 
         for (size_t i = 0; i < ELEMENTSOF(allow_list); i++) {
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 1333a8702a..dd1cdb74b7 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -3149,7 +3149,6 @@ static int patch_sysctl(void) {
         };
 
         unsigned long flags;
-        char **k, **v;
         int r;
 
         flags = effective_clone_ns_flags();
diff --git a/src/nss-systemd/userdb-glue.c b/src/nss-systemd/userdb-glue.c
index 002e6925f9..c69667d660 100644
--- a/src/nss-systemd/userdb-glue.c
+++ b/src/nss-systemd/userdb-glue.c
@@ -217,7 +217,7 @@ int nss_pack_group_record(
                 char *buffer,
                 size_t buflen) {
 
-        char **array = NULL, *p, **m;
+        char **array = NULL, *p;
         size_t required, n = 0, i = 0;
 
         assert(g);
diff --git a/src/partition/repart.c b/src/partition/repart.c
index 509cf69b5d..2f70796e58 100644
--- a/src/partition/repart.c
+++ b/src/partition/repart.c
@@ -1404,7 +1404,6 @@ static int context_read_definitions(
 
         _cleanup_strv_free_ char **files = NULL;
         Partition *last = NULL;
-        char **f;
         int r;
 
         assert(context);
@@ -2832,7 +2831,6 @@ static int context_copy_blocks(Context *context) {
 }
 
 static int do_copy_files(Partition *p, const char *fs) {
-        char **source, **target;
         int r;
 
         assert(p);
@@ -2929,7 +2927,6 @@ static int do_copy_files(Partition *p, const char *fs) {
 }
 
 static int do_make_directories(Partition *p, const char *fs) {
-        char **d;
         int r;
 
         assert(p);
diff --git a/src/portable/portable.c b/src/portable/portable.c
index bdc10da36f..5be7ea854d 100644
--- a/src/portable/portable.c
+++ b/src/portable/portable.c
@@ -58,7 +58,6 @@ static bool prefix_match(const char *unit, const char *prefix) {
 
 static bool unit_match(const char *unit, char **matches) {
         const char *dot;
-        char **i;
 
         dot = strrchr(unit, '.');
         if (!dot)
@@ -182,7 +181,6 @@ static int extract_now(
         _cleanup_close_ int os_release_fd = -1;
         _cleanup_free_ char *os_release_path = NULL;
         const char *os_release_id;
-        char **i;
         int r;
 
         /* Extracts the metadata from a directory tree 'where'. Extracts two kinds of information: the /etc/os-release
@@ -527,8 +525,6 @@ static int extract_image_and_extensions(
                 return r;
 
         if (!strv_isempty(extension_image_paths)) {
-                char **p;
-
                 extension_images = ordered_hashmap_new(&image_hash_ops);
                 if (!extension_images)
                         return -ENOMEM;
@@ -1224,8 +1220,6 @@ static int install_image_and_extensions_symlinks(
 }
 
 static bool prefix_matches_compatible(char **matches, char **valid_prefixes) {
-        char **m;
-
         /* Checks if all 'matches' are included in the list of 'valid_prefixes' */
 
         STRV_FOREACH(m, matches)
@@ -1342,7 +1336,6 @@ int portable_attach(
 
 static bool marker_matches_images(const char *marker, const char *name_or_path, char **extension_image_paths) {
         _cleanup_strv_free_ char **root_and_extensions = NULL;
-        char **image_name_or_path;
         const char *a;
         int r;
 
diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c
index 60feac6f5d..f4c57e14ae 100644
--- a/src/portable/portablectl.c
+++ b/src/portable/portablectl.c
@@ -90,7 +90,6 @@ static int determine_image(const char *image, bool permit_non_existing, char **r
 }
 
 static int attach_extensions_to_message(sd_bus_message *m, char **extensions) {
-        char **p;
         int r;
 
         assert(m);
@@ -1067,7 +1066,6 @@ static int dump_profiles(void) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
         _cleanup_strv_free_ char **l = NULL;
-        char **i;
         int r;
 
         r = acquire_bus(&bus);
diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c
index 5b3ceeff36..96a505f5e1 100644
--- a/src/resolve/resolvectl.c
+++ b/src/resolve/resolvectl.c
@@ -705,7 +705,6 @@ invalid:
 
 static int verb_query(int argc, char **argv, void *userdata) {
         sd_bus *bus = userdata;
-        char **p;
         int q, r = 0;
 
         if (arg_type != 0)
@@ -975,7 +974,6 @@ static int resolve_openpgp(sd_bus *bus, const char *address) {
 
 static int verb_openpgp(int argc, char **argv, void *userdata) {
         sd_bus *bus = userdata;
-        char **p;
         int q, r = 0;
 
         STRV_FOREACH(p, argv + 1) {
@@ -1025,7 +1023,7 @@ static bool service_family_is_valid(const char *s) {
 
 static int verb_tlsa(int argc, char **argv, void *userdata) {
         sd_bus *bus = userdata;
-        char **p, **args = argv + 1;
+        char **args = argv + 1;
         const char *family = "tcp";
         int q, r = 0;
 
@@ -1389,7 +1387,6 @@ static int status_print_strv_ifindex(int ifindex, const char *ifname, char **p)
                 printf("%s%nGlobal%n%s:", ansi_highlight(), &pos1, &pos2, ansi_normal());
 
         size_t cols = columns(), position = pos2 - pos1 + 2;
-        char **i;
 
         STRV_FOREACH(i, p) {
                 size_t our_len = utf8_console_width(*i); /* This returns -1 on invalid utf-8 (which shouldn't happen).
@@ -2025,7 +2022,6 @@ static int verb_status(int argc, char **argv, void *userdata) {
         int r = 0;
 
         if (argc > 1) {
-                char **ifname;
                 bool empty_line = false;
 
                 STRV_FOREACH(ifname, argv + 1) {
@@ -2049,7 +2045,6 @@ static int verb_status(int argc, char **argv, void *userdata) {
 
 static int call_dns(sd_bus *bus, char **dns, const BusLocator *locator, sd_bus_error *error, bool extended) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
-        char **p;
         int r;
 
         r = bus_message_new_method_call(bus, &req, locator, extended ? "SetLinkDNSEx" : "SetLinkDNS");
@@ -2157,7 +2152,6 @@ static int verb_dns(int argc, char **argv, void *userdata) {
 
 static int call_domain(sd_bus *bus, char **domain, const BusLocator *locator, sd_bus_error *error) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL;
-        char **p;
         int r;
 
         r = bus_message_new_method_call(bus, &req, locator, "SetLinkDomains");
@@ -2454,7 +2448,6 @@ static int call_nta(sd_bus *bus, char **nta, const BusLocator *locator,  sd_bus_
 static int verb_nta(int argc, char **argv, void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         sd_bus *bus = userdata;
-        char **p;
         int r;
         bool clear;
 
diff --git a/src/resolve/resolved-dns-trust-anchor.c b/src/resolve/resolved-dns-trust-anchor.c
index b036aa402c..4a6c06d13d 100644
--- a/src/resolve/resolved-dns-trust-anchor.c
+++ b/src/resolve/resolved-dns-trust-anchor.c
@@ -409,7 +409,6 @@ static int dns_trust_anchor_load_files(
                 int (*loader)(DnsTrustAnchor *d, const char *path, unsigned n, const char *line)) {
 
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         assert(d);
diff --git a/src/resolve/resolved-dnssd.c b/src/resolve/resolved-dnssd.c
index ab2773e4e4..a05bd20199 100644
--- a/src/resolve/resolved-dnssd.c
+++ b/src/resolve/resolved-dnssd.c
@@ -186,7 +186,6 @@ int dnssd_render_instance_name(DnssdService *s, char **ret_name) {
 
 int dnssd_load(Manager *manager) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         assert(manager);
diff --git a/src/resolve/resolved-etc-hosts.c b/src/resolve/resolved-etc-hosts.c
index 9af3a27bb1..c33bbbeb79 100644
--- a/src/resolve/resolved-etc-hosts.c
+++ b/src/resolve/resolved-etc-hosts.c
@@ -189,7 +189,6 @@ static void strip_localhost(EtcHosts *hosts) {
 
         for (size_t j = 0; j < ELEMENTSOF(local_in_addrs); j++) {
                 bool all_localhost, in_order;
-                char **i;
 
                 item = hashmap_get(hosts->by_address, local_in_addrs + j);
                 if (!item)
@@ -389,8 +388,6 @@ int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer) {
                 }
 
                 if (found_ptr) {
-                        char **n;
-
                         r = dns_answer_reserve(answer, strv_length(item->names));
                         if (r < 0)
                                 return r;
diff --git a/src/resolve/resolved-link-bus.c b/src/resolve/resolved-link-bus.c
index 8d533d7ecf..97f6eb70ca 100644
--- a/src/resolve/resolved-link-bus.c
+++ b/src/resolve/resolved-link-bus.c
@@ -706,7 +706,6 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v
         _cleanup_free_ char *j = NULL;
         Link *l = userdata;
         int r;
-        char **i;
 
         assert(message);
         assert(l);
diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c
index 6c910498a2..e6b46aed8e 100644
--- a/src/resolve/resolved-link.c
+++ b/src/resolve/resolved-link.c
@@ -282,7 +282,6 @@ static int link_update_dns_server_one(Link *l, const char *str) {
 
 static int link_update_dns_servers(Link *l) {
         _cleanup_strv_free_ char **nameservers = NULL;
-        char **nameserver;
         int r;
 
         assert(l);
@@ -511,7 +510,6 @@ static int link_update_search_domain_one(Link *l, const char *name, bool route_o
 
 static int link_update_search_domains(Link *l) {
         _cleanup_strv_free_ char **sdomains = NULL, **rdomains = NULL;
-        char **i;
         int r, q;
 
         assert(l);
diff --git a/src/run-generator/run-generator.c b/src/run-generator/run-generator.c
index 1cf14e71fc..fb62209704 100644
--- a/src/run-generator/run-generator.c
+++ b/src/run-generator/run-generator.c
@@ -55,7 +55,6 @@ static int parse(const char *key, const char *value, void *data) {
 static int generate(void) {
         _cleanup_fclose_ FILE *f = NULL;
         const char *p;
-        char **c;
         int r;
 
         if (strv_isempty(arg_commands) && !arg_success_action)
diff --git a/src/shared/acl-util.c b/src/shared/acl-util.c
index 3f286a888b..2bdc529b80 100644
--- a/src/shared/acl-util.c
+++ b/src/shared/acl-util.c
@@ -212,7 +212,6 @@ int acl_search_groups(const char *path, char ***ret_groups) {
 int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want_mask) {
         _cleanup_free_ char **a = NULL, **d = NULL; /* strings are not freed */
         _cleanup_strv_free_ char **split = NULL;
-        char **entry;
         int r = -EINVAL;
         _cleanup_(acl_freep) acl_t a_acl = NULL, d_acl = NULL;
 
diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c
index a17375eb4c..4c39ce2f0e 100644
--- a/src/shared/bootspec.c
+++ b/src/shared/bootspec.c
@@ -256,7 +256,6 @@ static int boot_entries_find(
                 size_t *n_entries) {
 
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         assert(root);
@@ -771,8 +770,6 @@ int boot_entries_augment_from_loader(
                 "auto-reboot-to-firmware-setup", "Reboot Into Firmware Interface",
         };
 
-        char **i;
-
         assert(config);
 
         /* Let's add the entries discovered by the boot loader to the end of our list, unless they are
@@ -780,7 +777,6 @@ int boot_entries_augment_from_loader(
 
         STRV_FOREACH(i, found_by_loader) {
                 _cleanup_free_ char *c = NULL, *t = NULL, *p = NULL;
-                char **a, **b;
 
                 if (boot_config_has_entry(config, *i))
                         continue;
diff --git a/src/shared/bus-polkit.c b/src/shared/bus-polkit.c
index bbe04bea37..4d733a8173 100644
--- a/src/shared/bus-polkit.c
+++ b/src/shared/bus-polkit.c
@@ -36,7 +36,6 @@ static int bus_message_append_strv_key_value(
                 sd_bus_message *m,
                 const char **l) {
 
-        const char **k, **v;
         int r;
 
         assert(m);
diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
index ef134bcee4..c211fe34d5 100644
--- a/src/shared/bus-unit-util.c
+++ b/src/shared/bus-unit-util.c
@@ -1674,7 +1674,6 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
 
         if (streq(field, "RootImageOptions")) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **first = NULL, **second = NULL;
                 const char *p = eq;
 
                 r = sd_bus_message_open_container(m, SD_BUS_TYPE_STRUCT, "sv");
@@ -2023,7 +2022,6 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con
                         if (r < 0)
                                 return bus_log_create_error(r);
 
-                        char **source, **destination;
                         STRV_FOREACH_PAIR(source, destination, symlinks) {
                                 r = sd_bus_message_append(m, "(sst)", *source, *destination, 0);
                                 if (r < 0)
@@ -2647,7 +2645,6 @@ int bus_append_unit_property_assignment(sd_bus_message *m, UnitType t, const cha
 }
 
 int bus_append_unit_property_assignment_many(sd_bus_message *m, UnitType t, char **l) {
-        char **i;
         int r;
 
         assert(m);
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 4a2b7684bc..a907b67a70 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -490,7 +490,6 @@ int bus_path_decode_unique(const char *path, const char *prefix, char **ret_send
 
 int bus_track_add_name_many(sd_bus_track *t, char **l) {
         int r = 0;
-        char **i;
 
         assert(t);
 
@@ -562,7 +561,6 @@ int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *descri
 
 int bus_reply_pair_array(sd_bus_message *m, char **l) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        char **k, **v;
         int r;
 
         assert(m);
diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c
index 8bda66ca36..3532d55286 100644
--- a/src/shared/cgroup-setup.c
+++ b/src/shared/cgroup-setup.c
@@ -22,7 +22,6 @@
 static int cg_any_controller_used_for_v1(void) {
         _cleanup_free_ char *buf = NULL;
         _cleanup_strv_free_ char **lines = NULL;
-        char **line;
         int r;
 
         r = read_full_virtual_file("/proc/cgroups", &buf, NULL);
diff --git a/src/shared/condition.c b/src/shared/condition.c
index 21f3714eba..d0f2ebfc23 100644
--- a/src/shared/condition.c
+++ b/src/shared/condition.c
@@ -830,7 +830,6 @@ static int condition_test_first_boot(Condition *c, char **env) {
 
 static int condition_test_environment(Condition *c, char **env) {
         bool equal;
-        char **i;
 
         assert(c);
         assert(c->parameter);
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index 1e1967d7ea..d19041207c 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -474,7 +474,6 @@ static int config_parse_many_files(
 
         _cleanup_hashmap_free_ Hashmap *stats_by_path = NULL;
         struct stat st;
-        char **fn;
         int r;
 
         if (ret_stats_by_path) {
diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c
index 1d432328e7..3f1644ea85 100644
--- a/src/shared/discover-image.c
+++ b/src/shared/discover-image.c
@@ -632,7 +632,6 @@ int image_remove(Image *i) {
         _cleanup_(release_lock_file) LockFile global_lock = LOCK_FILE_INIT, local_lock = LOCK_FILE_INIT;
         _cleanup_strv_free_ char **settings = NULL;
         _cleanup_free_ char *roothash = NULL;
-        char **j;
         int r;
 
         assert(i);
@@ -695,10 +694,9 @@ int image_remove(Image *i) {
                 return -EOPNOTSUPP;
         }
 
-        STRV_FOREACH(j, settings) {
+        STRV_FOREACH(j, settings)
                 if (unlink(*j) < 0 && errno != ENOENT)
                         log_debug_errno(errno, "Failed to unlink %s, ignoring: %m", *j);
-        }
 
         if (unlink(roothash) < 0 && errno != ENOENT)
                 log_debug_errno(errno, "Failed to unlink %s, ignoring: %m", roothash);
@@ -724,7 +722,6 @@ int image_rename(Image *i, const char *new_name) {
         _cleanup_free_ char *new_path = NULL, *nn = NULL, *roothash = NULL;
         _cleanup_strv_free_ char **settings = NULL;
         unsigned file_attr = 0;
-        char **j;
         int r;
 
         assert(i);
@@ -845,7 +842,6 @@ int image_clone(Image *i, const char *new_name, bool read_only) {
         _cleanup_strv_free_ char **settings = NULL;
         _cleanup_free_ char *roothash = NULL;
         const char *new_path;
-        char **j;
         int r;
 
         assert(i);
diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c
index b38f16c37a..79438c69d2 100644
--- a/src/shared/dissect-image.c
+++ b/src/shared/dissect-image.c
@@ -2208,7 +2208,6 @@ static int validate_signature_userspace(const VeritySettings *verity) {
         _cleanup_(BIO_freep) BIO *bio = NULL; /* 'bio' must be freed first, 's' second, hence keep this order
                                                * of declaration in place, please */
         const unsigned char *d;
-        char **i;
         int r;
 
         assert(verity);
diff --git a/src/shared/dropin.c b/src/shared/dropin.c
index eb016eb114..375a3ca600 100644
--- a/src/shared/dropin.c
+++ b/src/shared/dropin.c
@@ -232,7 +232,6 @@ int unit_file_find_dropin_paths(
 
         _cleanup_strv_free_ char **dirs = NULL;
         const char *n;
-        char **p;
         int r;
 
         assert(ret);
diff --git a/src/shared/exec-util.c b/src/shared/exec-util.c
index b93de9c922..918f997e5a 100644
--- a/src/shared/exec-util.c
+++ b/src/shared/exec-util.c
@@ -91,7 +91,6 @@ static int do_execute(
 
         _cleanup_hashmap_free_free_ Hashmap *pids = NULL;
         _cleanup_strv_free_ char **paths = NULL;
-        char **path, **e;
         int r;
         bool parallel_execution;
 
@@ -254,7 +253,7 @@ int execute_directories(
 }
 
 static int gather_environment_generate(int fd, void *arg) {
-        char ***env = arg, **x, **y;
+        char ***env = arg;
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **new = NULL;
         int r;
@@ -369,7 +368,6 @@ static int gather_environment_consume(int fd, void *arg) {
 
 int exec_command_flags_from_strv(char **ex_opts, ExecCommandFlags *flags) {
         ExecCommandFlags ex_flag, ret_flags = 0;
-        char **opt;
 
         assert(flags);
 
diff --git a/src/shared/format-table.c b/src/shared/format-table.c
index b95680b365..b756c5286b 100644
--- a/src/shared/format-table.c
+++ b/src/shared/format-table.c
@@ -1364,7 +1364,6 @@ static char* format_strv_width(char **strv, size_t column_width) {
                 return NULL;
 
         size_t position = 0;
-        char **p;
         STRV_FOREACH(p, strv) {
                 size_t our_len = utf8_console_width(*p); /* This returns -1 on invalid utf-8 (which shouldn't happen).
                                                           * If that happens, we'll just print one item per line. */
diff --git a/src/shared/hwdb-util.c b/src/shared/hwdb-util.c
index fe4785f3e5..f98d03f766 100644
--- a/src/shared/hwdb-util.c
+++ b/src/shared/hwdb-util.c
@@ -434,7 +434,7 @@ static int trie_store(struct trie *trie, const char *filename, bool compat) {
 
 static int insert_data(struct trie *trie, char **match_list, char *line, const char *filename,
                        uint16_t file_priority, uint32_t line_number, bool compat) {
-        char *value, **entry;
+        char *value;
 
         assert(line[0] == ' ');
 
@@ -583,7 +583,6 @@ int hwdb_update(const char *root, const char *hwdb_bin_dir, bool strict, bool co
         _cleanup_free_ char *hwdb_bin = NULL;
         _cleanup_(trie_freep) struct trie *trie = NULL;
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         uint16_t file_priority = 1;
         int r = 0, err;
 
diff --git a/src/shared/install.c b/src/shared/install.c
index f1ee3c2716..785ef55dbd 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -874,7 +874,6 @@ static int find_symlinks_in_scope(
         bool same_name_link_runtime = false, same_name_link_config = false;
         bool enabled_in_runtime = false, enabled_at_all = false;
         bool ignore_same_name = false;
-        char **p;
         int r;
 
         assert(lp);
@@ -1381,7 +1380,6 @@ static int unit_file_search(
         _cleanup_free_ char *template = NULL;
         bool found_unit = false;
         int r, result;
-        char **p;
 
         assert(info);
         assert(lp);
@@ -1796,7 +1794,6 @@ static int install_info_symlink_alias(
                 UnitFileChange **changes,
                 size_t *n_changes) {
 
-        char **s;
         int r = 0, q;
 
         assert(info);
@@ -1846,7 +1843,6 @@ static int install_info_symlink_wants(
         _cleanup_free_ char *buf = NULL;
         UnitNameFlags valid_dst_type = UNIT_NAME_ANY;
         const char *n;
-        char **s;
         int r = 0, q;
 
         assert(info);
@@ -2150,7 +2146,6 @@ int unit_file_mask(
 
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
         const char *config_path;
-        char **i;
         int r;
 
         assert(scope >= 0);
@@ -2199,7 +2194,6 @@ int unit_file_unmask(
         _cleanup_strv_free_ char **todo = NULL;
         const char *config_path;
         size_t n_todo = 0;
-        char **i;
         int r, q;
 
         assert(scope >= 0);
@@ -2291,7 +2285,6 @@ int unit_file_link(
         _cleanup_strv_free_ char **todo = NULL;
         const char *config_path;
         size_t n_todo = 0;
-        char **i;
         int r, q;
 
         assert(scope >= 0);
@@ -2391,7 +2384,6 @@ int unit_file_revert(
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_strv_free_ char **todo = NULL;
         size_t n_todo = 0;
-        char **i;
         int r, q;
 
         /* Puts a unit file back into vendor state. This means:
@@ -2411,7 +2403,6 @@ int unit_file_revert(
 
         STRV_FOREACH(i, files) {
                 bool has_vendor = false;
-                char **p;
 
                 if (!unit_name_is_valid(*i, UNIT_NAME_ANY))
                         return -EINVAL;
@@ -2495,7 +2486,6 @@ int unit_file_revert(
         STRV_FOREACH(i, todo) {
                 _cleanup_strv_free_ char **fs = NULL;
                 const char *rp;
-                char **j;
 
                 (void) get_files_in_directory(*i, &fs);
 
@@ -2548,7 +2538,6 @@ int unit_file_add_dependency(
         _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
         UnitFileInstallInfo *info, *target_info;
         const char *config_path;
-        char **f;
         int r;
 
         assert(scope >= 0);
@@ -2617,7 +2606,6 @@ int unit_file_enable(
         _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
         const char *config_path;
         UnitFileInstallInfo *info;
-        char **f;
         int r;
 
         assert(scope >= 0);
@@ -2661,7 +2649,6 @@ int unit_file_disable(
         _cleanup_(install_context_done) InstallContext ctx = { .scope = scope };
         _cleanup_set_free_free_ Set *remove_symlinks_to = NULL;
         const char *config_path;
-        char **i;
         int r;
 
         assert(scope >= 0);
@@ -2979,7 +2966,6 @@ static int presets_find_config(UnitFileScope scope, const char *root_dir, char *
 static int read_presets(UnitFileScope scope, const char *root_dir, UnitFilePresets *presets) {
         _cleanup_(unit_file_presets_freep) UnitFilePresets ps = {};
         _cleanup_strv_free_ char **files = NULL;
-        char **p;
         int r;
 
         assert(scope >= 0);
@@ -3097,7 +3083,6 @@ static int pattern_match_multiple_instances(
         if (unit_name_is_valid(unit_name, UNIT_NAME_TEMPLATE)) {
                 _cleanup_strv_free_ char **out_strv = NULL;
 
-                char **iter;
                 STRV_FOREACH(iter, rule.instances) {
                         _cleanup_free_ char *name = NULL;
 
@@ -3144,11 +3129,10 @@ static int query_presets(const char *name, const UnitFilePresets *presets, char
                 log_debug("Preset files don't specify rule for %s. Enabling.", name);
                 return 1;
         case PRESET_ENABLE:
-                if (instance_name_list && *instance_name_list) {
-                        char **s;
+                if (instance_name_list && *instance_name_list)
                         STRV_FOREACH(s, *instance_name_list)
                                 log_debug("Preset files say enable %s.", *s);
-                } else
+                else
                         log_debug("Preset files say enable %s.", name);
                 return 1;
         case PRESET_DISABLE:
@@ -3254,15 +3238,14 @@ static int preset_prepare_one(
                 return r;
 
         if (r > 0) {
-                if (instance_name_list) {
-                        char **s;
+                if (instance_name_list)
                         STRV_FOREACH(s, instance_name_list) {
                                 r = install_info_discover_and_check(plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
                                                                     &info, changes, n_changes);
                                 if (r < 0)
                                         return r;
                         }
-                } else {
+                else {
                         r = install_info_discover_and_check(plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS,
                                                             &info, changes, n_changes);
                         if (r < 0)
@@ -3289,7 +3272,6 @@ int unit_file_preset(
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
         const char *config_path;
-        char **i;
         int r;
 
         assert(scope >= 0);
@@ -3329,7 +3311,6 @@ int unit_file_preset_all(
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {};
         const char *config_path = NULL;
-        char **i;
         int r;
 
         assert(scope >= 0);
@@ -3401,7 +3382,6 @@ int unit_file_get_list(
                 char **patterns) {
 
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
-        char **dirname;
         int r;
 
         assert(scope >= 0);
diff --git a/src/shared/libcrypt-util.c b/src/shared/libcrypt-util.c
index 5b315413aa..0d72032f53 100644
--- a/src/shared/libcrypt-util.c
+++ b/src/shared/libcrypt-util.c
@@ -197,7 +197,6 @@ int test_password_one(const char *hashed_password, const char *password) {
 }
 
 int test_password_many(char **hashed_password, const char *password) {
-        char **hpw;
         int r;
 
         STRV_FOREACH(hpw, hashed_password) {
diff --git a/src/shared/libfido2-util.c b/src/shared/libfido2-util.c
index 87b88f04d6..8c9fa88e32 100644
--- a/src/shared/libfido2-util.c
+++ b/src/shared/libfido2-util.c
@@ -313,8 +313,6 @@ static int fido2_use_hmac_hash_specific_token(
                 bool retry_with_up = false, retry_with_pin = false;
 
                 if (FLAGS_SET(required, FIDO2ENROLL_PIN)) {
-                        char **i;
-
                         /* OK, we need a pin, try with all pins in turn */
                         if (strv_isempty(pins))
                                 r = FIDO_ERR_PIN_REQUIRED;
@@ -683,7 +681,6 @@ int fido2_generate_hmac_hash(
 
                 for (;;) {
                         _cleanup_(strv_free_erasep) char **pin = NULL;
-                        char **i;
 
                         r = ask_password_auto("Please enter security token PIN:", askpw_icon_name, NULL, "fido2-pin", "fido2-pin", USEC_INFINITY, 0, &pin);
                         if (r < 0)
diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c
index 7eadff3ace..975c027f47 100644
--- a/src/shared/mount-setup.c
+++ b/src/shared/mount-setup.c
@@ -244,8 +244,6 @@ static const char *join_with(const char *controller) {
                 NULL
         };
 
-        const char *const *x, *const *y;
-
         assert(controller);
 
         /* This will lookup which controller to mount another controller with. Input is a controller name, and output
@@ -433,7 +431,6 @@ static int relabel_cgroup_filesystems(void) {
 
 static int relabel_extra(void) {
         _cleanup_strv_free_ char **files = NULL;
-        char **file;
         int r, c = 0;
 
         /* Support for relabelling additional files or directories after loading the policy. For this, code in the
diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c
index c75c02f5be..12c7044f04 100644
--- a/src/shared/mount-util.c
+++ b/src/shared/mount-util.c
@@ -274,7 +274,6 @@ int bind_remount_recursive_with_mountinfo(
                          * we shall operate on. */
                         if (!path_equal(path, prefix)) {
                                 bool deny_listed = false;
-                                char **i;
 
                                 STRV_FOREACH(i, deny_list) {
                                         if (path_equal(*i, prefix))
diff --git a/src/shared/net-condition.c b/src/shared/net-condition.c
index 006676d973..2bb4c0b509 100644
--- a/src/shared/net-condition.c
+++ b/src/shared/net-condition.c
@@ -46,7 +46,6 @@ bool net_match_is_empty(const NetMatch *match) {
 }
 
 static bool net_condition_test_strv(char * const *patterns, const char *string) {
-        char * const *p;
         bool match = false, has_positive_rule = false;
 
         if (strv_isempty(patterns))
@@ -77,7 +76,6 @@ static bool net_condition_test_ifname(char * const *patterns, const char *ifname
         if (net_condition_test_strv(patterns, ifname))
                 return true;
 
-        char * const *p;
         STRV_FOREACH(p, alternative_names)
                 if (net_condition_test_strv(patterns, *p))
                         return true;
@@ -86,8 +84,6 @@ static bool net_condition_test_ifname(char * const *patterns, const char *ifname
 }
 
 static int net_condition_test_property(char * const *match_property, sd_device *device) {
-        char * const *p;
-
         if (strv_isempty(match_property))
                 return true;
 
diff --git a/src/shared/nscd-flush.c b/src/shared/nscd-flush.c
index 0655030633..95dfe24b22 100644
--- a/src/shared/nscd-flush.c
+++ b/src/shared/nscd-flush.c
@@ -132,7 +132,6 @@ static int nscd_flush_cache_one(const char *database, usec_t end) {
 int nscd_flush_cache(char **databases) {
         usec_t end;
         int r = 0;
-        char **i;
 
         /* Tries to invalidate the specified database in nscd. We do this carefully, with a 5s timeout, so that we
          * don't block indefinitely on another service. */
diff --git a/src/shared/pkcs11-util.c b/src/shared/pkcs11-util.c
index 67ea44515a..4f9ec1fbd6 100644
--- a/src/shared/pkcs11-util.c
+++ b/src/shared/pkcs11-util.c
@@ -275,7 +275,7 @@ int pkcs11_token_login(
 
         for (unsigned tries = 0; tries < 3; tries++) {
                 _cleanup_strv_free_erase_ char **passwords = NULL;
-                char **i, *e;
+                char *e;
 
                 e = getenv("PIN");
                 if (e) {
diff --git a/src/shared/pretty-print.c b/src/shared/pretty-print.c
index 26daec3450..98619c25d4 100644
--- a/src/shared/pretty-print.c
+++ b/src/shared/pretty-print.c
@@ -168,7 +168,6 @@ static int cat_file(const char *filename, bool newline) {
 }
 
 int cat_files(const char *file, char **dropins, CatFlags flags) {
-        char **path;
         int r;
 
         if (file) {
@@ -284,10 +283,9 @@ static int guess_type(const char **name, char ***prefixes, bool *is_collection,
 int conf_files_cat(const char *root, const char *name) {
         _cleanup_strv_free_ char **dirs = NULL, **files = NULL;
         _cleanup_free_ char *path = NULL;
-        char **prefix, **prefixes = NULL; /* explicit initialization to appease gcc */
+        char **prefixes = NULL; /* explicit initialization to appease gcc */
         bool is_collection;
         const char *extension;
-        char **t;
         int r;
 
         r = guess_type(&name, &prefixes, &is_collection, &extension);
diff --git a/src/shared/seccomp-util.c b/src/shared/seccomp-util.c
index 32bd8aa73b..e597a156cf 100644
--- a/src/shared/seccomp-util.c
+++ b/src/shared/seccomp-util.c
@@ -1837,7 +1837,6 @@ int seccomp_restrict_archs(Set *archs) {
 
 int parse_syscall_archs(char **l, Set **ret_archs) {
         _cleanup_set_free_ Set *archs = NULL;
-        char **s;
         int r;
 
         assert(l);
diff --git a/src/shared/serialize.c b/src/shared/serialize.c
index 47996b9ead..cd48286355 100644
--- a/src/shared/serialize.c
+++ b/src/shared/serialize.c
@@ -117,7 +117,6 @@ int serialize_dual_timestamp(FILE *f, const char *name, const dual_timestamp *t)
 
 int serialize_strv(FILE *f, const char *key, char **l) {
         int ret = 0, r;
-        char **i;
 
         /* Returns the first error, or positive if anything was serialized, 0 otherwise. */
 
diff --git a/src/shared/tests.c b/src/shared/tests.c
index 307f796fe2..70fbbb45a5 100644
--- a/src/shared/tests.c
+++ b/src/shared/tests.c
@@ -51,7 +51,6 @@ static void load_testdata_env(void) {
         _cleanup_free_ char *s = NULL;
         _cleanup_free_ char *envpath = NULL;
         _cleanup_strv_free_ char **pairs = NULL;
-        char **k, **v;
 
         if (called)
                 return;
diff --git a/src/shared/user-record-show.c b/src/shared/user-record-show.c
index 7c2751f3a7..95895a8e45 100644
--- a/src/shared/user-record-show.c
+++ b/src/shared/user-record-show.c
@@ -143,7 +143,6 @@ void user_record_show(UserRecord *hr, bool show_full_group_info) {
                         break;
                 }
                 bool has_valid_passwords = false;
-                char **p;
                 STRV_FOREACH(p, hr->hashed_password)
                         if (!hashed_password_is_locked_or_invalid(*p)) {
                                 has_valid_passwords = true;
@@ -240,15 +239,12 @@ void user_record_show(UserRecord *hr, bool show_full_group_info) {
         if (hr->preferred_language)
                 printf("    Language: %s\n", hr->preferred_language);
 
-        if (!strv_isempty(hr->environment)) {
-                char **i;
-
+        if (!strv_isempty(hr->environment))
                 STRV_FOREACH(i, hr->environment) {
                         printf(i == hr->environment ?
                                " Environment: %s\n" :
                                "              %s\n", *i);
                 }
-        }
 
         if (hr->locked >= 0)
                 printf("      Locked: %s\n", yes_no(hr->locked));
@@ -478,14 +474,11 @@ void user_record_show(UserRecord *hr, bool show_full_group_info) {
         if (!strv_isempty(hr->ssh_authorized_keys))
                 printf("SSH Pub. Key: %zu\n", strv_length(hr->ssh_authorized_keys));
 
-        if (!strv_isempty(hr->pkcs11_token_uri)) {
-                char **i;
-
+        if (!strv_isempty(hr->pkcs11_token_uri))
                 STRV_FOREACH(i, hr->pkcs11_token_uri)
                         printf(i == hr->pkcs11_token_uri ?
                                "PKCS11 Token: %s\n" :
                                "              %s\n", *i);
-        }
 
         if (hr->n_fido2_hmac_credential > 0)
                 printf(" FIDO2 Token: %zu\n", hr->n_fido2_hmac_credential);
@@ -558,7 +551,6 @@ void group_record_show(GroupRecord *gr, bool show_full_user_info) {
                 }
         } else {
                 const char *prefix = "     Members:";
-                char **i;
 
                 STRV_FOREACH(i, gr->members) {
                         printf("%s %s\n", prefix, *i);
@@ -568,7 +560,6 @@ void group_record_show(GroupRecord *gr, bool show_full_user_info) {
 
         if (!strv_isempty(gr->administrators)) {
                 const char *prefix = "      Admins:";
-                char **i;
 
                 STRV_FOREACH(i, gr->administrators) {
                         printf("%s %s\n", prefix, *i);
diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c
index 7064f3a905..f108529bbd 100644
--- a/src/sleep/sleep.c
+++ b/src/sleep/sleep.c
@@ -85,7 +85,6 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca
 
 static int write_mode(char **modes) {
         int r = 0;
-        char **mode;
 
         STRV_FOREACH(mode, modes) {
                 int k;
@@ -103,7 +102,6 @@ static int write_mode(char **modes) {
 }
 
 static int write_state(FILE **f, char **states) {
-        char **state;
         int r = 0;
 
         assert(f);
diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c
index 408ac3b8be..24c8baab03 100644
--- a/src/sysctl/sysctl.c
+++ b/src/sysctl/sysctl.c
@@ -51,8 +51,6 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Option*, option_free);
 DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(option_hash_ops, char, string_hash_func, string_compare_func, Option, option_free);
 
 static bool test_prefix(const char *p) {
-        char **i;
-
         if (strv_isempty(arg_prefixes))
                 return true;
 
@@ -131,7 +129,6 @@ static int apply_all(OrderedHashmap *sysctl_options) {
                 if (string_is_glob(option->key)) {
                         _cleanup_strv_free_ char **paths = NULL;
                         _cleanup_free_ char *pattern = NULL;
-                        char **s;
 
                         pattern = path_join("/proc/sys", option->key);
                         if (!pattern)
@@ -403,7 +400,6 @@ static int run(int argc, char *argv[]) {
                 }
         } else {
                 _cleanup_strv_free_ char **files = NULL;
-                char **f;
 
                 r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("sysctl.d"));
                 if (r < 0)
diff --git a/src/sysext/sysext.c b/src/sysext/sysext.c
index 5abf1bb418..6a2dc16ab9 100644
--- a/src/sysext/sysext.c
+++ b/src/sysext/sysext.c
@@ -123,7 +123,6 @@ static int unmerge_hierarchy(const char *p) {
 
 static int unmerge(void) {
         int r, ret = 0;
-        char **p;
 
         STRV_FOREACH(p, arg_hierarchies) {
                 _cleanup_free_ char *resolved = NULL;
@@ -160,7 +159,6 @@ static int verb_unmerge(int argc, char **argv, void *userdata) {
 static int verb_status(int argc, char **argv, void *userdata) {
         _cleanup_(table_unrefp) Table *t = NULL;
         int r, ret = 0;
-        char **p;
 
         t = table_new("hierarchy", "extensions", "since");
         if (!t)
@@ -244,7 +242,6 @@ static int mount_overlayfs(
 
         _cleanup_free_ char *options = NULL;
         bool separator = false;
-        char **l;
         int r;
 
         assert(where);
@@ -284,7 +281,6 @@ static int merge_hierarchy(
         _cleanup_free_ char *resolved_hierarchy = NULL, *f = NULL, *buf = NULL;
         _cleanup_strv_free_ char **layers = NULL;
         struct stat st;
-        char **p;
         int r;
 
         assert(hierarchy);
@@ -452,7 +448,6 @@ static int merge_subprocess(Hashmap *images, const char *workspace) {
         size_t n_extensions = 0;
         unsigned n_ignored = 0;
         Image *img;
-        char **h;
         int r;
 
         /* Mark the whole of /run as MS_SLAVE, so that we can mount stuff below it that doesn't show up on
@@ -759,7 +754,6 @@ static int image_discover_and_read_metadata(Hashmap **ret_images) {
 
 static int verb_merge(int argc, char **argv, void *userdata) {
         _cleanup_(hashmap_freep) Hashmap *images = NULL;
-        char **p;
         int r;
 
         if (!have_effective_cap(CAP_SYS_ADMIN))
diff --git a/src/systemctl/systemctl-cancel-job.c b/src/systemctl/systemctl-cancel-job.c
index 4c5203c1f9..647e70767e 100644
--- a/src/systemctl/systemctl-cancel-job.c
+++ b/src/systemctl/systemctl-cancel-job.c
@@ -10,7 +10,6 @@
 
 int cancel_job(int argc, char *argv[], void *userdata) {
         sd_bus *bus;
-        char **name;
         int r;
 
         if (argc <= 1) /* Shortcut to trivial_method() if no argument is given */
diff --git a/src/systemctl/systemctl-clean-or-freeze.c b/src/systemctl/systemctl-clean-or-freeze.c
index fb4d643517..dc44110c72 100644
--- a/src/systemctl/systemctl-clean-or-freeze.c
+++ b/src/systemctl/systemctl-clean-or-freeze.c
@@ -11,7 +11,6 @@ int clean_or_freeze_unit(int argc, char *argv[], void *userdata) {
         _cleanup_(bus_wait_for_units_freep) BusWaitForUnits *w = NULL;
         _cleanup_strv_free_ char **names = NULL;
         int r, ret = EXIT_SUCCESS;
-        char **name;
         const char *method;
         sd_bus *bus;
 
diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c
index 92abd15636..328168e4bb 100644
--- a/src/systemctl/systemctl-edit.c
+++ b/src/systemctl/systemctl-edit.c
@@ -26,7 +26,6 @@ int cat(int argc, char *argv[], void *userdata) {
         _cleanup_(hashmap_freep) Hashmap *cached_name_map = NULL, *cached_id_map = NULL;
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_strv_free_ char **names = NULL;
-        char **name;
         sd_bus *bus;
         bool first = true;
         int r, rc = 0;
@@ -145,7 +144,6 @@ static int create_edit_temp_file(const char *new_path, const char *original_path
         } else if (original_unit_paths) {
                 _cleanup_free_ char *new_contents = NULL;
                 _cleanup_fclose_ FILE *f = NULL;
-                char **path;
 
                 r = mac_selinux_create_file_prepare(new_path, S_IFREG);
                 if (r < 0)
@@ -318,7 +316,7 @@ static int run_editor(char **paths) {
         if (r < 0)
                 return r;
         if (r == 0) {
-                char **editor_args = NULL, **tmp_path, **original_path;
+                char **editor_args = NULL;
                 size_t n_editor_args = 0, i = 1, argc;
                 const char **args, *editor;
 
@@ -379,7 +377,6 @@ static int run_editor(char **paths) {
 static int find_paths_to_edit(sd_bus *bus, char **names, char ***paths) {
         _cleanup_(hashmap_freep) Hashmap *cached_name_map = NULL, *cached_id_map = NULL;
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
-        char **name;
         int r;
 
         assert(names);
@@ -501,7 +498,6 @@ int edit(int argc, char *argv[], void *userdata) {
         _cleanup_(lookup_paths_free) LookupPaths lp = {};
         _cleanup_strv_free_ char **names = NULL;
         _cleanup_strv_free_ char **paths = NULL;
-        char **original, **tmp;
         sd_bus *bus;
         int r;
 
diff --git a/src/systemctl/systemctl-enable.c b/src/systemctl/systemctl-enable.c
index 7860f3dc6c..6266363f00 100644
--- a/src/systemctl/systemctl-enable.c
+++ b/src/systemctl/systemctl-enable.c
@@ -12,7 +12,6 @@
 #include "systemctl.h"
 
 static int normalize_filenames(char **names) {
-        char **u;
         int r;
 
         STRV_FOREACH(u, names)
@@ -40,7 +39,6 @@ static int normalize_filenames(char **names) {
 }
 
 static int normalize_names(char **names, bool warn_if_path) {
-        char **u;
         bool was_path = false;
 
         STRV_FOREACH(u, names) {
@@ -139,7 +137,6 @@ int enable_unit(int argc, char *argv[], void *userdata) {
                 sd_bus *bus;
 
                 if (STR_IN_SET(verb, "mask", "unmask")) {
-                        char **name;
                         _cleanup_(lookup_paths_free) LookupPaths lp = {};
 
                         r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root);
diff --git a/src/systemctl/systemctl-is-active.c b/src/systemctl/systemctl-is-active.c
index d83736e94a..e7c8431ac6 100644
--- a/src/systemctl/systemctl-is-active.c
+++ b/src/systemctl/systemctl-is-active.c
@@ -13,7 +13,6 @@ static int check_unit_generic(int code, const UnitActiveState good_states[], int
         _cleanup_strv_free_ char **names = NULL;
         UnitActiveState active_state;
         sd_bus *bus;
-        char **name;
         int r;
         bool found = false;
 
diff --git a/src/systemctl/systemctl-is-enabled.c b/src/systemctl/systemctl-is-enabled.c
index e33dffaf29..eaf25217a8 100644
--- a/src/systemctl/systemctl-is-enabled.c
+++ b/src/systemctl/systemctl-is-enabled.c
@@ -59,7 +59,6 @@ static int show_installation_targets(sd_bus *bus, const char *name) {
 int unit_is_enabled(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **names = NULL;
         bool enabled;
-        char **name;
         int r;
 
         r = mangle_names("to check", strv_skip(argv, 1), &names);
diff --git a/src/systemctl/systemctl-kill.c b/src/systemctl/systemctl-kill.c
index 489e754752..94489423e8 100644
--- a/src/systemctl/systemctl-kill.c
+++ b/src/systemctl/systemctl-kill.c
@@ -8,7 +8,7 @@
 
 int kill_unit(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **names = NULL;
-        char *kill_who = NULL, **name;
+        char *kill_who = NULL;
         sd_bus *bus;
         int r, q;
 
diff --git a/src/systemctl/systemctl-list-dependencies.c b/src/systemctl/systemctl-list-dependencies.c
index a536240a9f..4d58869416 100644
--- a/src/systemctl/systemctl-list-dependencies.c
+++ b/src/systemctl/systemctl-list-dependencies.c
@@ -63,7 +63,6 @@ static int list_dependencies_one(
                 unsigned branches) {
 
         _cleanup_strv_free_ char **deps = NULL;
-        char **c;
         int r;
 
         assert(bus);
@@ -138,7 +137,7 @@ static int list_dependencies_one(
 
 int list_dependencies(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **units = NULL, **done = NULL;
-        char **u, **patterns;
+        char **patterns;
         sd_bus *bus;
         int r;
 
diff --git a/src/systemctl/systemctl-list-machines.c b/src/systemctl/systemctl-list-machines.c
index b4eb0bd4b6..6d0acc4d50 100644
--- a/src/systemctl/systemctl-list-machines.c
+++ b/src/systemctl/systemctl-list-machines.c
@@ -93,7 +93,6 @@ static int get_machine_list(
         struct machine_info *machine_infos = NULL;
         _cleanup_strv_free_ char **m = NULL;
         _cleanup_free_ char *hn = NULL;
-        char **i;
         int c = 0, r;
 
         hn = gethostname_malloc();
diff --git a/src/systemctl/systemctl-list-units.c b/src/systemctl/systemctl-list-units.c
index 0c405fb7e8..35037d29ba 100644
--- a/src/systemctl/systemctl-list-units.c
+++ b/src/systemctl/systemctl-list-units.c
@@ -49,7 +49,6 @@ static int get_unit_list_recursive(
 
         if (arg_recursive) {
                 _cleanup_strv_free_ char **machines = NULL;
-                char **i;
 
                 r = sd_get_machine_names(&machines);
                 if (r < 0)
diff --git a/src/systemctl/systemctl-logind.c b/src/systemctl/systemctl-logind.c
index 114641cdc7..843f6141ab 100644
--- a/src/systemctl/systemctl-logind.c
+++ b/src/systemctl/systemctl-logind.c
@@ -112,7 +112,6 @@ int logind_check_inhibitors(enum action a) {
         uint32_t uid, pid;
         sd_bus *bus;
         unsigned c = 0;
-        char **s;
         int r;
 
         if (arg_check_inhibitors == 0 || arg_force > 0)
@@ -412,7 +411,6 @@ int help_boot_loader_entry(void) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_strv_free_ char **l = NULL;
         sd_bus *bus;
-        char **i;
         int r;
 
         r = acquire_bus(BUS_FULL, &bus);
diff --git a/src/systemctl/systemctl-reset-failed.c b/src/systemctl/systemctl-reset-failed.c
index eee7586465..0b7e01429f 100644
--- a/src/systemctl/systemctl-reset-failed.c
+++ b/src/systemctl/systemctl-reset-failed.c
@@ -10,7 +10,6 @@
 int reset_failed(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **names = NULL;
         sd_bus *bus;
-        char **name;
         int r, q;
 
         if (argc <= 1) /* Shortcut to trivial_method() if no argument is given */
diff --git a/src/systemctl/systemctl-set-environment.c b/src/systemctl/systemctl-set-environment.c
index aab0fe5fd0..8c529181da 100644
--- a/src/systemctl/systemctl-set-environment.c
+++ b/src/systemctl/systemctl-set-environment.c
@@ -172,7 +172,6 @@ int import_environment(int argc, char *argv[], void *userdata) {
 
                 strv_env_clean_with_callback(copy, invalid_callback, NULL);
 
-                char **e;
                 STRV_FOREACH(e, copy)
                         if (string_has_cc(*e, NULL))
                                 log_notice("Environment variable $%.*s contains control characters, importing anyway.",
@@ -181,8 +180,6 @@ int import_environment(int argc, char *argv[], void *userdata) {
                 r = sd_bus_message_append_strv(m, copy);
 
         } else {
-                char **a, **b;
-
                 r = sd_bus_message_open_container(m, 'a', "s");
                 if (r < 0)
                         return bus_log_create_error(r);
diff --git a/src/systemctl/systemctl-set-property.c b/src/systemctl/systemctl-set-property.c
index 5739bac070..4407c2354d 100644
--- a/src/systemctl/systemctl-set-property.c
+++ b/src/systemctl/systemctl-set-property.c
@@ -46,7 +46,6 @@ static int set_property_one(sd_bus *bus, const char *name, char **properties) {
 int set_property(int argc, char *argv[], void *userdata) {
         sd_bus *bus;
         _cleanup_strv_free_ char **names = NULL;
-        char **name;
         int r, k;
 
         r = acquire_bus(BUS_MANAGER, &bus);
diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c
index 7a6655da74..ee96dac457 100644
--- a/src/systemctl/systemctl-show.c
+++ b/src/systemctl/systemctl-show.c
@@ -308,7 +308,6 @@ static void print_status_info(
         ExecStatusInfo *p;
         usec_t timestamp;
         const char *path;
-        char **t, **t2;
         int r;
 
         assert(i);
@@ -367,7 +366,6 @@ static void print_status_info(
         if (!strv_isempty(i->dropin_paths)) {
                 _cleanup_free_ char *dir = NULL;
                 bool last = false;
-                char ** dropin;
 
                 STRV_FOREACH(dropin, i->dropin_paths) {
                         _cleanup_free_ char *dropin_formatted = NULL;
@@ -774,8 +772,6 @@ static void print_status_info(
 }
 
 static void show_unit_help(UnitStatusInfo *i) {
-        char **p;
-
         assert(i);
 
         if (!i->documentation) {
@@ -1078,7 +1074,6 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m
 
                         if (FLAGS_SET(flags, BUS_PRINT_PROPERTY_SHOW_EMPTY) || allow_list || !strv_isempty(l)) {
                                 bool first = true;
-                                char **i;
 
                                 if (!FLAGS_SET(flags, BUS_PRINT_PROPERTY_ONLY_VALUE)) {
                                         fputs(name, stdout);
@@ -1970,7 +1965,6 @@ static int show_one(
                 .io_read_bytes = UINT64_MAX,
                 .io_write_bytes = UINT64_MAX,
         };
-        char **pp;
         int r;
 
         assert(path);
@@ -2194,7 +2188,6 @@ int show(int argc, char *argv[], void *userdata) {
                         ret = show_all(bus, &new_line, &ellipsized);
         } else {
                 _cleanup_free_ char **patterns = NULL;
-                char **name;
 
                 STRV_FOREACH(name, strv_skip(argv, 1)) {
                         _cleanup_free_ char *path = NULL, *unit = NULL;
diff --git a/src/systemctl/systemctl-start-unit.c b/src/systemctl/systemctl-start-unit.c
index 274b278d2d..b45495d51d 100644
--- a/src/systemctl/systemctl-start-unit.c
+++ b/src/systemctl/systemctl-start-unit.c
@@ -199,16 +199,13 @@ static int enqueue_marked_jobs(
         if (r < 0)
                 return bus_log_parse_error(r);
 
-        if (w) {
-                char **path;
-
+        if (w)
                 STRV_FOREACH(path, paths) {
                         log_debug("Adding %s to the set", *path);
                         r = bus_wait_for_jobs_add(w, *path);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to watch job %s: %m", *path);
                 }
-        }
 
         return 0;
 }
@@ -269,7 +266,6 @@ int start_unit(int argc, char *argv[], void *userdata) {
         _cleanup_strv_free_ char **names = NULL;
         int r, ret = EXIT_SUCCESS;
         sd_bus *bus;
-        char **name;
 
         if (arg_wait && !STR_IN_SET(argv[0], "start", "restart"))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
diff --git a/src/systemctl/systemctl-util.c b/src/systemctl/systemctl-util.c
index ae02af280e..db40154943 100644
--- a/src/systemctl/systemctl-util.c
+++ b/src/systemctl/systemctl-util.c
@@ -234,7 +234,6 @@ int get_unit_list(
 
 int expand_unit_names(sd_bus *bus, char **names, const char* suffix, char ***ret, bool *ret_expanded) {
         _cleanup_strv_free_ char **mangled = NULL, **globs = NULL;
-        char **name;
         int r;
 
         assert(bus);
@@ -294,7 +293,6 @@ int check_triggering_units(sd_bus *bus, const char *unit) {
         _cleanup_strv_free_ char **triggered_by = NULL;
         bool print_warning_label = true;
         UnitActiveState active_state;
-        char **i;
         int r;
 
         r = unit_name_mangle(unit, 0, &n);
@@ -386,8 +384,6 @@ void warn_unit_file_changed(const char *unit) {
 }
 
 int unit_file_find_path(LookupPaths *lp, const char *unit_name, char **ret_unit_path) {
-        char **p;
-
         assert(lp);
         assert(unit_name);
 
@@ -666,7 +662,6 @@ int unit_exists(LookupPaths *lp, const char *unit) {
 
 int append_unit_dependencies(sd_bus *bus, char **names, char ***ret) {
         _cleanup_strv_free_ char **with_deps = NULL;
-        char **name;
 
         assert(bus);
         assert(ret);
@@ -860,7 +855,7 @@ UnitFileFlags unit_file_flags_from_args(void) {
 
 int mangle_names(const char *operation, char **original_names, char ***ret_mangled_names) {
         _cleanup_strv_free_ char **l = NULL;
-        char **i, **name;
+        char **i;
         int r;
 
         assert(ret_mangled_names);
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
index 07a65a2ebc..6a2ca1afbb 100644
--- a/src/sysusers/sysusers.c
+++ b/src/sysusers/sysusers.c
@@ -312,7 +312,6 @@ static int putgrent_with_members(const struct group *gr, FILE *group) {
         if (a) {
                 _cleanup_strv_free_ char **l = NULL;
                 bool added = false;
-                char **i;
 
                 l = strv_copy(gr->gr_mem);
                 if (!l)
@@ -357,7 +356,6 @@ static int putsgent_with_members(const struct sgrp *sg, FILE *gshadow) {
         if (a) {
                 _cleanup_strv_free_ char **l = NULL;
                 bool added = false;
-                char **i;
 
                 l = strv_copy(sg->sg_mem);
                 if (!l)
@@ -1406,8 +1404,6 @@ static int add_implicit(void) {
 
         /* Implicitly create additional users and groups, if they were listed in "m" lines */
         ORDERED_HASHMAP_FOREACH_KEY(l, g, members) {
-                char **m;
-
                 STRV_FOREACH(m, l)
                         if (!ordered_hashmap_get(users, *m)) {
                                 _cleanup_(item_freep) Item *j = NULL;
@@ -1977,7 +1973,6 @@ static int parse_argv(int argc, char *argv[]) {
 }
 
 static int parse_arguments(char **args) {
-        char **arg;
         unsigned pos = 1;
         int r;
 
@@ -1999,7 +1994,6 @@ static int parse_arguments(char **args) {
 static int read_config_files(char **args) {
         _cleanup_strv_free_ char **files = NULL;
         _cleanup_free_ char *p = NULL;
-        char **f;
         int r;
 
         r = conf_files_list_with_replacement(arg_root, CONF_PATHS_STRV("sysusers.d"), arg_replace, &files, &p);
diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c
index bb74b486be..428509f4ce 100644
--- a/src/sysv-generator/sysv-generator.c
+++ b/src/sysv-generator/sysv-generator.c
@@ -103,7 +103,6 @@ static int generate_unit_file(SysvStub *s) {
         _cleanup_free_ char *path_escaped = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         const char *unit;
-        char **p;
         int r;
 
         assert(s);
@@ -707,7 +706,6 @@ static int acquire_search_path(const char *def, const char *envvar, char ***ret)
 
 static int enumerate_sysv(const LookupPaths *lp, Hashmap *all_services) {
         _cleanup_strv_free_ char **sysvinit_path = NULL;
-        char **path;
         int r;
 
         assert(lp);
@@ -791,7 +789,6 @@ static int set_dependencies_from_rcnd(const LookupPaths *lp, Hashmap *all_servic
         Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
         _cleanup_strv_free_ char **sysvrcnd_path = NULL;
         SysvStub *service;
-        char **p;
         int r;
 
         assert(lp);
diff --git a/src/test/test-bpf-foreign-programs.c b/src/test/test-bpf-foreign-programs.c
index 1765dc7a9b..56933c87bf 100644
--- a/src/test/test-bpf-foreign-programs.c
+++ b/src/test/test-bpf-foreign-programs.c
@@ -133,8 +133,6 @@ static int bpf_foreign_test_to_string(enum bpf_attach_type attach_type, const ch
 }
 
 static char **unlink_paths_and_free(char **paths) {
-        char **i;
-
         STRV_FOREACH(i, paths)
                 (void) unlink(*i);
 
diff --git a/src/test/test-bpf-lsm.c b/src/test/test-bpf-lsm.c
index 258c2e575e..4a3b327a3f 100644
--- a/src/test/test-bpf-lsm.c
+++ b/src/test/test-bpf-lsm.c
@@ -16,7 +16,6 @@ static int test_restrict_filesystems(Manager *m, const char *unit_name, const ch
         _cleanup_free_ char *exec_start = NULL;
         _cleanup_(unit_freep) Unit *u = NULL;
         ExecContext *ec = NULL;
-        char **allow_filesystem;
         int cld_code, r;
 
         assert_se(u = unit_new(m, sizeof(Service)));
diff --git a/src/test/test-copy.c b/src/test/test-copy.c
index c7ed054207..01c6638dcf 100644
--- a/src/test/test-copy.c
+++ b/src/test/test-copy.c
@@ -83,7 +83,6 @@ TEST(copy_tree) {
         char **hardlinks = STRV_MAKE("hlink", "file",
                                      "hlink2", "dir1/file");
         const char *unixsockp;
-        char **p, **ll;
         struct stat st;
         int xattr_worked = -1; /* xattr support is optional in temporary directories, hence use it if we can,
                                 * but don't fail if we can't */
diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c
index 19523aa0d9..4d5f39b5b7 100644
--- a/src/test/test-env-util.c
+++ b/src/test/test-env-util.c
@@ -412,7 +412,6 @@ TEST(unsetenv_erase) {
         r = safe_fork("(sd-unsetenverase)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL);
         if (r == 0) {
                 _cleanup_strv_free_ char **l = NULL;
-                char **e;
 
                 /* child */
 
diff --git a/src/test/test-exec-util.c b/src/test/test-exec-util.c
index 47a82eb969..d6ee16b1fe 100644
--- a/src/test/test-exec-util.c
+++ b/src/test/test-exec-util.c
@@ -217,7 +217,7 @@ static int gather_stdout_one(int fd, void *arg) {
         return 0;
 }
 static int gather_stdout_two(int fd, void *arg) {
-        char ***s = arg, **t;
+        char ***s = arg;
 
         STRV_FOREACH(t, *s)
                 assert_se(write(fd, *t, strlen(*t)) == (ssize_t) strlen(*t));
@@ -287,7 +287,7 @@ TEST(stdout_gathering) {
 }
 
 TEST(environment_gathering) {
-        char template[] = "/tmp/test-exec-util.XXXXXXX", **p;
+        char template[] = "/tmp/test-exec-util.XXXXXXX";
         const char *dirs[] = {template, NULL};
         const char *name, *name2, *name3, *old;
         int r;
diff --git a/src/test/test-execute.c b/src/test/test-execute.c
index 0760df6603..3b4b02184c 100644
--- a/src/test/test-execute.c
+++ b/src/test/test-execute.c
@@ -606,7 +606,6 @@ static int find_libraries(const char *exec, char ***ret) {
         _cleanup_strv_free_ char **v = NULL;
         assert_se(strv_split_newlines_full(&v, result, 0) >= 0);
 
-        char **q;
         STRV_FOREACH(q, v) {
                 _cleanup_free_ char *word = NULL;
                 const char *p = *q;
@@ -674,7 +673,6 @@ static void test_exec_mount_apivfs(Manager *m) {
         assert_se(strextend(&data, "BindReadOnlyPaths=", fullpath_touch, "\n"));
         assert_se(strextend(&data, "BindReadOnlyPaths=", fullpath_test, "\n"));
 
-        char **p;
         STRV_FOREACH(p, libraries)
                 assert_se(strextend(&data, "BindReadOnlyPaths=", *p, "\n"));
 
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
index 238ae8f586..3e98d94019 100644
--- a/src/test/test-fileio.c
+++ b/src/test/test-fileio.c
@@ -35,7 +35,6 @@ TEST(parse_env_file) {
                         *six = NULL, *seven = NULL, *eight = NULL, *nine = NULL, *ten = NULL,
                         *eleven = NULL, *twelve = NULL, *thirteen = NULL;
         _cleanup_strv_free_ char **a = NULL, **b = NULL;
-        char **i;
         unsigned k;
         int r;
 
@@ -171,7 +170,6 @@ TEST(parse_multiline_env_file) {
                 p[] = "/tmp/test-fileio-out-XXXXXX";
         FILE *f;
         _cleanup_strv_free_ char **a = NULL, **b = NULL;
-        char **i;
         int r;
 
         assert_se(fmkostemp_safe(t, "w", &f) == 0);
@@ -221,7 +219,6 @@ TEST(merge_env_file) {
         _cleanup_(unlink_tempfilep) char t[] = "/tmp/test-fileio-XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **a = NULL;
-        char **i;
         int r;
 
         assert_se(fmkostemp_safe(t, "w", &f) == 0);
@@ -285,7 +282,6 @@ TEST(merge_env_file_invalid) {
         _cleanup_(unlink_tempfilep) char t[] = "/tmp/test-fileio-XXXXXX";
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **a = NULL;
-        char **i;
         int r;
 
         assert_se(fmkostemp_safe(t, "w", &f) == 0);
@@ -486,7 +482,6 @@ TEST(load_env_file_pairs) {
         int fd, r;
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **l = NULL;
-        char **k, **v;
 
         fd = mkostemp_safe(fn);
         assert_se(fd >= 0);
diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
index f53a3ebf59..67b6996907 100644
--- a/src/test/test-fs-util.c
+++ b/src/test/test-fs-util.c
@@ -692,7 +692,6 @@ TEST(rename_noreplace) {
 
         _cleanup_(rm_rf_physical_and_freep) char *z = NULL;
         const char *j = NULL;
-        char **a, **b;
 
         if (arg_test_dir)
                 j = strjoina(arg_test_dir, "/testXXXXXX");
diff --git a/src/test/test-kbd-util.c b/src/test/test-kbd-util.c
index f15cff4794..0a166c6e1f 100644
--- a/src/test/test-kbd-util.c
+++ b/src/test/test-kbd-util.c
@@ -7,7 +7,6 @@
 
 int main(int argc, char *argv[]) {
         _cleanup_strv_free_ char **maps = NULL;
-        char **m;
         int r;
 
         log_show_color(true);
diff --git a/src/test/test-locale-util.c b/src/test/test-locale-util.c
index 55f86f7c2f..3243e3c567 100644
--- a/src/test/test-locale-util.c
+++ b/src/test/test-locale-util.c
@@ -10,7 +10,6 @@
 
 TEST(get_locales) {
         _cleanup_strv_free_ char **locales = NULL;
-        char **p;
         int r;
 
         r = get_locales(&locales);
@@ -58,7 +57,6 @@ TEST(locale_is_installed) {
 
 TEST(keymaps) {
         _cleanup_strv_free_ char **kmaps = NULL;
-        char **p;
         int r;
 
         assert_se(!keymap_is_valid(""));
diff --git a/src/test/test-nss-hosts.c b/src/test/test-nss-hosts.c
index eac2c74f4c..70dbb30ed4 100644
--- a/src/test/test-nss-hosts.c
+++ b/src/test/test-nss-hosts.c
@@ -67,8 +67,6 @@ static int print_gaih_addrtuples(const struct gaih_addrtuple *tuples) {
 }
 
 static void print_struct_hostent(struct hostent *host, const char *canon) {
-        char **s;
-
         log_info("        \"%s\"", host->h_name);
         STRV_FOREACH(s, host->h_aliases)
                 log_info("        alias \"%s\"", *s);
@@ -376,7 +374,6 @@ static int test_one_module(const char *dir,
         if (!handle)
                 return -EINVAL;
 
-        char **name;
         STRV_FOREACH(name, names)
                 test_byname(handle, module, *name);
 
@@ -424,7 +421,6 @@ static int parse_argv(int argc, char **argv,
         assert_se(modules);
 
         if (argc > 2) {
-                char **name;
                 int family;
                 union in_addr_union address;
 
@@ -463,7 +459,6 @@ static int run(int argc, char **argv) {
         _cleanup_strv_free_ char **modules = NULL, **names = NULL;
         _cleanup_free_ struct local_address *addresses = NULL;
         int n_addresses = 0;
-        char **module;
         int r;
 
         test_setup_logging(LOG_INFO);
diff --git a/src/test/test-nss-users.c b/src/test/test-nss-users.c
index c415c0ca3b..70c5f25e08 100644
--- a/src/test/test-nss-users.c
+++ b/src/test/test-nss-users.c
@@ -170,7 +170,6 @@ static int test_one_module(const char *dir,
         if (!handle)
                 return -EINVAL;
 
-        char **name;
         STRV_FOREACH(name, names)
                 test_byname(handle, module, *name);
 
@@ -235,7 +234,6 @@ static int parse_argv(int argc, char **argv,
 static int run(int argc, char **argv) {
         _cleanup_free_ char *dir = NULL;
         _cleanup_strv_free_ char **modules = NULL, **names = NULL;
-        char **module;
         int r;
 
         test_setup_logging(LOG_INFO);
diff --git a/src/test/test-path-lookup.c b/src/test/test-path-lookup.c
index a19a33c64b..2c30260f7b 100644
--- a/src/test/test-path-lookup.c
+++ b/src/test/test-path-lookup.c
@@ -43,7 +43,7 @@ TEST(paths) {
 
 TEST(user_and_global_paths) {
         _cleanup_(lookup_paths_free) LookupPaths lp_global = {}, lp_user = {};
-        char **u, **g, **p;
+        char **u, **g;
         unsigned k = 0;
 
         assert_se(unsetenv("SYSTEMD_UNIT_PATH") == 0);
@@ -81,7 +81,6 @@ static void test_generator_binary_paths_one(UnitFileScope scope) {
         _cleanup_strv_free_ char **env_gp_with_env = NULL;
         char *systemd_generator_path = NULL;
         char *systemd_env_generator_path = NULL;
-        char **dir;
 
         assert_se(mkdtemp(template));
 
diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
index b9c4ef4126..d40febef5f 100644
--- a/src/test/test-path-util.c
+++ b/src/test/test-path-util.c
@@ -481,7 +481,6 @@ TEST(path_strv_resolve) {
         char tmp_dir[] = "/tmp/test-path-util-XXXXXX";
         _cleanup_strv_free_ char **search_dirs = NULL;
         _cleanup_strv_free_ char **absolute_dirs = NULL;
-        char **d;
 
         assert_se(mkdtemp(tmp_dir) != NULL);
 
diff --git a/src/test/test-path.c b/src/test/test-path.c
index 529487d1ad..2690dc0aa4 100644
--- a/src/test/test-path.c
+++ b/src/test/test-path.c
@@ -24,7 +24,6 @@ typedef void (*test_function_t)(Manager *m);
 static int setup_test(Manager **m) {
         char **tests_path = STRV_MAKE("exists", "existsglobFOOBAR", "changed", "modified", "unit",
                                       "directorynotempty", "makedirectory");
-        char **test_path;
         Manager *tmp = NULL;
         int r;
 
diff --git a/src/test/test-sd-path.c b/src/test/test-sd-path.c
index 10a8a4a63f..4f23e3bb69 100644
--- a/src/test/test-sd-path.c
+++ b/src/test/test-sd-path.c
@@ -32,7 +32,6 @@ TEST(sd_path_lookup) {
 TEST(sd_path_lookup_strv) {
         for (uint64_t i = 0; i < _SD_PATH_MAX; i++) {
                 _cleanup_strv_free_ char **t = NULL, **s = NULL;
-                char **item;
                 int r;
 
                 r = sd_path_lookup_strv(i, NULL, &t);
diff --git a/src/test/test-socket-bind.c b/src/test/test-socket-bind.c
index ecad86baeb..c5c5477f69 100644
--- a/src/test/test-socket-bind.c
+++ b/src/test/test-socket-bind.c
@@ -13,7 +13,7 @@
 #include "virt.h"
 
 static int find_netcat_executable(char **ret_path) {
-        char **candidates = STRV_MAKE("ncat", "nc", "netcat"), **c;
+        char **candidates = STRV_MAKE("ncat", "nc", "netcat");
         int r = 0;
 
         STRV_FOREACH(c, candidates) {
@@ -36,7 +36,6 @@ static int test_socket_bind(
         _cleanup_(unit_freep) Unit *u = NULL;
         CGroupSocketBindItem *bi;
         CGroupContext *cc = NULL;
-        char **rule;
         int cld_code, r;
 
         assert_se(u = unit_new(m, sizeof(Service)));
diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c
index 071b391361..93b674baab 100644
--- a/src/test/test-string-util.c
+++ b/src/test/test-string-util.c
@@ -865,7 +865,6 @@ TEST(strverscmp_improved) {
                 "124",
                 NULL,
         };
-        const char * const *p, * const *q;
 
         STRV_FOREACH(p, versions)
                 STRV_FOREACH(q, p + 1)
diff --git a/src/test/test-strv.c b/src/test/test-strv.c
index 0ece342521..e6aa2e793e 100644
--- a/src/test/test-strv.c
+++ b/src/test/test-strv.c
@@ -204,7 +204,6 @@ static void test_strv_unquote_one(const char *quoted, char **list) {
         _cleanup_strv_free_ char **s;
         _cleanup_free_ char *j;
         unsigned i = 0;
-        char **t;
         int r;
 
         log_info("/* %s */", __func__);
@@ -446,7 +445,6 @@ TEST(strv_split_colon_pairs) {
 
 TEST(strv_split_newlines) {
         unsigned i = 0;
-        char **s;
         _cleanup_strv_free_ char **l = NULL;
         const char str[] = "one\ntwo\nthree";
 
@@ -619,7 +617,6 @@ TEST(strv_extendf) {
 TEST(strv_foreach) {
         _cleanup_strv_free_ char **a;
         unsigned i = 0;
-        char **check;
 
         a = strv_new("one", "two", "three");
         assert_se(a);
@@ -631,7 +628,6 @@ TEST(strv_foreach) {
 TEST(strv_foreach_backwards) {
         _cleanup_strv_free_ char **a;
         unsigned i = 2;
-        char **check;
 
         a = strv_new("one", "two", "three");
 
@@ -649,7 +645,6 @@ TEST(strv_foreach_backwards) {
 
 TEST(strv_foreach_pair) {
         _cleanup_strv_free_ char **a = NULL;
-        char **x, **y;
 
         a = strv_new("pair_one",   "pair_one",
                      "pair_two",   "pair_two",
diff --git a/src/test/test-sysctl-util.c b/src/test/test-sysctl-util.c
index 8bd3c26152..02180dc4be 100644
--- a/src/test/test-sysctl-util.c
+++ b/src/test/test-sysctl-util.c
@@ -27,7 +27,6 @@ static const char* const cases[] = {
 };
 
 TEST(sysctl_normalize) {
-        const char **s, **expected;
         STRV_FOREACH_PAIR(s, expected, (const char**) cases) {
                 _cleanup_free_ char *t;
 
diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c
index 799d271a44..15f4a0c169 100644
--- a/src/test/test-time-util.c
+++ b/src/test/test-time-util.c
@@ -258,7 +258,6 @@ TEST(timezone_is_valid) {
 TEST(get_timezones) {
         _cleanup_strv_free_ char **zones = NULL;
         int r;
-        char **zone;
 
         r = get_timezones(&zones);
         assert_se(r == 0);
diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c
index 8ed56ad3b8..261bd7412f 100644
--- a/src/test/test-unit-file.c
+++ b/src/test/test-unit-file.c
@@ -55,7 +55,6 @@ TEST(unit_file_build_name_map) {
         if (r == 0)
                 log_debug("Cache rebuild skipped based on mtime.");
 
-        char **id;
         STRV_FOREACH(id, ids) {
                  const char *fragment, *name;
                  _cleanup_set_free_free_ Set *names = NULL;
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
index 66b454269d..874ff773e1 100644
--- a/src/timedate/timedated.c
+++ b/src/timedate/timedated.c
@@ -190,7 +190,6 @@ static int context_parse_ntp_services_from_environment(Context *c) {
 
 static int context_parse_ntp_services_from_disk(Context *c) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         r = conf_files_list_strv(&files, ".list", NULL, CONF_FILES_FILTER_MASKED, UNIT_LIST_DIRS);
diff --git a/src/timesync/timesyncd-manager.c b/src/timesync/timesyncd-manager.c
index 918da195d8..67f9a33993 100644
--- a/src/timesync/timesyncd-manager.c
+++ b/src/timesync/timesyncd-manager.c
@@ -961,7 +961,6 @@ Manager* manager_free(Manager *m) {
 static int manager_network_read_link_servers(Manager *m) {
         _cleanup_strv_free_ char **ntp = NULL;
         ServerName *n, *nx;
-        char **i;
         bool changed = false;
         int r;
 
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index aa7ff73a36..17b9c6ab9a 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -1019,8 +1019,6 @@ static int parse_xattrs_from_arg(Item *i) {
 }
 
 static int fd_set_xattrs(Item *i, int fd, const char *path, const struct stat *st) {
-        char **name, **value;
-
         assert(i);
         assert(fd >= 0);
         assert(path);
@@ -1939,7 +1937,6 @@ static int glob_item(Item *i, action_t action) {
                 .gl_opendir = (void *(*)(const char *)) opendir_nomod,
         };
         int r = 0, k;
-        char **fn;
 
         k = safe_glob(i->path, GLOB_NOSORT|GLOB_BRACE, &g);
         if (k < 0 && k != -ENOENT)
@@ -1959,7 +1956,6 @@ static int glob_item_recursively(Item *i, fdaction_t action) {
                 .gl_opendir = (void *(*)(const char *)) opendir_nomod,
         };
         int r = 0, k;
-        char **fn;
 
         k = safe_glob(i->path, GLOB_NOSORT|GLOB_BRACE, &g);
         if (k < 0 && k != -ENOENT)
@@ -2695,8 +2691,6 @@ static bool item_compatible(Item *a, Item *b) {
 }
 
 static bool should_include_path(const char *path) {
-        char **prefix;
-
         STRV_FOREACH(prefix, arg_exclude_prefixes)
                 if (path_startswith(path, *prefix)) {
                         log_debug("Entry \"%s\" matches exclude prefix \"%s\", skipping.",
@@ -2746,8 +2740,7 @@ static int specifier_expansion_from_arg(const Specifier *specifier_table, Item *
                 return free_and_replace(i->argument, resolved);
         }
         case SET_XATTR:
-        case RECURSIVE_SET_XATTR: {
-                char **xattr;
+        case RECURSIVE_SET_XATTR:
                 STRV_FOREACH(xattr, i->xattrs) {
                         _cleanup_free_ char *resolved = NULL;
 
@@ -2758,7 +2751,7 @@ static int specifier_expansion_from_arg(const Specifier *specifier_table, Item *
                         free_and_replace(*xattr, resolved);
                 }
                 return 0;
-        }
+
         default:
                 return 0;
         }
@@ -3611,7 +3604,6 @@ static int read_config_file(char **config_dirs, const char *fn, bool ignore_enoe
 }
 
 static int parse_arguments(char **config_dirs, char **args, bool *invalid_config) {
-        char **arg;
         int r;
 
         STRV_FOREACH(arg, args) {
@@ -3626,7 +3618,6 @@ static int parse_arguments(char **config_dirs, char **args, bool *invalid_config
 static int read_config_files(char **config_dirs, char **args, bool *invalid_config) {
         _cleanup_strv_free_ char **files = NULL;
         _cleanup_free_ char *p = NULL;
-        char **f;
         int r;
 
         r = conf_files_list_with_replacement(arg_root, config_dirs, arg_replace, &files, &p);
@@ -3733,7 +3724,6 @@ static int run(int argc, char *argv[]) {
 
         if (DEBUG_LOGGING) {
                 _cleanup_free_ char *t = NULL;
-                char **i;
 
                 STRV_FOREACH(i, config_dirs) {
                         _cleanup_free_ char *j = NULL;
diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c
index 54a03af082..15a1faedce 100644
--- a/src/tty-ask-password-agent/tty-ask-password-agent.c
+++ b/src/tty-ask-password-agent/tty-ask-password-agent.c
@@ -59,7 +59,7 @@ static int send_passwords(const char *socket_name, char **passwords) {
         union sockaddr_union sa;
         socklen_t sa_len;
         size_t packet_length = 1;
-        char **p, *d;
+        char *d;
         ssize_t n;
         int r;
 
@@ -554,8 +554,6 @@ static int ask_on_this_console(const char *tty, pid_t *ret_pid, char **arguments
         if (r < 0)
                 return r;
         if (r == 0) {
-                char **i;
-
                 assert_se(prctl(PR_SET_PDEATHSIG, SIGHUP) >= 0);
 
                 STRV_FOREACH(i, arguments) {
@@ -635,7 +633,6 @@ static int ask_on_consoles(char *argv[]) {
         _cleanup_set_free_ Set *pids = NULL;
         _cleanup_strv_free_ char **consoles = NULL, **arguments = NULL;
         siginfo_t status = {};
-        char **tty;
         pid_t pid;
         int r;
 
diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
index 05f0f2e0a6..1ac89496c9 100644
--- a/src/udev/net/link-config.c
+++ b/src/udev/net/link-config.c
@@ -315,7 +315,6 @@ static int device_unsigned_attribute(sd_device *device, const char *attr, unsign
 
 int link_config_load(LinkConfigContext *ctx) {
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         link_configs_free(ctx);
@@ -816,7 +815,6 @@ static int link_apply_alternative_names(Link *link, sd_netlink **rtnl) {
         if (r < 0)
                 log_link_debug_errno(link, r, "Failed to get alternative names, ignoring: %m");
 
-        char **p;
         STRV_FOREACH(p, current_altnames)
                 strv_remove(altnames, *p);
 
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
index a60e4f294c..e3065ee923 100644
--- a/src/udev/udev-event.c
+++ b/src/udev/udev-event.c
@@ -573,7 +573,6 @@ static int on_spawn_io(sd_event_source *s, int fd, uint32_t revents, void *userd
         /* Log output only if we watch stderr. */
         if (l > 0 && spawn->fd_stderr >= 0) {
                 _cleanup_strv_free_ char **v = NULL;
-                char **q;
 
                 r = strv_split_newlines_full(&v, p, EXTRACT_RETAIN_ESCAPE);
                 if (r < 0)
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index 243a792662..29b6ae3961 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -1348,7 +1348,6 @@ UdevRules* udev_rules_new(ResolveNameTiming resolve_name_timing) {
 int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing) {
         _cleanup_(udev_rules_freep) UdevRules *rules = NULL;
         _cleanup_strv_free_ char **files = NULL;
-        char **f;
         int r;
 
         rules = udev_rules_new(resolve_name_timing);
@@ -1823,7 +1822,7 @@ static int udev_rule_apply_token_to_event(
         }
         case TK_M_IMPORT_PROGRAM: {
                 _cleanup_strv_free_ char **lines = NULL;
-                char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE], **line;
+                char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE];
 
                 (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false);
                 log_rule_debug(dev, rules, "Importing properties from results of '%s'", buf);
@@ -2422,7 +2421,6 @@ static int apply_static_dev_perms(const char *devnode, uid_t uid, gid_t gid, mod
         char device_node[UDEV_PATH_SIZE], tags_dir[UDEV_PATH_SIZE], tag_symlink[UDEV_PATH_SIZE];
         _cleanup_free_ char *unescaped_filename = NULL;
         struct stat stats;
-        char **t;
         int r;
 
         assert(devnode);
diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c
index 740434bb41..b985961c62 100644
--- a/src/udev/udevadm-info.c
+++ b/src/udev/udevadm-info.c
@@ -522,7 +522,6 @@ int info_main(int argc, char *argv[], void *userdata) {
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "-x/--export or -P/--export-prefix cannot be used with --value");
 
-        char **p;
         STRV_FOREACH(p, devices) {
                 _cleanup_(sd_device_unrefp) sd_device *device = NULL;
 
diff --git a/src/userdb/userdbctl.c b/src/userdb/userdbctl.c
index c2acd85742..85aa6c752c 100644
--- a/src/userdb/userdbctl.c
+++ b/src/userdb/userdbctl.c
@@ -119,9 +119,7 @@ static int display_user(int argc, char *argv[], void *userdata) {
                 (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4, (size_t) 5, (size_t) 6);
         }
 
-        if (argc > 1) {
-                char **i;
-
+        if (argc > 1)
                 STRV_FOREACH(i, argv + 1) {
                         _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
                         uid_t uid;
@@ -151,7 +149,7 @@ static int display_user(int argc, char *argv[], void *userdata) {
                                 draw_separator = true;
                         }
                 }
-        } else {
+        else {
                 _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
 
                 r = userdb_all(arg_userdb_flags, &iterator);
@@ -283,9 +281,7 @@ static int display_group(int argc, char *argv[], void *userdata) {
                 (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3);
         }
 
-        if (argc > 1) {
-                char **i;
-
+        if (argc > 1)
                 STRV_FOREACH(i, argv + 1) {
                         _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
                         gid_t gid;
@@ -315,8 +311,7 @@ static int display_group(int argc, char *argv[], void *userdata) {
                                 draw_separator = true;
                         }
                 }
-
-        } else {
+        else {
                 _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
 
                 r = groupdb_all(arg_userdb_flags, &iterator);
@@ -435,9 +430,7 @@ static int display_memberships(int argc, char *argv[], void *userdata) {
                 (void) table_set_sort(table, (size_t) 0, (size_t) 1);
         }
 
-        if (argc > 1) {
-                char **i;
-
+        if (argc > 1)
                 STRV_FOREACH(i, argv + 1) {
                         _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
 
@@ -468,7 +461,7 @@ static int display_memberships(int argc, char *argv[], void *userdata) {
                                         return r;
                         }
                 }
-        } else {
+        else {
                 _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
 
                 r = membershipdb_all(arg_userdb_flags, &iterator);
@@ -630,12 +623,9 @@ static int ssh_authorized_keys(int argc, char *argv[], void *userdata) {
         else {
                 if (strv_isempty(ur->ssh_authorized_keys))
                         log_debug("User record for %s has no public SSH keys.", argv[1]);
-                else {
-                        char **i;
-
+                else
                         STRV_FOREACH(i, ur->ssh_authorized_keys)
                                 printf("%s\n", *i);
-                }
 
                 if (ur->incomplete) {
                         fflush(stdout);
diff --git a/src/xdg-autostart-generator/xdg-autostart-condition.c b/src/xdg-autostart-generator/xdg-autostart-condition.c
index c4485cf625..9ceea61547 100644
--- a/src/xdg-autostart-generator/xdg-autostart-condition.c
+++ b/src/xdg-autostart-generator/xdg-autostart-condition.c
@@ -13,7 +13,6 @@
 static int run(int argc, char *argv[]) {
         _cleanup_strv_free_ char **only_show_in = NULL, **not_show_in = NULL, **desktops = NULL;
         const char *xdg_current_desktop;
-        char **d;
 
         if (argc != 3)
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
diff --git a/src/xdg-autostart-generator/xdg-autostart-generator.c b/src/xdg-autostart-generator/xdg-autostart-generator.c
index c5c6b54fdc..39ab81c1f2 100644
--- a/src/xdg-autostart-generator/xdg-autostart-generator.c
+++ b/src/xdg-autostart-generator/xdg-autostart-generator.c
@@ -24,7 +24,6 @@ static int enumerate_xdg_autostart(Hashmap *all_services) {
         _cleanup_strv_free_ char **config_dirs = NULL;
         _unused_ _cleanup_strv_free_ char **data_dirs = NULL;
         _cleanup_free_ char *user_config_autostart_dir = NULL;
-        char **path;
         int r;
 
         r = xdg_user_config_dir(&user_config_autostart_dir, "/autostart");