Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Jan 2014 19:41:05 -0600
From:      Bryan Drewery <bryan@shatow.net>
To:        freebsd-standards@FreeBSD.org
Cc:        bapt@FreeBSD.org
Subject:   closedir(3) handling NULL
Message-ID:  <20140124014105.GC37334@admin.xzibition.com>

next in thread | raw e-mail | index | archive | help

--bjuZg6miEcdLYP6q
Content-Type: multipart/mixed; boundary="7gGkHNMELEOhSGF6"
Content-Disposition: inline


--7gGkHNMELEOhSGF6
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi,

Please review. I would like to commit this.

I found that Linux handles closedir(NULL) fine and returns EINVAL. POSIX
[1] specifies that EBADF should be returned if "The dirp argument does
not refer to an open directory stream"

[1] http://pubs.opengroup.org/onlinepubs/009696799/functions/closedir.html

I've updated fdclosedir(3) as well to behave the same.

I'll also update the manpage if there is no objection.

Thanks,
Bryan Drewery

--7gGkHNMELEOhSGF6
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="closedir-NULL.diff"
Content-Transfer-Encoding: quoted-printable

Fix closedir(3) and fdclosedir(3) to return EBADF on NULL value.

POSIX specifies that EBADF should be returned if "The dirp argument does
not refer to an open directory stream"

diff --git lib/libc/gen/closedir.c lib/libc/gen/closedir.c
index 88ded37..d7a5bdb 100644
--- lib/libc/gen/closedir.c
+++ lib/libc/gen/closedir.c
@@ -53,6 +53,11 @@ fdclosedir(DIR *dirp)
 {
 	int fd;
=20
+	if (dirp =3D=3D NULL) {
+		errno =3D EBADF;
+		return (-1);
+	}
+
 	if (__isthreaded)
 		_pthread_mutex_lock(&dirp->dd_lock);
 	fd =3D dirp->dd_fd;
@@ -71,6 +76,10 @@ fdclosedir(DIR *dirp)
 int
 closedir(DIR *dirp)
 {
+	int fd;
+
+	if ((fd =3D fdclosedir(dirp)) =3D=3D -1)
+		return (-1);
=20
-	return (_close(fdclosedir(dirp)));
+	return (_close(fd));
 }

--7gGkHNMELEOhSGF6--

--bjuZg6miEcdLYP6q
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (FreeBSD)

iQJ8BAEBCgBmBQJS4cSxXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w
ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQzNkZFQkU5OTJGNTI4MERGNDgxMTM2MkE2
RTc4MkFDMDNDOUIwQ0Y5AAoJEG54KsA8mwz5tKUP+QEo5yVcaAynGvyVVJmEr0m2
IuXb4UaAOVnGKu3Ju85vegOZR/r6QIfObMtgykJspb/TbKqG0t2GXH81UYUnXCJl
qsCH5Vm0LOowdPuv50DZRr0/Ewwn/jDR152xhQJ4qn2sna7EWXNm9vRObNUp8Qru
FqBN6RSvmHvdxR9E7/GnN1cGsEDofJTJIGl23ejQu5+mQoXbFaudsGSLEmERBAb2
lygGZzJVKHZHnLLECmvnW8OYh/kOoZVuaC5rny2JjEMbFdy6uon3vUEJ7KRpWf6h
yjgAJyZxpQrMl+/K7x4ZgIq7hI7FE8y6G5r9pyYgYI3dNqrtXsWpQmHFzmCYVzF2
7l/BPfw9a8uj4JJXEmkVsBLpjt7V/prL9HlHRWYK0LwcLpfv1YzYBt1JcVQy/63+
8/r4ftSd/t38t6wIK1dTuWvjogANqagqA64PGO5lyCGJLe9w3HUnTWshDsg5iyu8
zq50+SDwjDor4cSVwJfIX1DXcRQwHmdF8SnChxfZLxseHUipRORPxW3vbg3wSqj9
z46EfCwJWEr6nO6FRYU5ChAFd6uHPdLfVOvlQT1xyV4SAibR/EMoX3KNCOW7gbsX
ULCsVL8xrul2CweEpIM/vBbwHo+u/yhcF1PVyq6lnsmqqafq/V05GAkXE2Kl9jll
XaYiMu7JxV24RYJNp7dW
=ZQBm
-----END PGP SIGNATURE-----

--bjuZg6miEcdLYP6q--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140124014105.GC37334>