IoDIRP may be fake when used in source filters, mark as such
[p5sagit/p5-mst-13.2.git] / perl.h
diff --git a/perl.h b/perl.h
index 501c635..7ec3750 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -31,7 +31,7 @@
 #    define PERL_IMPLICIT_CONTEXT
 #  endif
 #  ifndef PERL_IMPLICIT_SYS
-#    ifdef WIN32
+#    if defined(WIN32) && !defined(__MINGW32__)
 #      define PERL_IMPLICIT_SYS                /* XXX not implemented everywhere yet */
 #    endif
 #  endif
@@ -42,7 +42,7 @@
 #    define PERL_IMPLICIT_CONTEXT
 #  endif
 #  ifndef PERL_IMPLICIT_SYS
-#    ifdef WIN32
+#    if defined(WIN32) && !defined(__MINGW32__)
 #      define PERL_IMPLICIT_SYS                /* XXX not implemented everywhere yet */
 #    endif
 #  endif
@@ -470,7 +470,7 @@ register struct op *Perl_op asm(stringify(OP_IN_REGISTER));
 #   include <stdlib.h>
 #endif
 
-#if !defined(PERL_FOR_X2P) && !defined(PERL_OBJECT)
+#if !defined(PERL_FOR_X2P) && !defined(WIN32)
 #  include "embed.h"
 #endif
 
@@ -901,104 +901,11 @@ Free_t   Perl_mfree (Malloc_t where);
     --Andy Dougherty   August 1996
 */
 
-/*  We should be able to get Quad_t in most systems:
-    all of int64_t, long long, long, int, will work.
-
-    Beware of LP32 systems (ILP32, ILP32LL64).  Such systems have been
-    used to sizeof(long) == sizeof(foo*).  This is a bad assumption
-    because then IV/UV have been 32 bits, too.  Which, in turn means
-    that even if the system has quads (e.g. long long), IV cannot be a
-    quad.  Introducing a 64-bit IV (because of long long existing)
-    will introduce binary incompatibility.
-
-    Summary: a long long system needs to add -DUSE_LONG_LONG to $ccflags
-    to get quads -- and if its pointers are still 32 bits, this will break
-    binary compatibility.  Casting an IV (a long long) to a pointer will
-    truncate half of the IV away.  Most systems can just use
-    Configure -Duse64bits to get the -DUSE_LONG_LONG added either by
-    their hints files, or directly by Configure if they are using gcc.
-
-    --jhi              September 1999 */
-
-#if INTSIZE == 4 && LONGSIZE == 4 && PTRSIZE == 4
-#   define PERL_ILP32
-#   if defined(HAS_LONG_LONG) && LONGLONGSIZE == 8
-#       define PERL_ILP32LL64
-#   endif
-#endif
-
-#if LONGSIZE == 8 && PTRSIZE == 8
-#   define PERL_LP64
-#   if INTSIZE == 8
-#        define PERL_ILP64
-#   endif
-#endif
-
-#ifndef Quad_t
-#    if LONGSIZE == 8
-#       define Quad_t  long
-#       define Uquad_t unsigned long
-#       define PERL_QUAD_IS_LONG
-#    endif
-#endif
-
-#ifndef Quad_t
-#    if INTSIZE == 8
-#       define Quad_t  int
-#       define Uquad_t unsigned int
-#       define PERL_QUAD_IS_INT
-#    endif
-#endif
-
-#ifndef Quad_t
-#    ifdef USE_LONG_LONG /* See above note about LP32. --jhi */
-#       if defined(HAS_LONG_LONG) && LONGLONGSIZE == 8
-#          define Quad_t  long long
-#           define Uquad_t unsigned long long
-#           define PERL_QUAD_IS_LONG_LONG
-#       endif
-#    endif
-#endif
-
-#ifndef Quad_t
-#    ifdef HAS_INT64_T
-#        define Quad_t  int64_t
-#        define Uquad_t uint64_t
-#        define PERL_QUAD_IS_INT64_T
-#    endif
-#endif
-
-#ifdef Quad_t
-#   define HAS_QUAD
-#   ifndef Uquad_t
-    /* Note that if your Quad_t is a typedef (not a #define) you *MUST*
-     * have defined by now Uquad_t yourself because 'unsigned type'
-     * is illegal. */
-#       define Uquad_t unsigned Quad_t
-#   endif
-#endif
+typedef IVTYPE IV;
+typedef UVTYPE UV;
 
 #if defined(USE_64_BITS) && defined(HAS_QUAD)
