root/maint/gnulib/lib/fdopen.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. fdopen_nothrow
  2. rpl_fdopen

   1 /* Open a stream with a given file descriptor.
   2    Copyright (C) 2011-2021 Free Software Foundation, Inc.
   3 
   4    This file is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU Lesser General Public License as
   6    published by the Free Software Foundation; either version 2.1 of the
   7    License, or (at your option) any later version.
   8 
   9    This file is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12    GNU Lesser General Public License for more details.
  13 
  14    You should have received a copy of the GNU Lesser General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 #include <config.h>
  18 
  19 /* Specification.  */
  20 #include <stdio.h>
  21 
  22 #include <errno.h>
  23 
  24 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER
  25 # include "msvc-inval.h"
  26 #endif
  27 
  28 #undef fdopen
  29 
  30 #if defined _WIN32 && !defined __CYGWIN__
  31 # if HAVE_MSVC_INVALID_PARAMETER_HANDLER
  32 static FILE *
  33 fdopen_nothrow (int fd, const char *mode)
     /* [previous][next][first][last][top][bottom][index][help] */
  34 {
  35   FILE *result;
  36 
  37   TRY_MSVC_INVAL
  38     {
  39       result = _fdopen (fd, mode);
  40     }
  41   CATCH_MSVC_INVAL
  42     {
  43       result = NULL;
  44     }
  45   DONE_MSVC_INVAL;
  46 
  47   return result;
  48 }
  49 # else
  50 #  define fdopen_nothrow _fdopen
  51 # endif
  52 #else
  53 # define fdopen_nothrow fdopen
  54 #endif
  55 
  56 FILE *
  57 rpl_fdopen (int fd, const char *mode)
     /* [previous][next][first][last][top][bottom][index][help] */
  58 {
  59   int saved_errno = errno;
  60   FILE *fp;
  61 
  62   errno = 0;
  63   fp = fdopen_nothrow (fd, mode);
  64   if (fp == NULL)
  65     {
  66       if (errno == 0)
  67         errno = EBADF;
  68     }
  69   else
  70     errno = saved_errno;
  71 
  72   return fp;
  73 }

/* [previous][next][first][last][top][bottom][index][help] */