Applied, thanks! Sergey Bugaev, le lun. 30 janv. 2023 15:52:14 +0300, a ecrit: > Instead of __file_name_lookup_at delegating to __file_name_lookup > in simple cases, make __file_name_lookup_at deal with both cases, and > have __file_name_lookup simply wrap __file_name_lookup_at. > > Signed-off-by: Sergey Bugaev <buga...@gmail.com> > --- > hurd/hurdlookup.c | 10 ++-------- > hurd/lookup-at.c | 51 ++++++++++++++++++++++++++++++++--------------- > 2 files changed, 37 insertions(+), 24 deletions(-) > > diff --git a/hurd/hurdlookup.c b/hurd/hurdlookup.c > index 49eac443..3cfe444f 100644 > --- a/hurd/hurdlookup.c > +++ b/hurd/hurdlookup.c > @@ -16,6 +16,7 @@ > <https://www.gnu.org/licenses/>. */ > > #include <hurd.h> > +#include <hurd/fd.h> > #include <hurd/lookup.h> > #include <string.h> > #include <fcntl.h> > @@ -220,14 +221,7 @@ weak_alias (__hurd_directory_name_split, > hurd_directory_name_split) > file_t > __file_name_lookup (const char *file_name, int flags, mode_t mode) > { > - error_t err; > - file_t result; > - > - err = __hurd_file_name_lookup (&_hurd_ports_use, &__getdport, 0, > - file_name, flags, mode & ~_hurd_umask, > - &result); > - > - return err ? (__hurd_fail (err), MACH_PORT_NULL) : result; > + return __file_name_lookup_at (AT_FDCWD, 0, file_name, flags, mode); > } > weak_alias (__file_name_lookup, file_name_lookup) > > diff --git a/hurd/lookup-at.c b/hurd/lookup-at.c > index 6f30a067..25dab5a1 100644 > --- a/hurd/lookup-at.c > +++ b/hurd/lookup-at.c > @@ -36,9 +36,6 @@ __file_name_lookup_at (int fd, int at_flags, > if (err) > return (__hurd_fail (err), MACH_PORT_NULL); > > - if (fd == AT_FDCWD || file_name[0] == '/') > - return __file_name_lookup (file_name, flags, mode); > - > if (empty != 0 && file_name[0] == '\0') > { > enum retry_type doretry; > @@ -56,22 +53,44 @@ __file_name_lookup_at (int fd, int at_flags, > return err ? (__hurd_dfail (fd, err), MACH_PORT_NULL) : result; > } > > - file_t startdir; > - error_t use_init_port (int which, error_t (*operate) (mach_port_t)) > + if (fd == AT_FDCWD || file_name[0] == '/') > { > - return (which == INIT_PORT_CWDIR ? (*operate) (startdir) > - : _hurd_ports_use (which, operate)); > + err = __hurd_file_name_lookup (&_hurd_ports_use, &__getdport, 0, > + file_name, flags, mode & ~_hurd_umask, > + &result); > + if (err) > + { > + __hurd_fail (err); > + return MACH_PORT_NULL; > + } > + } > + else > + { > + file_t startdir; > + /* We need to look the file up relative to the given directory (and > + not our cwd). For this to work, we supply our own wrapper for > + _hurd_ports_use, which replaces cwd with our startdir. */ > + error_t use_init_port (int which, error_t (*operate) (mach_port_t)) > + { > + return (which == INIT_PORT_CWDIR ? (*operate) (startdir) > + : _hurd_ports_use (which, operate)); > + } > + > + err = HURD_DPORT_USE (fd, (startdir = port, > + __hurd_file_name_lookup (&use_init_port, > + &__getdport, NULL, > + file_name, > + flags, > + mode & > ~_hurd_umask, > + &result))); > + if (err) > + { > + __hurd_dfail (fd, err); > + return MACH_PORT_NULL; > + } > } > > - err = HURD_DPORT_USE (fd, (startdir = port, > - __hurd_file_name_lookup (&use_init_port, > - &__getdport, NULL, > - file_name, > - flags, > - mode & ~_hurd_umask, > - &result))); > - > - return err ? (__hurd_dfail (fd, err), MACH_PORT_NULL) : result; > + return result; > } > > file_t > -- > 2.39.1 >
-- Samuel --- Pour une évaluation indépendante, transparente et rigoureuse ! Je soutiens la Commission d'Évaluation de l'Inria.