From 8db34fe108b62c166d65bb70377f5e01867dc9fb Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 23 Oct 1998 22:31:15 +0000 Subject: [PATCH] 1998-10-24 Roland McGrath * sysdeps/mach/hurd/opendir.c (__opendir): Return ENOENT for "". (__opendir): Add trailing slash to name for open, for ENOTDIR check. --- sysdeps/mach/hurd/opendir.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/sysdeps/mach/hurd/opendir.c b/sysdeps/mach/hurd/opendir.c index 2919f8f465..ae92fd9043 100644 --- a/sysdeps/mach/hurd/opendir.c +++ b/sysdeps/mach/hurd/opendir.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1993, 94, 95, 96, 97, 98 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -39,7 +39,29 @@ __opendir (const char *name) int fd; struct hurd_fd *d; - fd = __open (name, O_RDONLY); + if (name[0] == '\0') + { + /* POSIX.1-1990 says an empty name gets ENOENT; + but `open' might like it fine. */ + __set_errno (ENOENT); + return NULL; + } + + { + /* Append trailing slash to directory name to force ENOTDIR + if it's not a directory. */ + size_t len = strlen (name); + if (name[len - 1] == '/') + fd = __open (name, O_RDONLY); + else + { + char n[len + 2]; + memcpy (n, name, len); + n[len] = '/'; + n[len + 1] = '\0'; + fd = __open (n, O_RDONLY); + } + } if (fd < 0) return NULL; -- 2.43.5