#include <dirent.h>
#endif
#include <errno.h>
+#ifdef WIN32
+#include <sys/errno2.h>
+#endif
#ifdef I_FLOAT
#include <float.h>
#endif
#endif /* WIN32 || NETWARE */
#endif /* __VMS */
-#ifdef WIN32
- /* Perl on Windows assigns WSAGetLastError() return values to errno
- * (in win32/win32sck.c). Therefore we need to map these values
- * back to standard symbolic names, but only for those names having
- * no existing value or an existing value >= 100. (VC++ 2010 defines
- * a group of names with values >= 100 in its errno.h which we *do*
- * need to redefine.) The Errno.pm module does a similar mapping.
- */
-# ifdef EWOULDBLOCK
-# undef EWOULDBLOCK
-# endif
-# define EWOULDBLOCK WSAEWOULDBLOCK
-# ifdef EINPROGRESS
-# undef EINPROGRESS
-# endif
-# define EINPROGRESS WSAEINPROGRESS
-# ifdef EALREADY
-# undef EALREADY
-# endif
-# define EALREADY WSAEALREADY
-# ifdef ENOTSOCK
-# undef ENOTSOCK
-# endif
-# define ENOTSOCK WSAENOTSOCK
-# ifdef EDESTADDRREQ
-# undef EDESTADDRREQ
-# endif
-# define EDESTADDRREQ WSAEDESTADDRREQ
-# ifdef EMSGSIZE
-# undef EMSGSIZE
-# endif
-# define EMSGSIZE WSAEMSGSIZE
-# ifdef EPROTOTYPE
-# undef EPROTOTYPE
-# endif
-# define EPROTOTYPE WSAEPROTOTYPE
-# ifdef ENOPROTOOPT
-# undef ENOPROTOOPT
-# endif
-# define ENOPROTOOPT WSAENOPROTOOPT
-# ifdef EPROTONOSUPPORT
-# undef EPROTONOSUPPORT
-# endif
-# define EPROTONOSUPPORT WSAEPROTONOSUPPORT
-# ifdef ESOCKTNOSUPPORT
-# undef ESOCKTNOSUPPORT
-# endif
-# define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
-# ifdef EOPNOTSUPP
-# undef EOPNOTSUPP
-# endif
-# define EOPNOTSUPP WSAEOPNOTSUPP
-# ifdef EPFNOSUPPORT
-# undef EPFNOSUPPORT
-# endif
-# define EPFNOSUPPORT WSAEPFNOSUPPORT
-# ifdef EAFNOSUPPORT
-# undef EAFNOSUPPORT
-# endif
-# define EAFNOSUPPORT WSAEAFNOSUPPORT
-# ifdef EADDRINUSE
-# undef EADDRINUSE
-# endif
-# define EADDRINUSE WSAEADDRINUSE
-# ifdef EADDRNOTAVAIL
-# undef EADDRNOTAVAIL
-# endif
-# define EADDRNOTAVAIL WSAEADDRNOTAVAIL
-# ifdef ENETDOWN
-# undef ENETDOWN
-# endif
-# define ENETDOWN WSAENETDOWN
-# ifdef ENETUNREACH
-# undef ENETUNREACH
-# endif
-# define ENETUNREACH WSAENETUNREACH
-# ifdef ENETRESET
-# undef ENETRESET
-# endif
-# define ENETRESET WSAENETRESET
-# ifdef ECONNABORTED
-# undef ECONNABORTED
-# endif
-# define ECONNABORTED WSAECONNABORTED
-# ifdef ECONNRESET
-# undef ECONNRESET
-# endif
-# define ECONNRESET WSAECONNRESET
-# ifdef ENOBUFS
-# undef ENOBUFS
-# endif
-# define ENOBUFS WSAENOBUFS
-# ifdef EISCONN
-# undef EISCONN
-# endif
-# define EISCONN WSAEISCONN
-# ifdef ENOTCONN
-# undef ENOTCONN
-# endif
-# define ENOTCONN WSAENOTCONN
-# ifdef ESHUTDOWN
-# undef ESHUTDOWN
-# endif
-# define ESHUTDOWN WSAESHUTDOWN
-# ifdef ETOOMANYREFS
-# undef ETOOMANYREFS
-# endif
-# define ETOOMANYREFS WSAETOOMANYREFS
-# ifdef ETIMEDOUT
-# undef ETIMEDOUT
-# endif
-# define ETIMEDOUT WSAETIMEDOUT
-# ifdef ECONNREFUSED
-# undef ECONNREFUSED
-# endif
-# define ECONNREFUSED WSAECONNREFUSED
-# ifdef ELOOP
-# undef ELOOP
-# endif
-# define ELOOP WSAELOOP
-# ifdef EHOSTDOWN
-# undef EHOSTDOWN
-# endif
-# define EHOSTDOWN WSAEHOSTDOWN
-# ifdef EHOSTUNREACH
-# undef EHOSTUNREACH
-# endif
-# define EHOSTUNREACH WSAEHOSTUNREACH
-# ifdef EPROCLIM
-# undef EPROCLIM
-# endif
-# define EPROCLIM WSAEPROCLIM
-# ifdef EUSERS
-# undef EUSERS
-# endif
-# define EUSERS WSAEUSERS
-# ifdef EDQUOT
-# undef EDQUOT
-# endif
-# define EDQUOT WSAEDQUOT
-# ifdef ESTALE
-# undef ESTALE
-# endif
-# define ESTALE WSAESTALE
-# ifdef EREMOTE
-# undef EREMOTE
-# endif
-# define EREMOTE WSAEREMOTE
-# ifdef EDISCON
-# undef EDISCON
-# endif
-# define EDISCON WSAEDISCON
-#endif
-
typedef int SysRet;
typedef long SysRetLong;
typedef sigset_t* POSIX__SigSet;
/* Possibly needed prototypes */
#ifndef WIN32
+START_EXTERN_C
double strtod (const char *, char **);
long strtol (const char *, char **, int);
unsigned long strtoul (const char *, char **, int);
+END_EXTERN_C
#endif
#ifndef HAS_DIFFTIME
* as expected. The better solution would be not to use the W*() macros
* in the first place, though. -- Ingo Weinhold
*/
-#if defined(__BEOS__) || defined(__HAIKU__)
+#if defined(__HAIKU__)
# define WMUNGE(x) (((x) & 0xFF00) >> 8 | ((x) & 0x00FF) << 8)
#else
# define WMUNGE(x) (x)
static XSPROTO(is_common)
{
dXSARGS;
- SV *charstring;
if (items != 1)
croak_xs_usage(cv, "charstring");
CV *cv;
const char *file = __FILE__;
+
+ /* silence compiler warning about not_here() defined but not used */
+ if (0) not_here("");
+
/* Ensure we get the function, not a macro implementation. Like the C89
standard says we can... */
#undef isalnum
case 3:
RETVAL = termios_ref->c_lflag;
break;
+ default:
+ RETVAL = 0; /* silence compiler warning */
}
#else
not_here(GvNAME(CvGV(cv)));
char * retval;
CODE:
retval = setlocale(category, locale);
- if (retval) {
+ if (! retval) {
+ XSRETURN_UNDEF;
+ }
+ else {
/* Save retval since subsequent setlocale() calls
* may overwrite it. */
RETVAL = savepv(retval);
}
#endif /* USE_LOCALE_NUMERIC */
}
- else
- RETVAL = NULL;
OUTPUT:
RETVAL
CLEANUP:
- if (RETVAL)
- Safefree(RETVAL);
+ Safefree(RETVAL);
NV
acos(x)
SysRet
setgid(gid)
Gid_t gid
- CLEANUP:
-#ifndef WIN32
- if (RETVAL >= 0) {
- PL_gid = getgid();
- PL_egid = getegid();
- }
-#endif
SysRet
setuid(uid)
Uid_t uid
- CLEANUP:
-#ifndef WIN32
- if (RETVAL >= 0) {
- PL_uid = getuid();
- PL_euid = geteuid();
- }
-#endif
SysRetLong
sysconf(name)