Regexp::DESTROY was only added in 5.8.1
[p5sagit/p5-mst-13.2.git] / ext / Win32 / Win32.xs
index 6587cf2..f2b02c0 100644 (file)
@@ -37,7 +37,7 @@ typedef BOOL (__stdcall *PFNAllocateAndInitializeSid)(PSID_IDENTIFIER_AUTHORITY,
                                                       DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, PSID*);
 typedef BOOL (__stdcall *PFNEqualSid)(PSID, PSID);
 typedef void* (__stdcall *PFNFreeSid)(PSID);
-typedef BOOL (__stdcall *PFNIsUserAnAdmin)();
+typedef BOOL (__stdcall *PFNIsUserAnAdmin)(void);
 
 #ifndef CSIDL_MYMUSIC
 #   define CSIDL_MYMUSIC              0x000D
@@ -1178,8 +1178,10 @@ XS(w32_DomainName)
            DWORD   wki100_ver_major;
            DWORD   wki100_ver_minor;
        } *pwi;
+       DWORD retval;
+       retval = pfnNetWkstaGetInfo(NULL, 100, &pwi);
        /* NERR_Success *is* 0*/
-       if (0 == pfnNetWkstaGetInfo(NULL, 100, &pwi)) {
+       if (retval == 0) {
            if (pwi->wki100_langroup && *(pwi->wki100_langroup)) {
                WideCharToMultiByte(CP_ACP, 0, pwi->wki100_langroup,
                                    -1, (LPSTR)dname, dnamelen, NULL, NULL);
@@ -1193,6 +1195,7 @@ XS(w32_DomainName)
            XSRETURN_PV(dname);
        }
        FreeLibrary(module);
+       SetLastError(retval);
     }
     else {
        /* Win95 doesn't have NetWksta*(), so do it the old way */
@@ -1242,17 +1245,17 @@ XS(w32_GetOSVersion)
     if (GIMME_V == G_SCALAR) {
         XSRETURN_IV(g_osver.dwPlatformId);
     }
-    XPUSHs(newSVpvn(g_osver.szCSDVersion, strlen(g_osver.szCSDVersion)));
+    mXPUSHp(g_osver.szCSDVersion, strlen(g_osver.szCSDVersion));
 
-    XPUSHs(newSViv(g_osver.dwMajorVersion));
-    XPUSHs(newSViv(g_osver.dwMinorVersion));
-    XPUSHs(newSViv(g_osver.dwBuildNumber));
-    XPUSHs(newSViv(g_osver.dwPlatformId));
+    mXPUSHi(g_osver.dwMajorVersion);
+    mXPUSHi(g_osver.dwMinorVersion);
+    mXPUSHi(g_osver.dwBuildNumber);
+    mXPUSHi(g_osver.dwPlatformId);
     if (g_osver_ex) {
-        XPUSHs(newSViv(g_osver.wServicePackMajor));
-        XPUSHs(newSViv(g_osver.wServicePackMinor));
-        XPUSHs(newSViv(g_osver.wSuiteMask));
-        XPUSHs(newSViv(g_osver.wProductType));
+        mXPUSHi(g_osver.wServicePackMajor);
+        mXPUSHi(g_osver.wServicePackMinor);
+        mXPUSHi(g_osver.wSuiteMask);
+        mXPUSHi(g_osver.wProductType);
     }
     PUTBACK;
 }