-#  ifdef PERL_QUAD_IS_LONG                     /* LP64 */
-   typedef          long               IV;
-   typedef         unsigned long      UV;
-#  else
-#      ifdef PERL_QUAD_IS_INT                  /* ILP64 */
-   typedef          int                IV;
-   typedef         unsigned int       UV;
-#      else
-#          ifdef PERL_QUAD_IS_LONG_LONG                /* LL64 */
-   typedef          long long          IV;
-   typedef         unsigned long long UV;
-#          else
-#              ifdef PERL_QUAD_IS_INT64_T      /* C9X */
-   typedef          int64_t            IV;
-   typedef         uint64_t           UV;
-#              endif
-#          endif
-#      endif
-#  endif     
-#  if defined(PERL_QUAD_IS_INT64_T) && defined(INT64_MAX)
+#  if QUADCASE == 4 && defined(INT64_MAX) /* quad is int64_t */
 #    define IV_MAX INT64_MAX
 #    define IV_MIN INT64_MIN
 #    define UV_MAX UINT64_MAX
@@ -1012,14 +919,10 @@ Free_t   Perl_mfree (Malloc_t where);
 #    define UV_MAX PERL_UQUAD_MAX
 #    define UV_MIN PERL_UQUAD_MIN
 #  endif
-#  define IVSIZE 8
-#  define UVSIZE 8
 #  define IV_IS_QUAD
 #  define UV_IS_QUAD
 #else
-   typedef          long               IV;
-   typedef         unsigned long      UV;
-#  if defined(INT32_MAX) && LONGSIZE == 4
+#  if defined(INT32_MAX) && IVSIZE == 4
 #    define IV_MAX INT32_MAX
 #    define IV_MIN INT32_MIN
 #    ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */
@@ -1037,16 +940,19 @@ Free_t   Perl_mfree (Malloc_t where);
 #    define UV_MAX PERL_ULONG_MAX
 #    define UV_MIN PERL_ULONG_MIN
 #  endif
-#  if LONGSIZE == 8
+#  if IVSIZE == 8
 #    define IV_IS_QUAD
 #    define UV_IS_QUAD
+#    ifndef HAS_QUAD
+#      define HAS_QUAD
+#    endif
 #  else
 #    undef IV_IS_QUAD
 #    undef UV_IS_QUAD
+#    undef HAS_QUAD
 #  endif
-#  define UVSIZE LONGSIZE
-#  define IVSIZE LONGSIZE
 #endif
+
 #define IV_DIG (BIT_DIGITS(IVSIZE * 8))
 #define UV_DIG (BIT_DIGITS(UVSIZE * 8))
 
@@ -1146,9 +1052,9 @@ Free_t   Perl_mfree (Malloc_t where);
 # endif
 #endif
 
+typedef NVTYPE NV;
+
 #ifdef USE_LONG_DOUBLE
-    typedef long double NV;
-#   define NVSIZE LONG_DOUBLESIZE
 #   define NV_DIG LDBL_DIG
 #   ifdef HAS_SQRTL
 #       define Perl_modf modfl
@@ -1164,8 +1070,6 @@ Free_t   Perl_mfree (Malloc_t where);
 #       define Perl_fmod fmodl
 #   endif
 #else
-    typedef double NV;
-#   define NVSIZE DOUBLESIZE
 #   define NV_DIG DBL_DIG
 #   define Perl_modf modf
 #   define Perl_frexp frexp
@@ -1355,7 +1259,7 @@ Free_t   Perl_mfree (Malloc_t where);
 #  endif
 #endif
 
-#ifdef HAS_QUAD
+#ifdef UV_IS_QUAD
 
 #  ifdef UQUAD_MAX
 #    define PERL_UQUAD_MAX ((UV)UQUAD_MAX)
@@ -1389,11 +1293,10 @@ typedef struct listop LISTOP;
 typedef struct logop LOGOP;
 typedef struct pmop PMOP;
 typedef struct svop SVOP;
