diff options
| author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-08-31 14:59:15 +0200 |
|---|---|---|
| committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2014-08-31 14:59:15 +0200 |
| commit | a2c3cb7cfc9ff6cab8c7dd38f52a2399ac203649 (patch) | |
| tree | 5e306ebc4549f69bf5744c6df1e849463ad1e029 /debian/patches/0003-hurd-clarify-semantic-of-file_get_children.patch | |
| parent | 33d1dae72943600c3ba56dd136df48287fe09222 (diff) | |
add patch series
Diffstat (limited to 'debian/patches/0003-hurd-clarify-semantic-of-file_get_children.patch')
| -rw-r--r-- | debian/patches/0003-hurd-clarify-semantic-of-file_get_children.patch | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/debian/patches/0003-hurd-clarify-semantic-of-file_get_children.patch b/debian/patches/0003-hurd-clarify-semantic-of-file_get_children.patch new file mode 100644 index 00000000..242fb37b --- /dev/null +++ b/debian/patches/0003-hurd-clarify-semantic-of-file_get_children.patch @@ -0,0 +1,170 @@ +From 1dad0a1542d6baf1dfb7f77a486381f85da2b4b0 Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Sun, 31 Aug 2014 14:47:42 +0200 +Subject: [PATCH 3/3] hurd: clarify semantic of file_get_children + +When first introduced as fsys_get_children, it made sense to return +the list of children using paths relative to the root of the +filesystem that was queried. Making the get_children method part of +the fsys protocol was a mistake that has since been corrected in +9366d6b2. + +Instead of returning paths relative to the root of the translator, +return paths relative to the path of the receiving node. + +* hurd/fs.defs (file_get_children): Update comment. +* libfshelp/translator-list.c (fshelp_get_active_translators): Add +argument PREFIX. Filter entries not beginning with PREFIX if +non-NULL, and omit PREFIX from the returned paths. +* libfshelp/fshelp.h (fshelp_get_active_translators): Update comment +accordingly. Also clarify that both FILTER and PREFIX can be NULL. +* libdiskfs/file-get-children.c (diskfs_S_file_get_children): Update +comment, pass prefix to fshelp_get_active_translators. +* libnetfs/file-get-children.c (netfs_S_file_get_children): Likewise. +--- + hurd/fs.defs | 4 ++-- + libdiskfs/file-get-children.c | 9 +++++---- + libfshelp/fshelp.h | 9 ++++++--- + libfshelp/translator-list.c | 16 ++++++++++++---- + libnetfs/file-get-children.c | 9 +++++---- + 5 files changed, 30 insertions(+), 17 deletions(-) + +diff --git a/hurd/fs.defs b/hurd/fs.defs +index 2452682..a4a48cc 100644 +--- a/hurd/fs.defs ++++ b/hurd/fs.defs +@@ -354,8 +354,8 @@ routine file_reparent ( + out new_file: mach_port_send_t); + + /* Return any active translators bound to nodes below FILE. CHILDREN +- is an argz vector containing file names relative to the root of the +- receiving translator. */ ++ is an argz vector containing file names relative to the path of ++ FILE. */ + routine file_get_children ( + file: file_t; + RPT +diff --git a/libdiskfs/file-get-children.c b/libdiskfs/file-get-children.c +index 4581e4e..98d5d60 100644 +--- a/libdiskfs/file-get-children.c ++++ b/libdiskfs/file-get-children.c +@@ -24,9 +24,9 @@ + + #include <argz.h> + +-/* Return any active translators bound to nodes of the receiving +- filesystem. CHILDREN is an argz vector containing file names +- relative to the root of the receiving translator. */ ++/* Return any active translators bound to nodes below CRED. CHILDREN ++ is an argz vector containing file names relative to the path of ++ CRED. */ + error_t + diskfs_S_file_get_children (struct protid *cred, + char **children, +@@ -79,7 +79,8 @@ diskfs_S_file_get_children (struct protid *cred, + char *c = NULL; + size_t c_len = 0; + +- err = fshelp_get_active_translators (&c, &c_len, check_access); ++ err = fshelp_get_active_translators (&c, &c_len, check_access, ++ cred->po->path); + if (err) + goto errout; + +diff --git a/libfshelp/fshelp.h b/libfshelp/fshelp.h +index 5d3a0ce..1c6f04a 100644 +--- a/libfshelp/fshelp.h ++++ b/libfshelp/fshelp.h +@@ -61,12 +61,15 @@ fshelp_remove_active_translator (mach_port_t active); + included in the list. */ + typedef error_t (*fshelp_filter) (const char *path); + +-/* Records the list of active translators into the argz vector +- specified by TRANSLATORS filtered by FILTER. */ ++/* Records the list of active translators below PREFIX into the argz ++ vector specified by TRANSLATORS filtered by FILTER. If PREFIX is ++ NULL, entries with any prefix are considered. If FILTER is NULL, ++ no filter is applied. */ + error_t + fshelp_get_active_translators (char **translators, + size_t *translators_len, +- fshelp_filter filter); ++ fshelp_filter filter, ++ const char *prefix); + + + /* Passive translator linkage */ +diff --git a/libfshelp/translator-list.c b/libfshelp/translator-list.c +index 3ece711..7b4c497 100644 +--- a/libfshelp/translator-list.c ++++ b/libfshelp/translator-list.c +@@ -160,12 +160,13 @@ fshelp_remove_active_translator (mach_port_t active) + return err; + } + +-/* Records the list of active translators into the argz vector +- specified by TRANSLATORS filtered by FILTER. */ ++/* Records the list of active translators below PREFIX into the argz ++ vector specified by TRANSLATORS filtered by FILTER. */ + error_t + fshelp_get_active_translators (char **translators, + size_t *translators_len, +- fshelp_filter filter) ++ fshelp_filter filter, ++ const char *prefix) + { + error_t err = 0; + pthread_mutex_lock (&translator_ihash_lock); +@@ -173,6 +174,13 @@ fshelp_get_active_translators (char **translators, + HURD_IHASH_ITERATE (&translator_ihash, value) + { + struct translator *t = value; ++ ++ if (prefix != NULL ++ && (strncmp (t->name, prefix, strlen (prefix)) != 0 ++ || t->name[strlen (prefix)] != '/')) ++ /* Skip this entry, as it is not below PREFIX. */ ++ continue; ++ + if (filter) + { + char *dir = strdup (t->name); +@@ -192,7 +200,7 @@ fshelp_get_active_translators (char **translators, + } + + err = argz_add (translators, translators_len, +- t->name); ++ &t->name[prefix? strlen (prefix) + 1: 0]); + if (err) + break; + } +diff --git a/libnetfs/file-get-children.c b/libnetfs/file-get-children.c +index bd7e8fc..e8ceddf 100644 +--- a/libnetfs/file-get-children.c ++++ b/libnetfs/file-get-children.c +@@ -24,9 +24,9 @@ + + #include <argz.h> + +-/* Return any active translators bound to nodes of the receiving +- filesystem. CHILDREN is an argz vector containing file names +- relative to the root of the receiving translator. */ ++/* Return any active translators bound to nodes below CRED. CHILDREN ++ is an argz vector containing file names relative to the path of ++ CRED. */ + error_t + netfs_S_file_get_children (struct protid *cred, + char **children, +@@ -93,7 +93,8 @@ netfs_S_file_get_children (struct protid *cred, + char *c = NULL; + size_t c_len = 0; + +- err = fshelp_get_active_translators (&c, &c_len, check_access); ++ err = fshelp_get_active_translators (&c, &c_len, check_access, ++ cred->po->path); + if (err) + goto errout; + +-- +2.1.0 + |
