3333#include "perl.h"
3434#include "XSUB.h"
3535
36+ #ifndef A2WHELPER
37+ # define A2WHELPER_LEN (lpa , alen , lpw , nBytes )\
38+ (lpw[0] = 0, MultiByteToWideChar((IN_BYTES) ? CP_ACP : CP_UTF8, 0, \
39+ lpa, alen, lpw, (nBytes/sizeof(WCHAR))))
40+ # define A2WHELPER (lpa , lpw , nBytes ) A2WHELPER_LEN(lpa, -1, lpw, nBytes)
41+
42+ # define W2AHELPER_LEN (lpw , wlen , lpa , nChars )\
43+ (lpa[0] = '\0', WideCharToMultiByte((IN_BYTES) ? CP_ACP : CP_UTF8, 0, \
44+ lpw, wlen, (LPSTR)lpa, nChars,NULL,NULL))
45+ # define W2AHELPER (lpw , lpa , nChars ) W2AHELPER_LEN(lpw, -1, lpa, nChars)
46+ #endif
47+
3648#include "../ppport.h"
3749
3850#define RETURNRESULT (x ) if ((x)){ XST_mYES(0); }\
@@ -556,7 +568,7 @@ _AllocWideName(char* name)
556568 length = (strlen (name )+ 1 ) * sizeof (WCHAR );
557569 lpPtr = (LPWSTR )malloc (length );
558570 if (lpPtr != NULL )
559- MultiByteToWideChar (CP_ACP , NULL , name , -1 , lpPtr , length );
571+ MultiByteToWideChar (CP_ACP , 0 , name , -1 , lpPtr , length );
560572 }
561573 return lpPtr ;
562574}
574586WCTMB (LPWSTR lpwStr , LPSTR lpStr , int size )
575587{
576588 * lpStr = '\0' ;
577- return WideCharToMultiByte (CP_ACP ,NULL , lpwStr ,-1 ,lpStr ,size ,NULL ,NULL );
589+ return WideCharToMultiByte (CP_ACP , 0 , lpwStr , -1 , lpStr , size , NULL , 0 );
578590}
579591
580592/*
@@ -902,7 +914,6 @@ XS(XS_NT__NetAdmin_UserChangePassword)
902914XS (XS_NT__NetAdmin_UsersExist )
903915{
904916 dXSARGS ;
905- char buffer [UNLEN + 1 ];
906917 LPWSTR lpwServer , lpwUser ;
907918 PUSER_INFO_0 puiUser ;
908919 BOOL bReturn = FALSE;
@@ -936,9 +947,8 @@ XS(XS_NT__NetAdmin_GetUsers)
936947 PUSER_INFO_0 pwzUsers ;
937948 PUSER_INFO_10 pwzUsers10 ;
938949 DWORD filter , entriesRead , totalEntries , resumeHandle = 0 ;
939- int index ;
940- SV * sv , * nSv ;
941- SV * user ;
950+ DWORD index ;
951+ SV * sv ;
942952 DWORD lastError = 0 ;
943953
944954 if (items != 3 ) {
@@ -1007,7 +1017,7 @@ XS(XS_NT__NetAdmin_GetTransports)
10071017 char buffer1 [UNLEN + 1 ];
10081018 PWKSTA_TRANSPORT_INFO_0 pws ;
10091019 DWORD entriesRead , totalEntries , resumeHandle = 0 ;
1010- int index ;
1020+ DWORD index ;
10111021 SV * sv ;
10121022 HV * hvTemp ;
10131023 DWORD lastError = 0 ;
@@ -1100,9 +1110,8 @@ XS(XS_NT__NetAdmin_LoggedOnUsers)
11001110 PWKSTA_USER_INFO_0 pwzUser0 ;
11011111 PWKSTA_USER_INFO_1 pwzUser1 ;
11021112 DWORD entriesRead , totalEntries , resumeHandle = 0 ;
1103- int index ;
1104- SV * sv , * nSv ;
1105- SV * user ;
1113+ DWORD index ;
1114+ SV * sv ;
11061115 DWORD lastError = 0 ;
11071116
11081117 if (items != 2 ) {
@@ -1295,7 +1304,7 @@ XS(XS_NT__NetAdmin_GroupAddUsers)
12951304 for (index = 0 ; index <= count ; ++ index ) {
12961305 psv = av_fetch ((AV * )sv , index , 0 );
12971306 if (psv != NULL ) {
1298- MultiByteToWideChar (CP_ACP , NULL , (char * )SvPV (* psv ,n_a ),
1307+ MultiByteToWideChar (CP_ACP , 0 , (char * )SvPV (* psv ,n_a ),
12991308 -1 , wzUser , sizeof (wzUser ));
13001309 lastError = NetGroupAddUser (lpwServer , lpwGroup , wzUser );
13011310 if (lastError != 0 )
@@ -1304,7 +1313,7 @@ XS(XS_NT__NetAdmin_GroupAddUsers)
13041313 }
13051314 break ;
13061315 default :
1307- MultiByteToWideChar (CP_ACP , NULL , (char * )SvPV (sv ,n_a ),
1316+ MultiByteToWideChar (CP_ACP , 0 , (char * )SvPV (sv ,n_a ),
13081317 -1 , wzUser , sizeof (wzUser ));
13091318 lastError = NetGroupAddUser (lpwServer , lpwGroup , wzUser );
13101319 break ;
@@ -1342,7 +1351,7 @@ XS(XS_NT__NetAdmin_GroupDeleteUsers)
13421351 for (index = 0 ; index <= count ; ++ index ) {
13431352 psv = av_fetch ((AV * )sv , index , 0 );
13441353 if (psv != NULL ) {
1345- MultiByteToWideChar (CP_ACP , NULL , (char * )SvPV (* psv ,n_a ),
1354+ MultiByteToWideChar (CP_ACP , 0 , (char * )SvPV (* psv ,n_a ),
13461355 -1 , wzUser , sizeof (wzUser ));
13471356 lastError = NetGroupDelUser (lpwServer , lpwGroup , wzUser );
13481357 if (lastError != 0 )
@@ -1351,7 +1360,7 @@ XS(XS_NT__NetAdmin_GroupDeleteUsers)
13511360 }
13521361 break ;
13531362 default :
1354- MultiByteToWideChar (CP_ACP , NULL , (char * )SvPV (sv ,n_a ),
1363+ MultiByteToWideChar (CP_ACP , 0 , (char * )SvPV (sv ,n_a ),
13551364 -1 , wzUser , sizeof (wzUser ));
13561365 lastError = NetGroupDelUser (lpwServer , lpwGroup , wzUser );
13571366 break ;
@@ -1369,7 +1378,7 @@ XS(XS_NT__NetAdmin_GroupIsMember)
13691378 LPWSTR lpwServer , lpwGroup , lpwUser ;
13701379 PGROUP_USERS_INFO_0 pwzGroupUsers ;
13711380 DWORD entriesRead , totalEntries , resumeHandle = 0 ;
1372- int index ;
1381+ DWORD index ;
13731382 BOOL bReturn = FALSE;
13741383 DWORD lastError = 0 ;
13751384
@@ -1429,9 +1438,9 @@ XS(XS_NT__NetAdmin_GroupGetMembers)
14291438 char buffer [UNLEN + 1 ];
14301439 PGROUP_USERS_INFO_0 pwzGroupUsers ;
14311440 DWORD entriesRead , totalEntries ;
1432- size_t resumeHandle = 0 ;
1433- int index ;
1434- SV * sv , * nSv ;
1441+ DWORD resumeHandle = 0 ;
1442+ DWORD index ;
1443+ SV * sv ;
14351444 DWORD lastError = 0 ;
14361445
14371446 if (items != 3 ) {
@@ -1598,7 +1607,7 @@ XS(XS_NT__NetAdmin_LocalGroupAddUsers)
15981607 for (index = 0 ; index <= count ; ++ index ) {
15991608 psv = av_fetch ((AV * )sv , index , 0 );
16001609 if (psv != NULL ) {
1601- MultiByteToWideChar (CP_ACP , NULL , (char * )SvPV (* psv ,n_a ),
1610+ MultiByteToWideChar (CP_ACP , 0 , (char * )SvPV (* psv ,n_a ),
16021611 -1 , wzUser , sizeof (wzUser ));
16031612 lastError = NetLocalGroupAddMembers (lpwServer , lpwGroup , 3 ,
16041613 (LPBYTE )& lgmi3MembersInfo , 1 );
@@ -1608,7 +1617,7 @@ XS(XS_NT__NetAdmin_LocalGroupAddUsers)
16081617 }
16091618 break ;
16101619 default :
1611- MultiByteToWideChar (CP_ACP , NULL , (char * )SvPV (sv ,n_a ), -1 ,
1620+ MultiByteToWideChar (CP_ACP , 0 , (char * )SvPV (sv ,n_a ), -1 ,
16121621 wzUser , sizeof (wzUser ));
16131622 lastError = NetLocalGroupAddMembers (lpwServer , lpwGroup , 3 ,
16141623 (LPBYTE )& lgmi3MembersInfo , 1 );
@@ -1649,7 +1658,7 @@ XS(XS_NT__NetAdmin_LocalGroupDeleteUsers)
16491658 for (index = 0 ; index <= count ; ++ index ) {
16501659 psv = av_fetch ((AV * )sv , index , 0 );
16511660 if (psv != NULL ) {
1652- MultiByteToWideChar (CP_ACP , NULL , (char * )SvPV (* psv ,n_a ),
1661+ MultiByteToWideChar (CP_ACP , 0 , (char * )SvPV (* psv ,n_a ),
16531662 -1 , wzUser , sizeof (wzUser ));
16541663 lastError = NetLocalGroupDelMembers (lpwServer , lpwGroup , 3 ,
16551664 (LPBYTE )& lgmi3MembersInfo , 1 );
@@ -1659,7 +1668,7 @@ XS(XS_NT__NetAdmin_LocalGroupDeleteUsers)
16591668 }
16601669 break ;
16611670 default :
1662- MultiByteToWideChar (CP_ACP , NULL , (char * )SvPV (sv ,n_a ), -1 ,
1671+ MultiByteToWideChar (CP_ACP , 0 , (char * )SvPV (sv ,n_a ), -1 ,
16631672 wzUser , sizeof (wzUser ));
16641673 lastError = NetLocalGroupDelMembers (lpwServer , lpwGroup , 3 ,
16651674 (LPBYTE )& lgmi3MembersInfo , 1 );
@@ -1675,10 +1684,10 @@ XS(XS_NT__NetAdmin_LocalGroupDeleteUsers)
16751684XS (XS_NT__NetAdmin_LocalGroupIsMember )
16761685{
16771686 dXSARGS ;
1678- LPWSTR lpwServer , lpwGroup , lpwUser ;
1687+ LPWSTR lpwServer , lpwGroup ;
16791688 DWORD entriesRead , totalEntries ;
1680- size_t resumeHandle = 0 ;
1681- int index ;
1689+ DWORD resumeHandle = 0 ;
1690+ DWORD index ;
16821691 BOOL bReturn = FALSE;
16831692 DWORD lastError = 0 ;
16841693
@@ -1689,22 +1698,12 @@ XS(XS_NT__NetAdmin_LocalGroupIsMember)
16891698 STRLEN n_a ;
16901699#if 1
16911700 PSID pSid ;
1692- if (USING_WIDE ()) {
1693- WCHAR wSystemName [MAX_PATH + 1 ];
1694- WCHAR wAccountName [MAX_PATH + 1 ];
1695- A2WHELPER ((LPCTSTR )SvPV (ST (0 ),n_a ), wSystemName , sizeof (wSystemName ));
1696- A2WHELPER ((LPCTSTR )SvPV (ST (2 ),n_a ), wAccountName , sizeof (wAccountName ));
1697- lastError = GetAccountSIDW (wSystemName ,
1698- wAccountName ,
1699- & pSid );
1700- }
1701- else
1702- lastError = GetAccountSIDA ((LPCTSTR )SvPV (ST (0 ),n_a ),
1703- (LPCTSTR )SvPV (ST (2 ),n_a ),
1704- & pSid );
1701+ lastError = GetAccountSIDA ((LPCTSTR )SvPV (ST (0 ),n_a ),
1702+ (LPCTSTR )SvPV (ST (2 ),n_a ),
1703+ & pSid );
17051704 if (ERROR_SUCCESS != lastError )
17061705 XSRETURN_NO ;
1707-
1706+
17081707 AllocWideName ((char * )SvPV (ST (0 ),n_a ), lpwServer );
17091708 AllocWideName ((char * )SvPV (ST (1 ),n_a ), lpwGroup );
17101709 do {
@@ -1767,9 +1766,9 @@ XS(XS_NT__NetAdmin_LocalGroupGetMembers)
17671766 char buffer [UNLEN + 1 ];
17681767 PLOCALGROUP_MEMBERS_INFO_1 pwzMembersInfo ;
17691768 DWORD entriesRead , totalEntries ;
1770- size_t resumeHandle = 0 ;
1771- int index ;
1772- SV * sv , * nSv ;
1769+ DWORD resumeHandle = 0 ;
1770+ DWORD index ;
1771+ SV * sv ;
17731772 DWORD lastError = 0 ;
17741773
17751774 if (items != 3 ) {
@@ -1821,9 +1820,9 @@ XS(XS_NT__NetAdmin_LocalGroupGetMembersWithDomain)
18211820 char buffer1 [UNLEN + 1 ];
18221821 PLOCALGROUP_MEMBERS_INFO_2 pwzMembersInfo ;
18231822 DWORD entriesRead , totalEntries ;
1824- size_t resumeHandle = 0 ;
1825- int index ;
1826- SV * sv , * nSv ;
1823+ DWORD resumeHandle = 0 ;
1824+ DWORD index ;
1825+ SV * sv ;
18271826 DWORD lastError = 0 ;
18281827
18291828 if (items != 3 ) {
@@ -1899,8 +1898,8 @@ XS(XS_NT__NetAdmin_GetServers)
18991898 PSERVER_INFO_100 pwzServerInfo ;
19001899 PSERVER_INFO_101 pwzServerInfo101 ;
19011900 DWORD entriesRead , totalEntries , resumeHandle = 0 ;
1902- int index ;
1903- SV * sv , * nSv ;
1901+ DWORD index ;
1902+ SV * sv ;
19041903 DWORD lastError = 0 ;
19051904
19061905 if (items != 4 ) {
@@ -1977,8 +1976,8 @@ XS(XS_NT__NetAdmin_GetServerDisks)
19771976 LPWSTR disks ;
19781977 LPWSTR p ;
19791978 DWORD entriesRead , totalEntries , resumeHandle = 0 ;
1980- int index ;
1981- SV * sv , * nSv ;
1979+ DWORD index ;
1980+ SV * sv ;
19821981 DWORD lastError = 0 ;
19831982
19841983 if (items != 2 ) {
0 commit comments