-typedef struct gvop GVOP;
+typedef struct padop PADOP;
 typedef struct pvop PVOP;
 typedef struct loop LOOP;
 
-typedef struct Outrec Outrec;
 typedef struct interpreter PerlInterpreter;
 typedef struct sv SV;
 typedef struct av AV;
@@ -1423,6 +1326,8 @@ typedef struct xpvfm XPVFM;
 typedef struct xpvio XPVIO;
 typedef struct mgvtbl MGVTBL;
 typedef union any ANY;
+typedef struct svtblent SVTBLENT;
+typedef struct svtbl SVTBL;
 
 #include "handy.h"
 
@@ -1563,6 +1468,14 @@ typedef union any ANY;
 # endif
 #endif         
 
+#ifndef PERL_SYS_INIT3
+#  define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
+#endif
+
+#ifndef PERL_SYS_INIT3
+#  define PERL_SYS_INIT3(argvp,argcp,envp) PERL_SYS_INIT(argvp,argcp)
+#endif
+
 #ifndef MAXPATHLEN
 #  ifdef PATH_MAX
 #    ifdef _POSIX_PATH_MAX
@@ -1834,6 +1747,18 @@ struct scan_data_t;              /* Used in S_* functions in regcomp.c */
 
 typedef I32 CHECKPOINT;
 
+struct svtblent {
+    struct svtblent*   next;
+    SV*                        oldval;
+    SV*                        newval;
+};
+
+struct svtbl {
+    struct svtblent**  tbl_ary;
+    UV                 tbl_max;
+    UV                 tbl_items;
+};
+
 #if defined(iAPX286) || defined(M_I286) || defined(I80286)
 #   define I286
 #endif
@@ -1916,6 +1841,7 @@ typedef I32 CHECKPOINT;
 #define NV_WITHIN_IV(nv) (I_V(nv) >= IV_MIN && I_V(nv) <= IV_MAX)
 #define NV_WITHIN_UV(nv) ((nv)>=0.0 && U_V(nv) >= UV_MIN && U_V(nv) <= UV_MAX)
 
+/* The correct way: a Configure test where (UV)~0 is cast to NV and back. */
 /* Believe. */
 #define IV_FITS_IN_NV
 /* Doubt. */
@@ -1936,41 +1862,15 @@ typedef I32 CHECKPOINT;
 #   endif
 #endif
 
-#ifdef IV_IS_QUAD
-#  define UVuf PERL_PRIu64
-#  define IVdf PERL_PRId64
-#  define UVof PERL_PRIo64
-#  define UVxf PERL_PRIx64
-#else
-#   if LONGSIZE == 4
-#       define UVuf "lu"
-#       define IVdf "ld"
-#       define UVof "lo"
-#       define UVxf "lx"
-#   else
-        /* Any good ideas? */
-#   endif
-#endif
-
 /* Used with UV/IV arguments: */
                                        /* XXXX: need to speed it up */
 #define CLUMP_2UV(iv)  ((iv) < 0 ? 0 : (UV)(iv))
 #define CLUMP_2IV(uv)  ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv))
 
-struct Outrec {
-    I32                o_lines;
-    char       *o_str;
-    U32                o_len;
-};
-
 #ifndef MAXSYSFD
 #   define MAXSYSFD 2
 #endif
 
-#ifndef TMPPATH
-#  define TMPPATH "/tmp/perl-eXXXXXX"
-#endif
-
 #ifndef __cplusplus
 Uid_t getuid (void);
 Uid_t geteuid (void);
@@ -2138,7 +2038,7 @@ I32 unlnk (char*);
 #  endif
 #endif
 
-typedef Signal_t (*Sighandler_t) (int);
+/* Sighandler_t defined in iperlsys.h */
 
 #ifdef HAS_SIGACTION
 typedef struct sigaction Sigsave_t;
@@ -2634,7 +2534,7 @@ EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars);
 EXT
 #endif /* WIN32 */
 struct perl_vars *PL_VarsPtr;
-#define PL_Vars (*((PL_VarsPtr) ? PL_VarsPtr : (PL_VarsPtr =  Perl_GetVars())))
+#define PL_Vars (*((PL_VarsPtr) ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX))))
 #endif /* PERL_CORE */
 #endif /* PERL_GLOBAL_STRUCT */
 
