Update Win32 to CPAN version 0.53
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Tue, 6 Aug 2019 10:47:02 +0000 (11:47 +0100)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Tue, 6 Aug 2019 10:47:02 +0000 (11:47 +0100)
  [DELTA]

0.53  [2019-08-05]
        - improve Win32::GetOSDisplayName
        - added Win2016/2019 detection and version information by
          Richard Leach [PR/15]
        - Include wchar.h to allow building with g++ by Tony Cook [rt#127836]

0.52_02 [2018-11-02] by Reini Urban
        - added () usage croaks.
        - Fixed a -Warray-bounds buffer overflow in LONGPATH,
        - Fix various -Wunused warnings
          and two -Wmaybe-uninitialized.

0.52_01 [2017-11-30]
        - add missing const

Porting/Maintainers.pl
cpan/Win32/Win32.pm
cpan/Win32/Win32.xs
cpan/Win32/longpath.inc

index 042816c..e302036 100755 (executable)
@@ -1244,7 +1244,7 @@ use File::Glob qw(:case);
     },
 
     'Win32' => {
-        'DISTRIBUTION' => "JDB/Win32-0.52.tar.gz",
+        'DISTRIBUTION' => "JDB/Win32-0.53.tar.gz",
         'FILES'        => q[cpan/Win32],
     },
 
index 7b9ab45..5a197e9 100644 (file)
@@ -8,7 +8,7 @@ package Win32;
     require DynaLoader;
 
     @ISA = qw|Exporter DynaLoader|;
-    $VERSION = '0.52';
+    $VERSION = '0.53';
     $XS_VERSION = $VERSION;
     $VERSION = eval $VERSION;
 
index de3764e..03519cb 100644 (file)
@@ -1,7 +1,9 @@
 #define WIN32_LEAN_AND_MEAN
+#include <wchar.h>
 #include <wctype.h>
 #include <windows.h>
 #include <shlobj.h>
+#include <wchar.h>
 
 #define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
@@ -114,7 +116,7 @@ typedef void (WINAPI *PFNGetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo);
  * WORD type has been replaced by unsigned short because
  * WORD is already used by Perl itself.
  */
