From e08859424e01697fe556e277283e8e1905327ce7 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Tue, 22 Aug 2017 13:07:54 +0200 Subject: libfshelp: Use node instead of name as key. Previously, libfshelp used the name of an translator as key in the hash table. This however is flawed, because a translator is bound to a node, and a node can have zero or more links in the file system. Use the nodes address (or rather, the address of the transbox embedded in the node) as key instead. * libfshelp/fshelp.h (fshelp_set_active_translator): Instead of the control port, hand the whole transbox to the function. * libfshelp/translator-list.c (struct translator): New field 'locp'. (hash): Hash pointer. (compare): Compare pointer. (translator_ihash): Use an location pointer. (fshelp_set_active_translator): Use the address of the transbox as key. (fshelp_remove_active_translator): Remove using the location pointer. * libdiskfs/dir-lookup.c (diskfs_S_dir_lookup): Fix callsite. * libdiskfs/file-set-trans.c (diskfs_S_file_set_translator): Likewise. * libnetfs/dir-lookup.c (netfs_S_dir_lookup): Likewise. * libnetfs/file-set-translator.c (netfs_S_file_set_translator): Likewise. --- libfshelp/fshelp.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libfshelp/fshelp.h') diff --git a/libfshelp/fshelp.h b/libfshelp/fshelp.h index d1dd49c4..7663ba1d 100644 --- a/libfshelp/fshelp.h +++ b/libfshelp/fshelp.h @@ -38,16 +38,16 @@ require multi threading but depend on the ports library. */ struct port_info; +struct transbox; /* Record an active translator being bound to the given file name - NAME. ACTIVE is the control port of the translator. PI references - a receive port that is used to request dead name notifications, - typically the port for the underlying node passed to the - translator. */ + NAME. TRANSBOX is the nodes transbox. PI references a receive + port that is used to request dead name notifications, typically the + port for the underlying node passed to the translator. */ error_t fshelp_set_active_translator (struct port_info *pi, const char *name, - mach_port_t active); + const struct transbox *transbox); /* Remove the active translator specified by its control port ACTIVE. If there is no active translator with the given control port, this -- cgit v1.2.3