[v2,1/3] hurd: Consolidate file_name_lookup implementation
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
Commit Message
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 <bugaevc@gmail.com>
---
hurd/hurdlookup.c | 10 ++--------
hurd/lookup-at.c | 51 ++++++++++++++++++++++++++++++++---------------
2 files changed, 37 insertions(+), 24 deletions(-)
Comments
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 <bugaevc@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
>
@@ -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)
@@ -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