[win32] the EXTCONST in sdbm.h breaks SDBM on Borland, since
[p5sagit/p5-mst-13.2.git] / pp_sys.c
index 0eff99b..ce32fc5 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -54,7 +54,11 @@ extern "C" int syscall(unsigned long,...);
 #endif
 #endif
 
-#ifdef HOST_NOT_FOUND
+/* XXX Configure test needed.
+   h_errno might not be a simple 'int', especially for multi-threaded
+   applications.  HOST_NOT_FOUND is typically defined in <netdb.h>.
+*/
+#if defined(HOST_NOT_FOUND) && !defined(h_errno)
 extern int h_errno;
 #endif
 
@@ -2107,7 +2111,7 @@ PP(pp_stat)
            laststatval = PerlLIO_lstat(SvPV(statname, na), &statcache);
        else
 #endif
-           laststatval = Stat(SvPV(statname, na), &statcache);
+           laststatval = PerlLIO_stat(SvPV(statname, na), &statcache);
        if (laststatval < 0) {
            if (dowarn && strchr(SvPV(statname, na), '\n'))
                warn(warn_nl, "stat");
@@ -2678,11 +2682,11 @@ PP(pp_rename)
 #ifdef HAS_RENAME
     anum = rename(tmps, tmps2);
 #else
-    if (!(anum = Stat(tmps, &statbuf))) {
+    if (!(anum = PerlLIO_stat(tmps, &statbuf))) {
        if (same_dirent(tmps2, tmps))   /* can always rename to same name */
            anum = 1;
        else {
-           if (euid || Stat(tmps2, &statbuf) < 0 || !S_ISDIR(statbuf.st_mode))
+           if (euid || PerlLIO_stat(tmps2, &statbuf) < 0 || !S_ISDIR(statbuf.st_mode))
                (void)UNLINK(tmps2);
            if (!(anum = link(tmps, tmps2)))
                anum = UNLINK(tmps);
@@ -2819,7 +2823,7 @@ char *filename;
            return 0;
        }
        else {  /* some mkdirs return no failure indication */
-           anum = (Stat(save_filename, &statbuf) >= 0);
+           anum = (PerlLIO_stat(save_filename, &statbuf) >= 0);
            if (op->op_type == OP_RMDIR)
                anum = !anum;
            if (anum)
@@ -3621,33 +3625,38 @@ PP(pp_ghostent)
     I32 which = op->op_type;
     register char **elem;
     register SV *sv;
-#if defined(HAS_GETHOSTENT) && !defined(DONT_DECLARE_STD)
+#ifndef HAS_GETHOST_PROTOS /* XXX Do we need individual probes? */
     struct hostent *PerlSock_gethostbyaddr(Netdb_host_t, Netdb_hlen_t, int);
     struct hostent *PerlSock_gethostbyname(Netdb_name_t);
-#ifndef PerlSock_gethostent
     struct hostent *PerlSock_gethostent(void);
 #endif
-#endif
     struct hostent *hent;
     unsigned long len;
 
     EXTEND(SP, 10);
-    if (which == OP_GHBYNAME) {
+    if (which == OP_GHBYNAME)
+#ifdef HAS_GETHOSTBYNAME
        hent = PerlSock_gethostbyname(POPp);
-    }
+#else
+       DIE(no_sock_func, "gethostbyname");
+#endif
     else if (which == OP_GHBYADDR) {
+#ifdef HAS_GETHOSTBYADDR
        int addrtype = POPi;
        SV *addrsv = POPs;
        STRLEN addrlen;
        Netdb_host_t addr = (Netdb_host_t) SvPV(addrsv, addrlen);
 
        hent = PerlSock_gethostbyaddr(addr, (Netdb_hlen_t) addrlen, addrtype);
+#else
+       DIE(no_sock_func, "gethostbyaddr");
+#endif
     }
     else
 #ifdef HAS_GETHOSTENT
        hent = PerlSock_gethostent();
 #else
-       DIE("gethostent not implemented");
+       DIE(no_sock_func, "gethostent");
 #endif
 
 #ifdef HOST_NOT_FOUND
@@ -3724,22 +3733,34 @@ PP(pp_gnetent)
     I32 which = op->op_type;
     register char **elem;
     register SV *sv;
-#ifdef NETDB_H_OMITS_GETNET
-    struct netent *getnetbyaddr(Netdb_net_t, int);
-    struct netent *getnetbyname(Netdb_name_t);
-    struct netent *getnetent(void);
+#ifndef HAS_GETNET_PROTOS /* XXX Do we need individual probes? */
+    struct netent *PerlSock_getnetbyaddr(Netdb_net_t, int);
+    struct netent *PerlSock_getnetbyname(Netdb_name_t);
+    struct netent *PerlSock_getnetent(void);
 #endif
     struct netent *nent;
 
     if (which == OP_GNBYNAME)
-       nent = getnetbyname(POPp);
+#ifdef HAS_GETNETBYNAME
+       nent = PerlSock_getnetbyname(POPp);
+#else
+        DIE(no_sock_func, "getnetbyname");
+#endif
     else if (which == OP_GNBYADDR) {
+#ifdef HAS_GETNETBYADDR
        int addrtype = POPi;
        Netdb_net_t addr = (Netdb_net_t) U_L(POPn);
-       nent = getnetbyaddr(addr, addrtype);
+       nent = PerlSock_getnetbyaddr(addr, addrtype);
+#else
+       DIE(no_sock_func, "getnetbyaddr");
+#endif
     }
     else
-       nent = getnetent();
+#ifdef HAS_GETNETENT
+       nent = PerlSock_getnetent();
+#else
+        DIE(no_sock_func, "getnetent");
+#endif
 
     EXTEND(SP, 4);
     if (GIMME != G_ARRAY) {
@@ -3799,13 +3820,11 @@ PP(pp_gprotoent)
     I32 which = op->op_type;
     register char **elem;
     register SV *sv;  
-#ifndef DONT_DECLARE_STD
+#ifndef HAS_GETPROTO_PROTOS /* XXX Do we need individual probes? */
     struct protoent *PerlSock_getprotobyname(Netdb_name_t);
     struct protoent *PerlSock_getprotobynumber(int);
-#ifndef PerlSock_getprotoent
     struct protoent *PerlSock_getprotoent(void);
 #endif
-#endif
     struct protoent *pent;
 
     if (which == OP_GPBYNAME)
@@ -3883,16 +3902,15 @@ PP(pp_gservent)
     I32 which = op->op_type;
     register char **elem;
     register SV *sv;
-#ifndef DONT_DECLARE_STD
+#ifndef HAS_GETSERV_PROTOS /* XXX Do we need individual probes? */
     struct servent *PerlSock_getservbyname(Netdb_name_t, Netdb_name_t);
     struct servent *PerlSock_getservbyport(int, Netdb_name_t);
-#ifndef PerlSock_getservent
     struct servent *PerlSock_getservent(void);
 #endif
-#endif
     struct servent *sent;
 
     if (which == OP_GSBYNAME) {
+#ifdef HAS_GETSERVBYNAME
        char *proto = POPp;
        char *name = POPp;
 
@@ -3900,8 +3918,12 @@ PP(pp_gservent)
            proto = Nullch;
 
        sent = PerlSock_getservbyname(name, proto);
+#else
+       DIE(no_sock_func, "getservbyname");
+#endif
     }
     else if (which == OP_GSBYPORT) {
+#ifdef HAS_GETSERVBYPORT
        char *proto = POPp;
        unsigned short port = POPu;
 
@@ -3909,6 +3931,9 @@ PP(pp_gservent)
        port = PerlSock_htons(port);
 #endif
        sent = PerlSock_getservbyport(port, proto);
+#else
+       DIE(no_sock_func, "getservbyport");
+#endif
     }
     else
 #ifdef HAS_GETSERVENT
@@ -4007,7 +4032,7 @@ PP(pp_ehostent)
 {
     djSP;
 #ifdef HAS_ENDHOSTENT
-    endhostent();
+    PerlSock_endhostent();
     EXTEND(SP,1);
     RETPUSHYES;
 #else
@@ -4019,7 +4044,7 @@ PP(pp_enetent)
 {
     djSP;
 #ifdef HAS_ENDNETENT
-    endnetent();
+    PerlSock_endnetent();
     EXTEND(SP,1);
     RETPUSHYES;
 #else
@@ -4031,7 +4056,7 @@ PP(pp_eprotoent)
 {
     djSP;
 #ifdef HAS_ENDPROTOENT
-    endprotoent();
+    PerlSock_endprotoent();
     EXTEND(SP,1);
     RETPUSHYES;
 #else
@@ -4043,7 +4068,7 @@ PP(pp_eservent)
 {
     djSP;
 #ifdef HAS_ENDSERVENT
-    endservent();
+    PerlSock_endservent();
     EXTEND(SP,1);
     RETPUSHYES;
 #else