From 655bfb8bffc4da7d5c8411a4e2f94919b64d4e02 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Sat, 6 Jan 2001 12:31:35 +0000 Subject: [PATCH] * sysdeps/mach/hurd/readdir_r.c (__readdir_r): Return error number instead of -1 on failure. Don't forget to copy file name into *ENTRY if successful. Set *RESULT to NULL upon reaching the end of the directory. * sysdeps/mach/hurd/readdir_r.c (__readdir_r): Return error number instead of -1 on failure. Don't forget to copy file name into *ENTRY if successful. Set *RESULT to NULL upon reaching the end of the directory. 2001-01-06 Mark Kettenis --- ChangeLog | 7 +++++++ sysdeps/mach/hurd/readdir_r.c | 12 ++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1e67404..56b534a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2001-01-06 Mark Kettenis + * sysdeps/mach/hurd/readdir_r.c (__readdir_r): Return error number + instead of -1 on failure. Don't forget to copy file name into + *ENTRY if successful. Set *RESULT to NULL upon reaching the end + of the directory. + +2001-01-06 Mark Kettenis + * sysdeps/mach/hurd/xstatconv.c (xstat64_conv): Don't forget to copy st_atime member. diff --git a/sysdeps/mach/hurd/readdir_r.c b/sysdeps/mach/hurd/readdir_r.c index c8b8e4b..dad4a31 100644 --- a/sysdeps/mach/hurd/readdir_r.c +++ b/sysdeps/mach/hurd/readdir_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1993, 94, 95, 96, 1997, 2001 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 @@ -33,11 +33,12 @@ int __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result) { struct dirent *dp; + error_t err = 0; if (dirp == NULL) { errno = EINVAL; - return -1; + return errno; } __libc_lock_lock (dirp->__lock); @@ -50,7 +51,6 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result) char *data = dirp->__data; int nentries; - error_t err; if (err = HURD_FD_PORT_USE (dirp->__fd, __dir_readdir (port, @@ -102,11 +102,15 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result) if (dp) { *entry = *dp; + memcpy (entry->d_name, dp->d_name, dp->d_namlen + 1); *result = entry; } + else + *result = NULL; __libc_lock_unlock (dirp->__lock); - return dp ? 0 : -1; + return dp ? 0 : err ? errno : 0; } + weak_alias (__readdir_r, readdir_r) -- 2.7.4