/* Checking macros for fcntl functions.
   Copyright (C) 2007-2018 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
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

#ifndef	_FCNTL_H
# error "Never include <bits/fcntl2.h> directly; use <fcntl.h> instead."
#endif

/* Check that calls to open and openat with O_CREAT or O_TMPFILE set have an
   appropriate third/fourth parameter.  */
#ifndef __USE_FILE_OFFSET64
extern int __open_2 (const char *__path, int __oflag) __nonnull ((1));
extern int __REDIRECT (__open_alias, (const char *__path, int __oflag, ...),
		       open) __nonnull ((1));
#else
extern int __REDIRECT (__open_2, (const char *__path, int __oflag),
		       __open64_2) __nonnull ((1));
extern int __REDIRECT (__open_alias, (const char *__path, int __oflag, ...),
		       open64) __nonnull ((1));
#endif

#define __warn_open_too_many_args \
  "open can be called either with 2 or 3 arguments, not more"
#define __warn_open_missing_mode \
  "open with O_CREAT in second argument needs 3 arguments"
#ifdef __use_clang_fortify
__fortify_overload __clang_prefer_this_overload int
open (const char *const __clang_pass_object_size __path, int __oflag)
     __clang_error_if (__OPEN_NEEDS_MODE (__oflag), __warn_open_missing_mode)
{
  return __open_2 (__path, __oflag);
}

__fortify_overload int
open (const char *const __clang_pass_object_size __path, int __oflag,
      mode_t __mode)
{
  return __open_alias (__path, __oflag, __mode);
}
#else
__errordecl (__open_too_many_args, __warn_open_too_many_args);
__errordecl (__open_missing_mode, __warn_open_missing_mode);

__fortify_function int
open (const char *__path, int __oflag, ...)
{
  if (__va_arg_pack_len () > 1)
    __open_too_many_args ();

  if (__builtin_constant_p (__oflag))
    {
      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
	{
	  __open_missing_mode ();
	  return __open_2 (__path, __oflag);
	}
      return __open_alias (__path, __oflag, __va_arg_pack ());
    }

  if (__va_arg_pack_len () < 1)
    return __open_2 (__path, __oflag);

  return __open_alias (__path, __oflag, __va_arg_pack ());
}
#endif
#undef __warn_open_too_many_args
#undef __warn_open_missing_mode


#ifdef __USE_LARGEFILE64
extern int __open64_2 (const char *__path, int __oflag) __nonnull ((1));
extern int __REDIRECT (__open64_alias, (const char *__path, int __oflag,
					...), open64) __nonnull ((1));

# define __warn_open64_too_many_args \
  "open64 can be called either with 2 or 3 arguments, not more"
# define __warn_open64_missing_mode \
  "open64 with O_CREAT in second argument needs 3 arguments"
# ifdef __use_clang_fortify
__fortify_overload __clang_prefer_this_overload int
open64 (const char *const __clang_pass_object_size __path, int __oflag)
     __clang_error_if (__OPEN_NEEDS_MODE (__oflag), __warn_open64_missing_mode)
{
  return __open64_2 (__path, __oflag);
}

__fortify_overload __clang_prefer_this_overload int
open64 (const char *const __clang_pass_object_size __path, int __oflag,
	int __mode)
{
  return __open64_alias (__path, __oflag, __mode);
}
# else
__errordecl (__open64_too_many_args, __warn_open64_too_many_args);
__errordecl (__open64_missing_mode, __warn_open64_missing_mode);

__fortify_function int
open64 (const char *__path, int __oflag, ...)
{
  if (__va_arg_pack_len () > 1)
    __open64_too_many_args ();

  if (__builtin_constant_p (__oflag))
    {
      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
	{
	  __open64_missing_mode ();
	  return __open64_2 (__path, __oflag);
	}
      return __open64_alias (__path, __oflag, __va_arg_pack ());
    }

  if (__va_arg_pack_len () < 1)
    return __open64_2 (__path, __oflag);

  return __open64_alias (__path, __oflag, __va_arg_pack ());
}
# endif
# undef __warn_open64_too_many_args
# undef __warn_open64_missing_mode
#endif


#ifdef __USE_ATFILE
# ifndef __USE_FILE_OFFSET64
extern int __openat_2 (int __fd, const char *__path, int __oflag)
     __nonnull ((2));
