/*  DO NOT EDIT THIS FILE.

    It has been auto-edited by fixincludes from:

	"fixinc/tests/inc/fcntl.h"

    This had to be done to correct non-standard usages in the
    original, manufacturer supplied header file.  */

#ifndef FIXINC_WRAP_FCNTL_H_AIX_EXTERNC
#define FIXINC_WRAP_FCNTL_H_AIX_EXTERNC 1

#ifdef __cplusplus
extern "C" {
#endif


#if defined( AAB_AIX_FCNTL_CHECK )

#endif  /* AAB_AIX_FCNTL_CHECK */


#if defined( VXWORKS_POSIX_OPEN_CHECK )
extern int open (const char *, int, int);

#if defined(__cplusplus)
extern "C++" {
  inline int open (const char *, int) __attribute__((__always_inline__));

  inline int
  open (const char *name, int flags)
  {
    return open (name, flags, 0);
  }
}
#endif

extern int open (const char *name, int flags, int mode );

#if defined(__cplusplus)
extern "C++" {
  inline int open (const char *, int) __attribute__((__always_inline__));

  inline int
  open (const char *name, int flags)
  {
    return open (name, flags, 0);
  }
}
#endif


#endif  /* VXWORKS_POSIX_OPEN_CHECK */
#ifdef __cplusplus
}
#endif

#endif  /* FIXINC_WRAP_FCNTL_H_AIX_EXTERNC */