-struct {
+struct g_osver_t {
     DWORD dwOSVersionInfoSize;
     DWORD dwMajorVersion;
     DWORD dwMinorVersion;
@@ -126,7 +128,7 @@ struct {
     unsigned short wSuiteMask;
     BYTE  wProductType;
     BYTE  wReserved;
-}   g_osver = {0, 0, 0, 0, 0, "", 0, 0, 0, 0, 0};
+} g_osver = {0, 0, 0, 0, 0, "", 0, 0, 0, 0, 0};
 BOOL g_osver_ex = TRUE;
 
 #define ONE_K_BUFSIZE  1024
@@ -201,7 +203,7 @@ wstr_to_sv(pTHX_ WCHAR *wstr)
  * characters for the characters not in the ANSI codepage.
  */
 SV*
-get_unicode_env(pTHX_ WCHAR *name)
+get_unicode_env(pTHX_ const WCHAR *name)
 {
     SV *sv = NULL;
     void *env;
@@ -377,6 +379,7 @@ get_childenv(void)
 void
 free_childenv(void *d)
 {
+  PERL_UNUSED_ARG(d);
 }
 
 #  define PerlDir_mapA(dir) (dir)
@@ -388,7 +391,7 @@ XS(w32_ExpandEnvironmentStrings)
     dXSARGS;
 
     if (items != 1)
-       croak("usage: Win32::ExpandEnvironmentStrings($String);\n");
+       croak("usage: Win32::ExpandEnvironmentStrings($String)");
 
     if (IsWin2000()) {
         WCHAR value[31*1024];
@@ -536,7 +539,7 @@ XS(w32_LookupAccountName)
 
     if (items != 5)
        croak("usage: Win32::LookupAccountName($system, $account, $domain, "
-             "$sid, $sidtype);\n");
+             "$sid, $sidtype)");
 
     SIDLen = sizeof(SID);
     DomLen = sizeof(Domain);
@@ -570,7 +573,7 @@ XS(w32_LookupAccountSID)
     BOOL bResult;
 
     if (items != 5)
-       croak("usage: Win32::LookupAccountSID($system, $sid, $account, $domain, $sidtype);\n");
+       croak("usage: Win32::LookupAccountSID($system, $sid, $account, $domain, $sidtype)");
 
     sid = SvPV_nolen(ST(1));
     if (IsValidSid(sid)) {
@@ -601,7 +604,7 @@ XS(w32_InitiateSystemShutdown)
 
     if (items != 5)
        croak("usage: Win32::InitiateSystemShutdown($machineName, $message, "
-             "$timeOut, $forceClose, $reboot);\n");
+             "$timeOut, $forceClose, $reboot)");
 
     machineName = SvPV_nolen(ST(0));
 
@@ -642,7 +645,7 @@ XS(w32_AbortSystemShutdown)
     char *machineName;
 
     if (items != 1)
-       croak("usage: Win32::AbortSystemShutdown($machineName);\n");
+       croak("usage: Win32::AbortSystemShutdown($machineName)");
 
     machineName = SvPV_nolen(ST(0));
 
@@ -680,7 +683,7 @@ XS(w32_MsgBox)
     I32 result;
 
     if (items < 1 || items > 3)
-       croak("usage: Win32::MsgBox($message [, $flags [, $title]]);\n");
+       croak("usage: Win32::MsgBox($message [, $flags [, $title]])");
 
     if (items > 1)
         flags = (DWORD)SvIV(ST(1));
@@ -696,7 +699,7 @@ XS(w32_MsgBox)
             Safefree(title);
     }
     else {
-        char *title = "Perl";
+        const char *title = "Perl";
         char *msg = SvPV_nolen(ST(0));
         if (items > 2)
             title = SvPV_nolen(ST(2));
@@ -787,6 +790,8 @@ XS(w32_UnregisterServer)
 XS(w32_GetArchName)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetArchName()");
     XSRETURN_PV(getenv("PROCESSOR_ARCHITECTURE"));
 }
 
@@ -796,6 +801,8 @@ XS(w32_GetChipName)
     SYSTEM_INFO sysinfo;
     HMODULE module;
     PFNGetNativeSystemInfo pfnGetNativeSystemInfo;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetChipName()");
 
     Zero(&sysinfo,1,SYSTEM_INFO);
     module = GetModuleHandle("kernel32.dll");
@@ -814,8 +821,11 @@ XS(w32_GuidGen)
     dXSARGS;
     GUID guid;
     char szGUID[50] = {'\0'};
-    HRESULT  hr     = CoCreateGuid(&guid);
+    HRESULT  hr;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GuidGen()");
 
+    hr     = CoCreateGuid(&guid);
     if (SUCCEEDED(hr)) {
        LPOLESTR pStr = NULL;
 #ifdef __cplusplus
@@ -896,7 +906,7 @@ XS(w32_GetFolderPath)
         SV *sv;
         HKEY hkey;
         HKEY root = HKEY_CURRENT_USER;
-        WCHAR *name = NULL;
+        const WCHAR *name = NULL;
 
         switch (folder) {
         case CSIDL_ADMINTOOLS:                  name = L"Administrative Tools";        break;
@@ -997,7 +1007,7 @@ XS(w32_GetFileVersion)
     char *data;
 
     if (items != 1)
-       croak("usage: Win32::GetFileVersion($filename)\n");
+       croak("usage: Win32::GetFileVersion($filename)");
 
     filename = SvPV_nolen(ST(0));
     size = GetFileVersionInfoSize(filename, &handle);
@@ -1048,7 +1058,9 @@ XS(w32_SetChildShowWindow)
      * inside the thread_intern structure, the MSWin32 implementation
      * lives in win32/win32.c in the core Perl distribution.
      */
-    dXSARGS;
+    dSP;
+    I32 ax = POPMARK;
+    EXTEND(SP,1);
     XSRETURN_UNDEF;
 }
 #endif
@@ -1056,8 +1068,12 @@ XS(w32_SetChildShowWindow)
 XS(w32_GetCwd)
 {
     dXSARGS;
+    char* ptr;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetCwd()");
+
     /* Make the host for current directory */
-    char* ptr = PerlEnv_get_childdir();
+    ptr = PerlEnv_get_childdir();
     /*
      * If ptr != Nullch
      *   then it worked, set PV valid,
@@ -1108,6 +1124,8 @@ XS(w32_GetNextAvailDrive)
     char ix = 'C';
     char root[] = "_:\\";
 
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetNextAvailDrive()");
     EXTEND(SP,1);
     while (ix <= 'Z') {
        root[0] = ix++;
@@ -1122,6 +1140,8 @@ XS(w32_GetNextAvailDrive)
 XS(w32_GetLastError)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetLastError()");
     EXTEND(SP,1);
     XSRETURN_IV(GetLastError());
 }
@@ -1138,6 +1158,8 @@ XS(w32_SetLastError)
 XS(w32_LoginName)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::LoginName()");
     EXTEND(SP,1);
     if (IsWin2000()) {
         WCHAR name[128];
@@ -1164,6 +1186,8 @@ XS(w32_NodeName)
     dXSARGS;
     char name[MAX_COMPUTERNAME_LENGTH+1];
     DWORD size = sizeof(name);
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::NodeName()");
     EXTEND(SP,1);
     if (GetComputerName(name,&size)) {
        /* size does NOT include NULL :-( */
@@ -1178,9 +1202,11 @@ XS(w32_DomainName)
 {
     dXSARGS;
     HMODULE module = LoadLibrary("netapi32.dll");
-    PFNNetApiBufferFree pfnNetApiBufferFree;
-    PFNNetWkstaGetInfo pfnNetWkstaGetInfo;
+    PFNNetApiBufferFree pfnNetApiBufferFree = NULL;
+    PFNNetWkstaGetInfo pfnNetWkstaGetInfo = NULL;
 
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::DomainName()");
     if (module) {
         GETPROC(NetApiBufferFree);
         GETPROC(NetWkstaGetInfo);
@@ -1242,8 +1268,10 @@ XS(w32_FsType)
     dXSARGS;
     char fsname[256];
     DWORD flags, filecomplen;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::FsType()");
     if (GetVolumeInformation(NULL, NULL, 0, NULL, &filecomplen,
-                        &flags, fsname, sizeof(fsname))) {
+                             &flags, fsname, sizeof(fsname))) {
        if (GIMME_V == G_ARRAY) {
            XPUSHs(sv_2mortal(newSVpvn(fsname,strlen(fsname))));
            XPUSHs(sv_2mortal(newSViv(flags)));
@@ -1260,6 +1288,8 @@ XS(w32_FsType)
 XS(w32_GetOSVersion)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetOSVersion()");
 
     if (GIMME_V == G_SCALAR) {
         XSRETURN_IV(g_osver.dwPlatformId);
@@ -1282,6 +1312,8 @@ XS(w32_GetOSVersion)
 XS(w32_IsWinNT)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::IsWinNT()");
     EXTEND(SP,1);
     XSRETURN_IV(IsWinNT());
 }
@@ -1289,6 +1321,8 @@ XS(w32_IsWinNT)
 XS(w32_IsWin95)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::IsWin95()");
     EXTEND(SP,1);
     XSRETURN_IV(IsWin95());
 }
@@ -1364,6 +1398,8 @@ XS(w32_GetTickCount)
 {
     dXSARGS;
     DWORD msec = GetTickCount();
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetTickCount()");
     EXTEND(SP,1);
     if ((IV)msec > 0)
        XSRETURN_IV(msec);
@@ -1525,7 +1561,7 @@ XS(w32_GetLongPathName)
         WCHAR wide_path[MAX_PATH+1];
         WCHAR *long_path;
 
-        if (wcslen(wstr) < countof(wide_path)) {
+        if (wcslen(wstr) < (size_t)countof(wide_path)) {
             wcscpy(wide_path, wstr);
             long_path = my_longpathW(wide_path);
             if (long_path) {
@@ -1619,6 +1655,8 @@ XS(w32_OutputDebugString)
 XS(w32_GetCurrentProcessId)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetCurrentProcessId()");
     EXTEND(SP,1);
     XSRETURN_IV(GetCurrentProcessId());
 }
@@ -1626,6 +1664,8 @@ XS(w32_GetCurrentProcessId)
 XS(w32_GetCurrentThreadId)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetCurrentThreadId()");
     EXTEND(SP,1);
     XSRETURN_IV(GetCurrentThreadId());
 }
@@ -1713,6 +1753,8 @@ XS(w32_GetProductInfo)
 XS(w32_GetACP)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetACP()");
     EXTEND(SP,1);
     XSRETURN_IV(GetACP());
 }
@@ -1720,6 +1762,8 @@ XS(w32_GetACP)
 XS(w32_GetConsoleCP)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetConsoleCP()");
     EXTEND(SP,1);
     XSRETURN_IV(GetConsoleCP());
 }
@@ -1727,6 +1771,8 @@ XS(w32_GetConsoleCP)
 XS(w32_GetConsoleOutputCP)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetConsoleOutputCP()");
     EXTEND(SP,1);
     XSRETURN_IV(GetConsoleOutputCP());
 }
@@ -1734,6 +1780,8 @@ XS(w32_GetConsoleOutputCP)
 XS(w32_GetOEMCP)
 {
     dXSARGS;
+    if (items)
+       Perl_croak(aTHX_ "usage: Win32::GetOEMCP()");
     EXTEND(SP,1);
     XSRETURN_IV(GetOEMCP());
 }
@@ -1764,7 +1812,7 @@ PROTOTYPES: DISABLE
 
 BOOT:
 {
-    char *file = __FILE__;
+    const char *file = __FILE__;
 
     if (g_osver.dwOSVersionInfoSize == 0) {
         g_osver.dwOSVersionInfoSize = sizeof(g_osver);
index ea6c1de..429e65d 100644 (file)
@@ -81,7 +81,7 @@ LONGPATH(CHAR_T *path)
        *start = sep;
        if (fhand != INVALID_HANDLE_VALUE) {
            STRLEN len = FN_STRLEN(fdata.cFileName);
-           if ((STRLEN)(tmpbuf + sizeof(tmpbuf) - tmpstart) > len) {
+           if (len < (STRLEN)(tmpbuf - tmpstart + sizeof(tmpbuf))) {
                FN_STRCPY(tmpstart, fdata.cFileName);
                tmpstart += len;
                FindClose(fhand);