extern int __REDIRECT (__openat_alias, (int __fd, const char *__path,
					int __oflag, ...), openat)
     __nonnull ((2));
# else
extern int __REDIRECT (__openat_2, (int __fd, const char *__path,
				    int __oflag), __openat64_2)
     __nonnull ((2));
extern int __REDIRECT (__openat_alias, (int __fd, const char *__path,
					int __oflag, ...), openat64)
     __nonnull ((2));
# endif

# define __warn_openat_too_many_args "openat can be called either with 3 or " \
       "4 arguments, not more"
# define __warn_openat_missing_mode "openat with O_CREAT in third argument " \
       "needs 4 arguments"
# ifdef __use_clang_fortify
__fortify_error_function __clang_error (__warn_openat_too_many_args) int
openat (int __fd, const char *__path, int __oflag, int __mode, ...);

__fortify_overload __clang_prefer_this_overload int
openat (int __fd, const char *const __clang_pass_object_size __path,
	int __oflag)
     __clang_error_if (__OPEN_NEEDS_MODE (__oflag), __warn_openat_missing_mode)
{
  return __openat_2 (__fd, __path, __oflag);
}

__fortify_overload __clang_prefer_this_overload int
openat (int __fd, const char *const __clang_pass_object_size __path,
	int __oflag, int __mode)
{
  return __openat_alias (__fd, __path, __oflag, __mode);
}
# else
__errordecl (__openat_too_many_args, __warn_openat_too_many_args);
__errordecl (__openat_missing_mode, __warn_openat_missing_mode);

__fortify_function int
openat (int __fd, const char *__path, int __oflag, ...)
{
  if (__va_arg_pack_len () > 1)
    __openat_too_many_args ();

  if (__builtin_constant_p (__oflag))
    {
      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
	{
	  __openat_missing_mode ();
	  return __openat_2 (__fd, __path, __oflag);
	}
      return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
    }

  if (__va_arg_pack_len () < 1)
    return __openat_2 (__fd, __path, __oflag);

  return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
}
# endif
# undef __warn_openat_too_many_args
# undef __warn_openat_missing_mode


# ifdef __USE_LARGEFILE64
extern int __openat64_2 (int __fd, const char *__path, int __oflag)
     __nonnull ((2));
extern int __REDIRECT (__openat64_alias, (int __fd, const char *__path,
					  int __oflag, ...), openat64)
     __nonnull ((2));

#  define __warn_openat64_too_many_args "openat64 can be called either with " \
       "3 or 4 arguments, not more"
#  define __warn_openat64_missing_mode "openat64 with O_CREAT in third " \
       "argument needs 4 arguments"

#  ifdef __use_clang_fortify
__fortify_error_function __clang_error (__warn_openat64_too_many_args) int
openat64 (int __fd, const char *__path, int __oflag, int __mode, ...);

__fortify_overload __clang_prefer_this_overload int
openat64 (int __fd, const char *const __clang_pass_object_size __path,
	  int __oflag)
     __clang_error_if (__OPEN_NEEDS_MODE (__oflag),
                       __warn_openat64_missing_mode)
{
  return __openat64_2 (__fd, __path, __oflag);
}

__fortify_overload __clang_prefer_this_overload int
openat64 (int __fd, const char *const __clang_pass_object_size __path,
	  int __oflag, int __mode)
{
  return __openat64_alias (__fd, __path, __oflag, __mode);
}
#  else
__errordecl (__openat64_too_many_args, __warn_openat64_too_many_args);
__errordecl (__openat64_missing_mode, __warn_openat64_missing_mode);
__fortify_function int
openat64 (int __fd, const char *__path, int __oflag, ...)
{
  if (__va_arg_pack_len () > 1)
    __openat64_too_many_args ();

  if (__builtin_constant_p (__oflag))
    {
      if (__OPEN_NEEDS_MODE (__oflag) && __va_arg_pack_len () < 1)
	{
	  __openat64_missing_mode ();
	  return __openat64_2 (__fd, __path, __oflag);
	}
      return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
    }

  if (__va_arg_pack_len () < 1)
    return __openat64_2 (__fd, __path, __oflag);

  return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
}
#  endif
#  undef __warn_openat64_too_many_args
#  undef __warn_openat64_missing_mode
# endif
#endif
