From 5fef1b7f22ec0ee3730b80bbf972dbf9a8995091 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Wed, 5 Oct 2016 15:38:58 +0200 Subject: libfshelp: Add function to map over all active translators. * libdiskfs/file-syncfs.c (diskfs_S_file_syncfs): Use the new function. * libdiskfs/fsys-options.c (diskfs_S_fsys_set_options): Likewise. * libdiskfs/fsys-syncfs.c (diskfs_S_fsys_syncfs): Likewise. * libdiskfs/shutdown.c (diskfs_shutdown): Likewise. * libfshelp/fshelp.h (fshelp_map_active_translators): New declaration. * libfshelp/translator-list.c (fshelp_map_active_translators): New function. * libnetfs/file-syncfs.c (netfs_S_file_syncfs): Use the new function. * libnetfs/fsys-set-options.c (netfs_S_fsys_set_options): Likewise. * libnetfs/fsys-syncfs.c (netfs_S_fsys_syncfs): Likewise. * libnetfs/shutdown.c (netfs_shutdown): Likewise. --- libfshelp/translator-list.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'libfshelp/translator-list.c') diff --git a/libfshelp/translator-list.c b/libfshelp/translator-list.c index b8fe3f94..c64e1747 100644 --- a/libfshelp/translator-list.c +++ b/libfshelp/translator-list.c @@ -229,3 +229,29 @@ fshelp_get_active_translators (char **translators, pthread_mutex_unlock (&translator_ihash_lock); return err; } + +/* Call FUN for each active translator. If FUN returns non-zero, the + iteration immediately stops, and returns that value. FUN is called + with COOKIE, the name of the translator, and the translators + control port. */ +error_t +fshelp_map_active_translators (error_t (*fun)(void *cookie, + const char *name, + mach_port_t control), + void *cookie) +{ + error_t err = 0; + pthread_mutex_lock (&translator_ihash_lock); + + HURD_IHASH_ITERATE (&translator_ihash, value) + { + struct translator *t = value; + + err = fun (cookie, t->name, t->active); + if (err) + break; + } + + pthread_mutex_unlock (&translator_ihash_lock); + return err; +} -- cgit v1.2.3