1 /* dirfd -- Return the file descriptor used by a DIR stream. Hurd version. 2 Copyright (C) 1995-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #include <dirent.h> 20 #include <dirstream.h> 21 #include <hurd/fd.h> 22 #include <errno.h> 23 24 int __dirfd(DIR * dirp)25__dirfd (DIR *dirp) 26 { 27 int fd; 28 29 HURD_CRITICAL_BEGIN; 30 __mutex_lock (&_hurd_dtable_lock); 31 for (fd = 0; fd < _hurd_dtablesize; ++fd) 32 if (_hurd_dtable[fd] == dirp->__fd) 33 break; 34 if (fd == _hurd_dtablesize) 35 { 36 errno = EINVAL; 37 fd = -1; 38 } 39 __mutex_unlock (&_hurd_dtable_lock); 40 HURD_CRITICAL_END; 41 42 return fd; 43 } 44 45 weak_alias (__dirfd, dirfd) 46 libc_hidden_def (dirfd) 47