@@ -2687,13 +2587,6 @@ typedef void *Thread;
 #  define PERL_CALLCONV
 #endif 
 
-#ifdef PERL_OBJECT
-#  define VIRTUAL virtual PERL_CALLCONV
-#else
-#  define VIRTUAL PERL_CALLCONV
-/*START_EXTERN_C*/
-#endif
-
 #ifndef NEXT30_NO_ATTRIBUTE
 #  ifndef HASATTRIBUTE       /* disable GNU-cc attribute checking? */
 #    ifdef  __attribute__      /* Avoid possible redefinition errors */
@@ -2721,10 +2614,8 @@ public:
 #include "pp_proto.h"
 
 #ifdef PERL_OBJECT
-VIRTUAL int CPerlObj::do_aspawn (void *vreally, void **vmark, void **vsp);
+int CPerlObj::do_aspawn (void *vreally, void **vmark, void **vsp);
 #undef PERL_DECL_PROT
-#else
-/*END_EXTERN_C*/
 #endif
 
 #ifndef PERL_OBJECT
@@ -2781,6 +2672,10 @@ PERLVARA(object_compatibility,30,        char)
 /* this has structure inits, so it cannot be included before here */
 #  include "opcode.h"
 
+#else
+#  if defined(WIN32)
+#    include "embed.h"
+#  endif
 #endif  /* PERL_OBJECT */
 
 #ifndef PERL_GLOBAL_STRUCT
@@ -2800,85 +2695,85 @@ START_EXTERN_C
 
 #ifdef DOINIT
 
