Merge maint-5.004 branch (5.004_03) with mainline.
[p5sagit/p5-mst-13.2.git] / ext / POSIX / POSIX.xs
index 42aeb3b..a09eafe 100644 (file)
@@ -40,7 +40,7 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <time.h>
-#include <unistd.h>
+#include <unistd.h>    /* see hints/sunos_4_1.sh */
 #include <fcntl.h>
 
 #if defined(__VMS) && !defined(__POSIX_SOURCE)
 #  define mkfifo(a,b) (not_here("mkfifo"),-1)
 #  define tzset() not_here("tzset")
 
-#  if __VMS_VER < 70000000
+#if ((__VMS_VER >= 70000000) && (__DECC_VER >= 50200000)) || (__CRTL_VER >= 70000000)
+#    define HAS_TZNAME  /* shows up in VMS 7.0 or Dec C 5.6 */
+#    include <utsname.h>
+#else
      /* The default VMS emulation of Unix signals isn't very POSIXish */
      typedef int sigset_t;
 #    define sigpending(a) (not_here("sigpending"),0)
 #    define sa_handler sv_handler
 #    define sa_mask sv_mask
 #    define sigsuspend(set) sigpause(*set)
-#  else
-#    define HAS_TZNAME  /* shows up in VMS 7.0 */
-#  endif /* __VMS_VER < 70000000 */
+#  endif /* __VMS_VER >= 70000000 or Dec C 5.6 */
 
    /* The POSIX notion of ttyname() is better served by getname() under VMS */
    static char ttnambuf[64];
@@ -1731,13 +1732,13 @@ int arg;
                    goto not_there;
 #endif
 #ifdef SIG_DFL
-               if (strEQ(name, "SIG_DFL")) return (int)SIG_DFL;
+               if (strEQ(name, "SIG_DFL")) return (IV)SIG_DFL;
 #endif
 #ifdef SIG_ERR
-               if (strEQ(name, "SIG_ERR")) return (int)SIG_ERR;
+               if (strEQ(name, "SIG_ERR")) return (IV)SIG_ERR;
 #endif
 #ifdef SIG_IGN
-               if (strEQ(name, "SIG_IGN")) return (int)SIG_IGN;
+               if (strEQ(name, "SIG_IGN")) return (IV)SIG_IGN;
 #endif
                if (strEQ(name, "SIG_SETMASK"))
 #ifdef SIG_SETMASK
@@ -2798,11 +2799,11 @@ constant(name,arg)
 
 int
 isalnum(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!isalnum(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2810,11 +2811,11 @@ isalnum(charstring)
 
 int
 isalpha(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!isalpha(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2822,11 +2823,11 @@ isalpha(charstring)
 
 int
 iscntrl(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!iscntrl(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2834,11 +2835,11 @@ iscntrl(charstring)
 
 int
 isdigit(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!isdigit(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2846,11 +2847,11 @@ isdigit(charstring)
 
 int
 isgraph(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!isgraph(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2858,11 +2859,11 @@ isgraph(charstring)
 
 int
 islower(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!islower(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2870,11 +2871,11 @@ islower(charstring)
 
 int
 isprint(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!isprint(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2882,11 +2883,11 @@ isprint(charstring)
 
 int
 ispunct(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!ispunct(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2894,11 +2895,11 @@ ispunct(charstring)
 
 int
 isspace(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!isspace(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2906,11 +2907,11 @@ isspace(charstring)
 
 int
 isupper(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!isupper(*s))
                RETVAL = 0;
     OUTPUT:
@@ -2918,11 +2919,11 @@ isupper(charstring)
 
 int
 isxdigit(charstring)
-       char *          charstring
+       unsigned char * charstring
     CODE:
-       char *s;
-       RETVAL = 1;
-       for (s = charstring; *s && RETVAL; s++)
+       unsigned char *s = charstring;
+       unsigned char *e = s + na;      /* "na" set by typemap side effect */
+       for (RETVAL = 1; RETVAL && s < e; s++)
            if (!isxdigit(*s))
                RETVAL = 0;
     OUTPUT:
@@ -3533,11 +3534,11 @@ times()
        clock_t realtime;
        realtime = times( &tms );
        EXTEND(sp,5);
-       PUSHs( sv_2mortal( newSVnv( realtime ) ) );
-       PUSHs( sv_2mortal( newSVnv( tms.tms_utime ) ) );
-       PUSHs( sv_2mortal( newSVnv( tms.tms_stime ) ) );
-       PUSHs( sv_2mortal( newSVnv( tms.tms_cutime ) ) );
-       PUSHs( sv_2mortal( newSVnv( tms.tms_cstime ) ) );
+       PUSHs( sv_2mortal( newSViv( (IV) realtime ) ) );
+       PUSHs( sv_2mortal( newSViv( (IV) tms.tms_utime ) ) );
+       PUSHs( sv_2mortal( newSViv( (IV) tms.tms_stime ) ) );
+       PUSHs( sv_2mortal( newSViv( (IV) tms.tms_cutime ) ) );
+       PUSHs( sv_2mortal( newSViv( (IV) tms.tms_cstime ) ) );
 
 double
 difftime(time1, time2)