]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Use array_foreach_elem() where possible
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 10 Feb 2021 19:09:42 +0000 (21:09 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 7 May 2021 10:09:35 +0000 (10:09 +0000)
src/master/main.c
src/master/master-client.c
src/master/master-settings.c
src/master/service-listen.c
src/master/service-log.c
src/master/service-monitor.c
src/master/service.c

index 0e257a27e52390aea006f075a5a00bccc185f734..3b17fc762d1798fd8f92a090465ebb6f8c204059 100644 (file)
@@ -514,7 +514,7 @@ static void main_log_startup(char **protocols)
 
 static void master_set_process_limit(void)
 {
-       struct service *const *servicep;
+       struct service *service;
        unsigned int process_limit = 0;
        rlim_t nproc;
 
@@ -525,8 +525,8 @@ static void master_set_process_limit(void)
           guess: mail processes should probably be counted together for a
           common vmail user (unless system users are being used), but
           we can't really guess what the mail processes are. */
-       array_foreach(&services->services, servicep)
-               process_limit += (*servicep)->process_limit;
+       array_foreach_elem(&services->services, service)
+               process_limit += service->process_limit;
 
        if (restrict_get_process_limit(&nproc) == 0 &&
            process_limit > nproc)
index 73de3ae3a7c18252d178c23f9099d20a62a8cf09..c8f24a4649508f8111ae13599976a1d743410e54 100644 (file)
@@ -37,12 +37,12 @@ master_client_service_status_output(string_t *str,
 static int
 master_client_service_status(struct master_client *client)
 {
-       struct service *const *servicep;
+       struct service *service;
        string_t *str = t_str_new(128);
 
-       array_foreach(&services->services, servicep) {
+       array_foreach_elem(&services->services, service) {
                str_truncate(str, 0);
-               master_client_service_status_output(str, *servicep);
+               master_client_service_status_output(str, service);
                o_stream_nsend(client->conn.output, str_data(str), str_len(str));
        }
        o_stream_nsend_str(client->conn.output, "\n");
@@ -65,14 +65,14 @@ static int
 master_client_process_status(struct master_client *client,
                             const char *const *args)
 {
-       struct service *const *servicep;
+       struct service *service;
        struct service_process *p;
        string_t *str = t_str_new(128);
 
-       array_foreach(&services->services, servicep) {
-               if (args[0] != NULL && !str_array_find(args, (*servicep)->set->name))
+       array_foreach_elem(&services->services, service) {
+               if (args[0] != NULL && !str_array_find(args, service->set->name))
                        continue;
-               for (p = (*servicep)->processes; p != NULL; p = p->next) {
+               for (p = service->processes; p != NULL; p = p->next) {
                        str_truncate(str, 0);
                        master_client_process_output(str, p);
                        o_stream_nsend(client->conn.output,
index cb99dc483f0975667ab4907155ea85a99b444cce..7cfaa35a30e51de7344588c4cb726fa0983066f0 100644 (file)
@@ -281,16 +281,14 @@ fix_file_listener_paths(ARRAY_TYPE(file_listener_settings) *l,
                        ARRAY_TYPE(const_string) *all_listeners,
                        const char **error_r)
 {
-       struct file_listener_settings *const *sets;
+       struct file_listener_settings *set;
        size_t base_dir_len = strlen(master_set->base_dir);
        enum service_user_default user_default;
 
        if (!array_is_created(l))
                return TRUE;
 
-       array_foreach(l, sets) {
-               struct file_listener_settings *set = *sets;
-
+       array_foreach_elem(l, set) {
                if (set->path[0] == '\0') {
                        *error_r = "path must not be empty";
                        return FALSE;
@@ -316,15 +314,13 @@ fix_file_listener_paths(ARRAY_TYPE(file_listener_settings) *l,
 static void add_inet_listeners(ARRAY_TYPE(inet_listener_settings) *l,
                               ARRAY_TYPE(const_string) *all_listeners)
 {
-       struct inet_listener_settings *const *sets;
+       struct inet_listener_settings *set;
        const char *str;
 
        if (!array_is_created(l))
                return;
 
-       array_foreach(l, sets) {
-               struct inet_listener_settings *set = *sets;
-
+       array_foreach_elem(l, set) {
                if (set->port != 0) {
                        str = t_strdup_printf("%u:%s", set->port, set->address);
                        array_push_back(all_listeners, &str);
@@ -372,11 +368,9 @@ static void service_set_login_dump_core(struct service_settings *set)
 static bool
 services_have_protocol(struct master_settings *set, const char *name)
 {
-       struct service_settings *const *services;
-
-       array_foreach(&set->services, services) {
-               struct service_settings *service = *services;
+       struct service_settings *service;
 
+       array_foreach_elem(&set->services, service) {
                if (strcmp(service->protocol, name) == 0)
                        return TRUE;
        }
@@ -388,11 +382,11 @@ static const struct service_settings *
 master_default_settings_get_service(const char *name)
 {
        extern struct master_settings master_default_settings;
-       struct service_settings *const *setp;
+       struct service_settings *set;
 
-       array_foreach(&master_default_settings.services, setp) {
-               if (strcmp((*setp)->name, name) == 0)
-                       return *setp;
+       array_foreach_elem(&master_default_settings.services, set) {
+               if (strcmp(set->name, name) == 0)
+                       return set;
        }
        return NULL;
 }
@@ -401,12 +395,12 @@ master_default_settings_get_service(const char *name)
 static unsigned int
 service_get_client_limit(struct master_settings *set, const char *name)
 {
-       struct service_settings *const *servicep;
+       struct service_settings *service;
 
-       array_foreach(&set->services, servicep) {
-               if (strcmp((*servicep)->name, name) == 0) {
-                       if ((*servicep)->client_limit != 0)
-                               return (*servicep)->client_limit;
+       array_foreach_elem(&set->services, service) {
+               if (strcmp(service->name, name) == 0) {
+                       if (service->client_limit != 0)
+                               return service->client_limit;
                        else
                                return set->default_client_limit;
                }
@@ -659,16 +653,14 @@ master_settings_verify(void *_set, pool_t pool, const char **error_r)
 static bool
 login_want_core_dumps(const struct master_settings *set, gid_t *gid_r)
 {
-       struct service_settings *const *services;
+       struct service_settings *service;
        const char *error;
        bool cores = FALSE;
        uid_t uid;
 
        *gid_r = (gid_t)-1;
 
-       array_foreach(&set->services, services) {
-               struct service_settings *service = *services;
-
+       array_foreach_elem(&set->services, service) {
                if (service->parsed_type == SERVICE_TYPE_LOGIN) {
                        if (service->login_dump_core)
                                cores = TRUE;
@@ -684,17 +676,13 @@ static bool
 settings_have_auth_unix_listeners_in(const struct master_settings *set,
                                     const char *dir)
 {
-       struct service_settings *const *services;
-       struct file_listener_settings *const *uls;
+       struct service_settings *service;
+       struct file_listener_settings *u;
        size_t dir_len = strlen(dir);
 
-       array_foreach(&set->services, services) {
-               struct service_settings *service = *services;
-
+       array_foreach_elem(&set->services, service) {
                if (array_is_created(&service->unix_listeners)) {
-                       array_foreach(&service->unix_listeners, uls) {
-                               struct file_listener_settings *u = *uls;
-
+                       array_foreach_elem(&service->unix_listeners, u) {
                                if (strncmp(u->path, dir, dir_len) == 0 &&
                                    u->path[dir_len] == '/')
                                        return TRUE;
index 1e597c81933858560b95484a3875d5a0e532ad79..8237aa0455d1ae62ad77f257bacdf7d155dc03e9 100644 (file)
@@ -227,12 +227,10 @@ int service_listener_listen(struct service_listener *l)
 
 static int service_listen(struct service *service)
 {
-       struct service_listener *const *listeners;
+       struct service_listener *l;
        int ret = 1, ret2 = 0;
 
-       array_foreach(&service->listeners, listeners) {
-               struct service_listener *l = *listeners;
-
+       array_foreach_elem(&service->listeners, l) {
                if (l->fd != -1)
                        continue;
 
@@ -284,7 +282,7 @@ static int get_socket_info(int fd, sa_family_t *family_r, in_port_t *port_r)
 
 static int services_verify_systemd(struct service_list *service_list)
 {
-       struct service *const *services;
+       struct service *service;
        static int sd_fds = -1;
        int fd, fd_max;
 
@@ -304,11 +302,10 @@ static int services_verify_systemd(struct service_list *service_list)
                        sa_family_t family;
                        get_socket_info(fd, &family, &port);
                        
-                       array_foreach(&service_list->services, services) {
-                               struct service_listener *const *listeners;
+                       array_foreach_elem(&service_list->services, service) {
+                               struct service_listener *l;
 
-                               array_foreach(&(*services)->listeners, listeners) {
-                                       struct service_listener *l = *listeners;
+                               array_foreach_elem(&service->listeners, l) {
                                        if (l->type != SERVICE_LISTENER_INET)
                                                continue;
                                        if (l->set.inetset.set->port == port &&
@@ -366,11 +363,11 @@ static int services_listen_master(struct service_list *service_list)
 
 int services_listen(struct service_list *service_list)
 {
-       struct service *const *services;
+       struct service *service;
        int ret = 1, ret2;
 
-       array_foreach(&service_list->services, services) {
-               ret2 = service_listen(*services);
+       array_foreach_elem(&service_list->services, service) {
+               ret2 = service_listen(service);
                if (ret2 < ret)
                        ret = ret2;
        }
index ae48d66c680074bf2474af2a4f2165ef6319c58f..f5af931f1910bd59e90252eaf740ba0e8c1ac888 100644 (file)
@@ -71,7 +71,7 @@ service_process_write_log_bye(int fd, struct service_process *process)
 
 int services_log_init(struct service_list *service_list)
 {
-       struct service *const *services;
+       struct service *service;
        const char *log_prefix;
        buffer_t *handshake_buf;
        ssize_t ret = 0;
@@ -91,9 +91,7 @@ int services_log_init(struct service_list *service_list)
                                            service_process_write_log_bye);
 
        fd = MASTER_LISTEN_FD_FIRST + 1;
-       array_foreach(&service_list->services, services) {
-               struct service *service = *services;
-
+       array_foreach_elem(&service_list->services, service) {
                if (service->type == SERVICE_TYPE_LOG)
                        continue;
 
@@ -153,16 +151,14 @@ void services_log_dup2(ARRAY_TYPE(dup2) *dups,
                       struct service_list *service_list,
                       unsigned int first_fd, unsigned int *fd_count)
 {
-       struct service *const *services;
+       struct service *service;
        unsigned int n = 0;
 
        /* master log fd is always the first one */
        dup2_append(dups, service_list->master_log_fd[0], first_fd);
        n++; *fd_count += 1;
 
-       array_foreach(&service_list->services, services) {
-               struct service *service = *services;
-
+       array_foreach_elem(&service_list->services, service) {
                if (service->log_fd[1] == -1)
                        continue;
 
index 7ac76082e4a3f628c8ac005f771744bd88e379cd..4b12ed1d0b07f51590eaebe6f0d50daa4619689a 100644 (file)
@@ -241,14 +241,14 @@ static void service_monitor_throttle(struct service *service)
 
 static void service_drop_timeout(struct service *service)
 {
-       struct service_listener *const *lp;
+       struct service_listener *lp;
        int fd;
 
        i_assert(service->process_avail == 0);
 
        /* drop all pending connections */
-       array_foreach(&service->listeners, lp) {
-               while ((fd = net_accept((*lp)->fd, NULL, NULL)) > 0)
+       array_foreach_elem(&service->listeners, lp) {
+               while ((fd = net_accept(lp->fd, NULL, NULL)) > 0)
                        net_disconnect(fd);
        }
 
@@ -390,16 +390,14 @@ static void service_monitor_start_extra_avail(struct service *service)
 
 static void service_monitor_listen_start_force(struct service *service)
 {
-       struct service_listener *const *listeners;
+       struct service_listener *l;
 
        service->listening = TRUE;
        service->listen_pending = FALSE;
        timeout_remove(&service->to_drop);
        timeout_remove(&service->to_drop_warning);
 
-       array_foreach(&service->listeners, listeners) {
-               struct service_listener *l = *listeners;
-
+       array_foreach_elem(&service->listeners, l) {
                if (l->io == NULL && l->fd != -1)
                        l->io = io_add(l->fd, IO_READ, service_accept, l);
        }
@@ -417,13 +415,10 @@ void service_monitor_listen_start(struct service *service)
 
 void service_monitor_listen_stop(struct service *service)
 {
-       struct service_listener *const *listeners;
-
-       array_foreach(&service->listeners, listeners) {
-               struct service_listener *l = *listeners;
+       struct service_listener *l;
 
+       array_foreach_elem(&service->listeners, l)
                io_remove(&l->io);
-       }
        service->listening = FALSE;
        service->listen_pending = FALSE;
        timeout_remove(&service->to_drop);
@@ -467,7 +462,7 @@ static int service_login_create_notify_fd(struct service *service)
 void services_monitor_start(struct service_list *service_list)
 {
        ARRAY(struct service *) listener_services;
-       struct service *const *services;
+       struct service *service;
 
        if (services_log_init(service_list) < 0)
                return;
@@ -481,9 +476,7 @@ void services_monitor_start(struct service_list *service_list)
        }
 
        t_array_init(&listener_services, array_count(&service_list->services));
-       array_foreach(&service_list->services, services) {
-               struct service *service = *services;
-
+       array_foreach_elem(&service_list->services, service) {
                if (service->type == SERVICE_TYPE_LOGIN) {
                        if (service_login_create_notify_fd(service) < 0)
                                continue;
@@ -518,8 +511,8 @@ void services_monitor_start(struct service_list *service_list)
        }
 
        /* create processes only after adding all listeners */
-       array_foreach(&listener_services, services)
-               service_monitor_start_extra_avail(*services);
+       array_foreach_elem(&listener_services, service)
+               service_monitor_start_extra_avail(service);
 
        if (service_list->log->status_fd[0] != -1) {
                if (service_process_create(service_list->log) != NULL)
@@ -527,9 +520,7 @@ void services_monitor_start(struct service_list *service_list)
        }
 
        /* start up a process for startup-services */
-       array_foreach(&service_list->services, services) {
-               struct service *service = *services;
-
+       array_foreach_elem(&service_list->services, service) {
                if (service->type == SERVICE_TYPE_STARTUP &&
                    service->status_fd[0] != -1) {
                        if (service_process_create(service) != NULL)
@@ -579,20 +570,17 @@ void service_monitor_stop(struct service *service)
 
 void service_monitor_stop_close(struct service *service)
 {
-       struct service_listener *const *listeners;
+       struct service_listener *l;
 
        service_monitor_stop(service);
 
-       array_foreach(&service->listeners, listeners) {
-               struct service_listener *l = *listeners;
-
+       array_foreach_elem(&service->listeners, l)
                i_close_fd(&l->fd);
-       }
 }
 
 static void services_monitor_wait(struct service_list *service_list)
 {
-       struct service *const *servicep;
+       struct service *service;
        struct timeval tv_start;
        bool finished;
 
@@ -602,10 +590,10 @@ static void services_monitor_wait(struct service_list *service_list)
        for (;;) {
                finished = TRUE;
                services_monitor_reap_children();
-               array_foreach(&service_list->services, servicep) {
-                       if ((*servicep)->status_fd[0] != -1)
-                               service_status_input(*servicep);
-                       if ((*servicep)->process_avail > 0)
+               array_foreach_elem(&service_list->services, service) {
+                       if (service->status_fd[0] != -1)
+                               service_status_input(service);
+                       if (service->process_avail > 0)
                                finished = FALSE;
                }
                io_loop_time_refresh();
@@ -635,11 +623,11 @@ static bool service_processes_close_listeners(struct service *service)
 static bool
 service_list_processes_close_listeners(struct service_list *service_list)
 {
-       struct service *const *servicep;
+       struct service *service;
        bool ret = FALSE;
 
-       array_foreach(&service_list->services, servicep) {
-               if (service_processes_close_listeners(*servicep))
+       array_foreach_elem(&service_list->services, service) {
+               if (service_processes_close_listeners(service))
                        ret = TRUE;
        }
        return ret;
@@ -668,18 +656,18 @@ static void services_monitor_wait_and_kill(struct service_list *service_list)
 
 void services_monitor_stop(struct service_list *service_list, bool wait)
 {
-       struct service *const *services;
+       struct service *service;
 
-       array_foreach(&service_list->services, services)
-               service_monitor_close_dead_pipe(*services);
+       array_foreach_elem(&service_list->services, service)
+               service_monitor_close_dead_pipe(service);
 
        if (wait)
                services_monitor_wait_and_kill(service_list);
 
        io_remove(&service_list->io_master);
 
-       array_foreach(&service_list->services, services)
-               service_monitor_stop(*services);
+       array_foreach_elem(&service_list->services, service)
+               service_monitor_stop(service);
 
        services_log_deinit(service_list);
 }
index 0a7779416a54930d3fcac06e0d08298a12b2c94a..e94dfbcca7a8e5f88cecf790709600db71bed3d7 100644 (file)
@@ -362,11 +362,9 @@ service_create(pool_t pool, const struct service_settings *set,
 struct service *
 service_lookup(struct service_list *service_list, const char *name)
 {
-       struct service *const *services;
-
-       array_foreach(&service_list->services, services) {
-               struct service *service = *services;
+       struct service *service;
 
+       array_foreach_elem(&service_list->services, service) {
                if (strcmp(service->set->name, name) == 0)
                        return service;
        }
@@ -376,11 +374,9 @@ service_lookup(struct service_list *service_list, const char *name)
 struct service *
 service_lookup_type(struct service_list *service_list, enum service_type type)
 {
-       struct service *const *services;
-
-       array_foreach(&service_list->services, services) {
-               struct service *service = *services;
+       struct service *service;
 
+       array_foreach_elem(&service_list->services, service) {
                if (service->type == type)
                        return service;
        }
@@ -578,7 +574,7 @@ void service_login_notify(struct service *service, bool all_processes_full)
 
 static void services_kill_timeout(struct service_list *service_list)
 {
-       struct service *const *services, *log_service;
+       struct service *service, *log_service;
        unsigned int service_uninitialized, uninitialized_count = 0;
        unsigned int signal_count = 0;
        int sig;
@@ -590,9 +586,7 @@ static void services_kill_timeout(struct service_list *service_list)
        service_list->sigterm_sent = TRUE;
 
        log_service = NULL;
-       array_foreach(&service_list->services, services) {
-               struct service *service = *services;
-
+       array_foreach_elem(&service_list->services, service) {
                if (service->type == SERVICE_TYPE_LOG)
                        log_service = service;
                else {
@@ -655,16 +649,16 @@ void service_list_ref(struct service_list *service_list)
 
 void service_list_unref(struct service_list *service_list)
 {
-       struct service *const *servicep;
-       struct service_listener *const *listenerp;
+       struct service *service;
+       struct service_listener *listener;
 
        i_assert(service_list->refcount > 0);
        if (--service_list->refcount > 0)
                return;
 
-       array_foreach(&service_list->services, servicep) {
-               array_foreach(&(*servicep)->listeners, listenerp)
-                       i_close_fd(&(*listenerp)->fd);
+       array_foreach_elem(&service_list->services, service) {
+               array_foreach_elem(&service->listeners, listener)
+                       i_close_fd(&listener->fd);
        }
        i_close_fd(&service_list->master_fd);
 
@@ -691,18 +685,18 @@ static void service_throttle_timeout(struct service *service)
 
 static void service_drop_listener_connections(struct service *service)
 {
-       struct service_listener *const *listenerp;
+       struct service_listener *listener;
        int fd;
 
-       array_foreach(&service->listeners, listenerp) {
-               switch ((*listenerp)->type) {
+       array_foreach_elem(&service->listeners, listener) {
+               switch (listener->type) {
                case SERVICE_LISTENER_UNIX:
                case SERVICE_LISTENER_INET:
-                       if ((*listenerp)->fd == -1) {
+                       if (listener->fd == -1) {
                                /* already stopped listening */
                                break;
                        }
-                       while ((fd = net_accept((*listenerp)->fd,
+                       while ((fd = net_accept(listener->fd,
                                                NULL, NULL)) >= 0)
                                i_close_fd(&fd);
                        break;
@@ -728,11 +722,9 @@ void service_throttle(struct service *service, unsigned int msecs)
 void services_throttle_time_sensitives(struct service_list *list,
                                       unsigned int msecs)
 {
-       struct service *const *services;
-
-       array_foreach(&list->services, services) {
-               struct service *service = *services;
+       struct service *service;
 
+       array_foreach_elem(&list->services, service) {
                if (service->type == SERVICE_TYPE_UNKNOWN)
                        service_throttle(service, msecs);
        }