From fdf14ae2e653f275c085329b183373e1fb062693 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 5 Sep 2009 23:37:40 +0200 Subject: do not save/restore errno around free() calls In any non-buggy program free() does not fail. And when it fails in a buggy program, the failure is usually fatal (heap corruption and segfault). Signed-off-by: Denys Vlasenko --- libc/misc/dirent/opendir.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'libc/misc/dirent') diff --git a/libc/misc/dirent/opendir.c b/libc/misc/dirent/opendir.c index 70b30658e..672ef15a4 100644 --- a/libc/misc/dirent/opendir.c +++ b/libc/misc/dirent/opendir.c @@ -87,16 +87,17 @@ DIR *opendir(const char *name) fd = open(name, O_RDONLY|O_NDELAY|O_DIRECTORY|O_CLOEXEC); if (fd < 0) return NULL; - /* Note: we should check to make sure that between the stat() and open() * call, 'name' didnt change on us, but that's only if O_DIRECTORY isnt * defined and since Linux has supported it for like ever, i'm not going * to worry about it right now (if ever). */ + if (fstat(fd, &statbuf) < 0) { - int saved_errno; - saved_errno = errno; + // this close() never fails + //int saved_errno; + //saved_errno = errno; close(fd); - __set_errno(saved_errno); + //__set_errno(saved_errno); return NULL; } -- cgit v1.2.3