Home | History | Annotate | Line # | Download | only in libiberty
filedescriptor.c revision 1.1.1.3
      1      1.1  christos /* File descriptor related functions.
      2      1.1  christos 
      3  1.1.1.3  christos    Copyright (C) 2019-2024 Free Software Foundation, Inc.
      4      1.1  christos 
      5      1.1  christos    This file is part of the libiberty library.
      6      1.1  christos 
      7      1.1  christos    This program is free software; you can redistribute it and/or modify
      8      1.1  christos    it under the terms of the GNU General Public License as published by
      9      1.1  christos    the Free Software Foundation; either version 2 of the License, or
     10      1.1  christos    (at your option) any later version.
     11      1.1  christos 
     12      1.1  christos    This program is distributed in the hope that it will be useful,
     13      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15      1.1  christos    GNU General Public License for more details.
     16      1.1  christos 
     17      1.1  christos    You should have received a copy of the GNU General Public License
     18      1.1  christos    along with this program; if not, write to the Free Software
     19      1.1  christos    Foundation, Inc., 51 Franklin Street - Fifth Floor,
     20      1.1  christos    Boston, MA 02110-1301, USA.  */
     21      1.1  christos 
     22      1.1  christos #include "config.h"
     23      1.1  christos #include "ansidecl.h"
     24      1.1  christos #include "libiberty.h"
     25      1.1  christos 
     26      1.1  christos #ifdef HAVE_FCNTL_H
     27      1.1  christos #include <fcntl.h>
     28      1.1  christos #endif
     29      1.1  christos 
     30      1.1  christos #if defined (_WIN32)
     31      1.1  christos #define WIN32_LEAN_AND_MEAN
     32      1.1  christos #include <windows.h> /* for GetFullPathName */
     33      1.1  christos #endif
     34      1.1  christos /* Return true when FD file descriptor exists.  */
     35      1.1  christos 
     36      1.1  christos int
     37      1.1  christos is_valid_fd (int fd)
     38      1.1  christos {
     39      1.1  christos #if defined(_WIN32)
     40      1.1  christos   HANDLE h = (HANDLE) _get_osfhandle (fd);
     41      1.1  christos   return h != (HANDLE) -1;
     42      1.1  christos #elif defined(F_GETFD)
     43      1.1  christos   return fcntl (fd, F_GETFD) >= 0;
     44      1.1  christos #else
     45      1.1  christos   return dup2 (fd, fd) < 0;
     46      1.1  christos #endif
     47      1.1  christos }
     48