Blame gl/tests/fdopen.c

Packit 549fdc
/* Open a stream with a given file descriptor.
Packit 549fdc
   Copyright (C) 2011-2016 Free Software Foundation, Inc.
Packit 549fdc
Packit 549fdc
   This program is free software: you can redistribute it and/or modify
Packit 549fdc
   it under the terms of the GNU General Public License as published by
Packit 549fdc
   the Free Software Foundation; either version 3 of the License, or
Packit 549fdc
   (at your option) any later version.
Packit 549fdc
Packit 549fdc
   This program is distributed in the hope that it will be useful,
Packit 549fdc
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 549fdc
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 549fdc
   GNU General Public License for more details.
Packit 549fdc
Packit 549fdc
   You should have received a copy of the GNU General Public License
Packit 549fdc
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit 549fdc
Packit 549fdc
#include <config.h>
Packit 549fdc
Packit 549fdc
/* Specification.  */
Packit 549fdc
#include <stdio.h>
Packit 549fdc
Packit 549fdc
#include <errno.h>
Packit 549fdc
Packit 549fdc
#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
Packit 549fdc
# include "msvc-inval.h"
Packit 549fdc
#endif
Packit 549fdc
Packit 549fdc
#undef fdopen
Packit 549fdc
Packit 549fdc
#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
Packit 549fdc
static FILE *
Packit 549fdc
fdopen_nothrow (int fd, const char *mode)
Packit 549fdc
{
Packit 549fdc
  FILE *result;
Packit 549fdc
Packit 549fdc
  TRY_MSVC_INVAL
Packit 549fdc
    {
Packit 549fdc
      result = fdopen (fd, mode);
Packit 549fdc
    }
Packit 549fdc
  CATCH_MSVC_INVAL
Packit 549fdc
    {
Packit 549fdc
      result = NULL;
Packit 549fdc
    }
Packit 549fdc
  DONE_MSVC_INVAL;
Packit 549fdc
Packit 549fdc
  return result;
Packit 549fdc
}
Packit 549fdc
#else
Packit 549fdc
# define fdopen_nothrow fdopen
Packit 549fdc
#endif
Packit 549fdc
Packit 549fdc
FILE *
Packit 549fdc
rpl_fdopen (int fd, const char *mode)
Packit 549fdc
{
Packit 549fdc
  int saved_errno = errno;
Packit 549fdc
  FILE *fp;
Packit 549fdc
Packit 549fdc
  errno = 0;
Packit 549fdc
  fp = fdopen_nothrow (fd, mode);
Packit 549fdc
  if (fp == NULL)
Packit 549fdc
    {
Packit 549fdc
      if (errno == 0)
Packit 549fdc
        errno = EBADF;
Packit 549fdc
    }
Packit 549fdc
  else
Packit 549fdc
    errno = saved_errno;
Packit 549fdc
Packit 549fdc
  return fp;
Packit 549fdc
}