-EXT MGVTBL PL_vtbl_sv =        {Perl_magic_get,
-                               Perl_magic_set,
-                                       Perl_magic_len,
+EXT MGVTBL PL_vtbl_sv =        {MEMBER_TO_FPTR(Perl_magic_get),
+                               MEMBER_TO_FPTR(Perl_magic_set),
+                                       MEMBER_TO_FPTR(Perl_magic_len),
                                                0,      0};
-EXT MGVTBL PL_vtbl_env =       {0,     Perl_magic_set_all_env,
-                               0,      Perl_magic_clear_all_env,
+EXT MGVTBL PL_vtbl_env =       {0,     MEMBER_TO_FPTR(Perl_magic_set_all_env),
+                               0,      MEMBER_TO_FPTR(Perl_magic_clear_all_env),
                                                        0};
-EXT MGVTBL PL_vtbl_envelem =   {0,     Perl_magic_setenv,
-                                       0,      Perl_magic_clearenv,
+EXT MGVTBL PL_vtbl_envelem =   {0,     MEMBER_TO_FPTR(Perl_magic_setenv),
+                                       0,      MEMBER_TO_FPTR(Perl_magic_clearenv),
                                                        0};
 EXT MGVTBL PL_vtbl_sig =       {0,     0,               0, 0, 0};
-EXT MGVTBL PL_vtbl_sigelem =   {Perl_magic_getsig,
-                                       Perl_magic_setsig,
-                                       0,      Perl_magic_clearsig,
+EXT MGVTBL PL_vtbl_sigelem =   {MEMBER_TO_FPTR(Perl_magic_getsig),
+                                       MEMBER_TO_FPTR(Perl_magic_setsig),
+                                       0,      MEMBER_TO_FPTR(Perl_magic_clearsig),
                                                        0};
-EXT MGVTBL PL_vtbl_pack =      {0,     0,      Perl_magic_sizepack,    Perl_magic_wipepack,
+EXT MGVTBL PL_vtbl_pack =      {0,     0,      MEMBER_TO_FPTR(Perl_magic_sizepack),    MEMBER_TO_FPTR(Perl_magic_wipepack),
                                                        0};
-EXT MGVTBL PL_vtbl_packelem =  {Perl_magic_getpack,
-                               Perl_magic_setpack,
-                                       0,      Perl_magic_clearpack,
+EXT MGVTBL PL_vtbl_packelem =  {MEMBER_TO_FPTR(Perl_magic_getpack),
+                               MEMBER_TO_FPTR(Perl_magic_setpack),
+                                       0,      MEMBER_TO_FPTR(Perl_magic_clearpack),
                                                        0};
-EXT MGVTBL PL_vtbl_dbline =    {0,     Perl_magic_setdbline,
+EXT MGVTBL PL_vtbl_dbline =    {0,     MEMBER_TO_FPTR(Perl_magic_setdbline),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_isa =       {0,     Perl_magic_setisa,
-                                       0,      Perl_magic_setisa,
+EXT MGVTBL PL_vtbl_isa =       {0,     MEMBER_TO_FPTR(Perl_magic_setisa),
+                                       0,      MEMBER_TO_FPTR(Perl_magic_setisa),
                                                        0};
-EXT MGVTBL PL_vtbl_isaelem =   {0,     Perl_magic_setisa,
+EXT MGVTBL PL_vtbl_isaelem =   {0,     MEMBER_TO_FPTR(Perl_magic_setisa),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_arylen =    {Perl_magic_getarylen,
-                               Perl_magic_setarylen,
+EXT MGVTBL PL_vtbl_arylen =    {MEMBER_TO_FPTR(Perl_magic_getarylen),
+                               MEMBER_TO_FPTR(Perl_magic_setarylen),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_glob =      {Perl_magic_getglob,
-                               Perl_magic_setglob,
+EXT MGVTBL PL_vtbl_glob =      {MEMBER_TO_FPTR(Perl_magic_getglob),
+                               MEMBER_TO_FPTR(Perl_magic_setglob),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_mglob =     {0,     Perl_magic_setmglob,
+EXT MGVTBL PL_vtbl_mglob =     {0,     MEMBER_TO_FPTR(Perl_magic_setmglob),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_nkeys =     {Perl_magic_getnkeys,
-                               Perl_magic_setnkeys,
+EXT MGVTBL PL_vtbl_nkeys =     {MEMBER_TO_FPTR(Perl_magic_getnkeys),
+                               MEMBER_TO_FPTR(Perl_magic_setnkeys),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_taint =     {Perl_magic_gettaint,Perl_magic_settaint,
+EXT MGVTBL PL_vtbl_taint =     {MEMBER_TO_FPTR(Perl_magic_gettaint),MEMBER_TO_FPTR(Perl_magic_settaint),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_substr =    {Perl_magic_getsubstr, Perl_magic_setsubstr,
+EXT MGVTBL PL_vtbl_substr =    {MEMBER_TO_FPTR(Perl_magic_getsubstr), MEMBER_TO_FPTR(Perl_magic_setsubstr),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_vec =       {Perl_magic_getvec,
-                               Perl_magic_setvec,
+EXT MGVTBL PL_vtbl_vec =       {MEMBER_TO_FPTR(Perl_magic_getvec),
+                               MEMBER_TO_FPTR(Perl_magic_setvec),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_pos =       {Perl_magic_getpos,
-                               Perl_magic_setpos,
+EXT MGVTBL PL_vtbl_pos =       {MEMBER_TO_FPTR(Perl_magic_getpos),
+                               MEMBER_TO_FPTR(Perl_magic_setpos),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_bm =        {0,     Perl_magic_setbm,
+EXT MGVTBL PL_vtbl_bm =        {0,     MEMBER_TO_FPTR(Perl_magic_setbm),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_fm =        {0,     Perl_magic_setfm,
+EXT MGVTBL PL_vtbl_fm =        {0,     MEMBER_TO_FPTR(Perl_magic_setfm),
                                        0,      0,      0};
-EXT MGVTBL PL_vtbl_uvar =      {Perl_magic_getuvar,
-                               Perl_magic_setuvar,
+EXT MGVTBL PL_vtbl_uvar =      {MEMBER_TO_FPTR(Perl_magic_getuvar),
+                               MEMBER_TO_FPTR(Perl_magic_setuvar),
                                        0,      0,      0};
 #ifdef USE_THREADS
-EXT MGVTBL PL_vtbl_mutex =     {0,     0,      0,      0,      Perl_magic_mutexfree};
+EXT MGVTBL PL_vtbl_mutex =     {0,     0,      0,      0,      MEMBER_TO_FPTR(Perl_magic_mutexfree)};
 #endif /* USE_THREADS */
-EXT MGVTBL PL_vtbl_defelem = {Perl_magic_getdefelem,Perl_magic_setdefelem,
+EXT MGVTBL PL_vtbl_defelem = {MEMBER_TO_FPTR(Perl_magic_getdefelem),MEMBER_TO_FPTR(Perl_magic_setdefelem),
                                        0,      0,      0};
 
-EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, Perl_magic_freeregexp};
-EXT MGVTBL PL_vtbl_regdata = {0, 0, Perl_magic_regdata_cnt, 0, 0};
-EXT MGVTBL PL_vtbl_regdatum = {Perl_magic_regdatum_get, 0, 0, 0, 0};
+EXT MGVTBL PL_vtbl_regexp = {0,0,0,0, MEMBER_TO_FPTR(Perl_magic_freeregexp)};
+EXT MGVTBL PL_vtbl_regdata = {0, 0, MEMBER_TO_FPTR(Perl_magic_regdata_cnt), 0, 0};
+EXT MGVTBL PL_vtbl_regdatum = {MEMBER_TO_FPTR(Perl_magic_regdatum_get), 0, 0, 0, 0};
 
 #ifdef USE_LOCALE_COLLATE
 EXT MGVTBL PL_vtbl_collxfrm = {0,
-                               Perl_magic_setcollxfrm,
+                               MEMBER_TO_FPTR(Perl_magic_setcollxfrm),
                                        0,      0,      0};
 #endif
 
-EXT MGVTBL PL_vtbl_amagic =       {0,     Perl_magic_setamagic,
-                                        0,      0,      Perl_magic_setamagic};
-EXT MGVTBL PL_vtbl_amagicelem =   {0,     Perl_magic_setamagic,
-                                        0,      0,      Perl_magic_setamagic};
+EXT MGVTBL PL_vtbl_amagic =       {0,     MEMBER_TO_FPTR(Perl_magic_setamagic),
+                                        0,      0,      MEMBER_TO_FPTR(Perl_magic_setamagic)};
+EXT MGVTBL PL_vtbl_amagicelem =   {0,     MEMBER_TO_FPTR(Perl_magic_setamagic),
+                                        0,      0,      MEMBER_TO_FPTR(Perl_magic_setamagic)};
 
 EXT MGVTBL PL_vtbl_backref =     {0,   0,
-                                       0,      0,      Perl_magic_killbackrefs};
+                                       0,      0,      MEMBER_TO_FPTR(Perl_magic_killbackrefs)};
 
 #else /* !DOINIT */
 
@@ -3182,20 +3077,6 @@ typedef struct am_table_short AMTS;
 #   endif
 #endif
 
-/* Mention
-
-   INSTALL_USR_BIN_PERL
-
-   I_SYS_MMAN
-   HAS_MMAP
-   HAS_MUNMAP
-   HAS_MPROTECT
-   HAS_MSYNC
-   HAS_MADVISE
-   Mmap_t
-
-   here so that Configure picks them up. */
-
 #ifdef IAMSUID
 
 #ifdef I_SYS_STATVFS
@@ -3207,6 +3088,28 @@ typedef struct am_table_short AMTS;
 #ifdef I_MNTENT
 #   include <mntent.h>          /* for getmntent() */
 #endif
+#ifdef I_SYS_STATFS
+#   include <sys/statfs.h>      /* for some statfs() */
+#endif
+#ifdef I_SYS_VFS
+#   include <sys/vfs.h>         /* for some statfs() */
+#endif
+#ifdef I_USTAT
+#   include <ustat.h>           /* for ustat() */
+#endif
+
+#if !defined(PERL_MOUNT_NOSUID) && defined(MOUNT_NOSUID)
+#    define PERL_MOUNT_NOSUID MOUNT_NOSUID
+#endif
+#if !defined(PERL_MOUNT_NOSUID) && defined(MNT_NOSUID)
+#    define PERL_MOUNT_NOSUID MNT_NOSUID
+#endif
+#if !defined(PERL_MOUNT_NOSUID) && defined(MS_NOSUID)
+#   define PERL_MOUNT_NOSUID MS_NOSUID
+#endif
+#if !defined(PERL_MOUNT_NOSUID) && defined(M_NOSUID)
+#   define PERL_MOUNT_NOSUID M_NOSUID
+#endif
 
 #endif /* IAMSUID */