From: Jan Dubois Date: Mon, 7 Nov 2005 20:39:02 +0000 (-0800) Subject: Remove unused USING_WIDE code from win32 and wince branches X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8c56068e9474ff1eb28abd58496550d54581dd25;p=p5sagit%2Fp5-mst-13.2.git Remove unused USING_WIDE code from win32 and wince branches From: "Jan Dubois" Message-ID: <078001c5e41e$585c4140$6401a8c0@candy> p4raw-id: //depot/perl@26041 --- diff --git a/win32/ext/Win32/Win32.xs b/win32/ext/Win32/Win32.xs index 529467a..3e502b1 100644 --- a/win32/ext/Win32/Win32.xs +++ b/win32/ext/Win32/Win32.xs @@ -5,7 +5,6 @@ #include "XSUB.h" #define SE_SHUTDOWN_NAMEA "SeShutdownPrivilege" -#define SE_SHUTDOWN_NAMEW L"SeShutdownPrivilege" typedef BOOL (WINAPI *PFNSHGetSpecialFolderPath)(HWND, char*, int, BOOL); typedef HRESULT (WINAPI *PFNSHGetFolderPath)(HWND, int, HANDLE, DWORD, LPTSTR); @@ -16,26 +15,12 @@ typedef HRESULT (WINAPI *PFNSHGetFolderPath)(HWND, int, HANDLE, DWORD, LPTSTR); XS(w32_ExpandEnvironmentStrings) { dXSARGS; - char *lpSource; BYTE buffer[4096]; - DWORD dwDataLen; - STRLEN n_a; if (items != 1) croak("usage: Win32::ExpandEnvironmentStrings($String);\n"); - lpSource = (char *)SvPV(ST(0), n_a); - - if (USING_WIDE()) { - WCHAR wSource[MAX_PATH+1]; - WCHAR wbuffer[4096]; - A2WHELPER(lpSource, wSource, sizeof(wSource)); - dwDataLen = ExpandEnvironmentStringsW(wSource, wbuffer, sizeof(wbuffer)/2); - W2AHELPER(wbuffer, buffer, sizeof(buffer)); - } - else - dwDataLen = ExpandEnvironmentStringsA(lpSource, (char*)buffer, sizeof(buffer)); - + ExpandEnvironmentStringsA(SvPV_nolen(ST(0)), (char*)buffer, sizeof(buffer)); XSRETURN_PV((char*)buffer); } @@ -173,9 +158,8 @@ XS(w32_LookupAccountName) SID_NAME_USE snu; char Domain[256]; DWORD DomLen; - STRLEN n_a; BOOL bResult; - + if (items != 5) croak("usage: Win32::LookupAccountName($system, $account, $domain, " "$sid, $sidtype);\n"); @@ -183,44 +167,21 @@ XS(w32_LookupAccountName) SIDLen = sizeof(SID); DomLen = sizeof(Domain); - if (USING_WIDE()) { - WCHAR wSID[sizeof(SID)]; - WCHAR wDomain[sizeof(Domain)]; - WCHAR wSystem[MAX_PATH+1]; - WCHAR wAccount[MAX_PATH+1]; - A2WHELPER(SvPV(ST(0),n_a), wSystem, sizeof(wSystem)); - A2WHELPER(SvPV(ST(1),n_a), wAccount, sizeof(wAccount)); - bResult = LookupAccountNameW(wSystem, /* System */ - wAccount, /* Account name */ - &wSID, /* SID structure */ - &SIDLen, /* Size of SID buffer */ - wDomain, /* Domain buffer */ - &DomLen, /* Domain buffer size */ - &snu); /* SID name type */ - if (bResult) { - W2AHELPER(wSID, SID, SIDLen); - W2AHELPER(wDomain, Domain, DomLen); - } - } - else - bResult = LookupAccountNameA(SvPV(ST(0),n_a), /* System */ - SvPV(ST(1),n_a), /* Account name */ - &SID, /* SID structure */ - &SIDLen, /* Size of SID buffer */ - Domain, /* Domain buffer */ - &DomLen, /* Domain buffer size */ - &snu); /* SID name type */ + bResult = LookupAccountNameA(SvPV_nolen(ST(0)), /* System */ + SvPV_nolen(ST(1)), /* Account name */ + &SID, /* SID structure */ + &SIDLen, /* Size of SID buffer */ + Domain, /* Domain buffer */ + &DomLen, /* Domain buffer size */ + &snu); /* SID name type */ if (bResult) { sv_setpv(ST(2), Domain); sv_setpvn(ST(3), SID, SIDLen); sv_setiv(ST(4), snu); XSRETURN_YES; } - else { - GetLastError(); - XSRETURN_NO; - } -} /* NTLookupAccountName */ + XSRETURN_NO; +} XS(w32_LookupAccountSID) @@ -232,56 +193,29 @@ XS(w32_LookupAccountSID) char Domain[256]; DWORD DomLen = sizeof(Domain); SID_NAME_USE snu; - STRLEN n_a; BOOL bResult; if (items != 5) croak("usage: Win32::LookupAccountSID($system, $sid, $account, $domain, $sidtype);\n"); - sid = SvPV(ST(1), n_a); + sid = SvPV_nolen(ST(1)); if (IsValidSid(sid)) { - if (USING_WIDE()) { - WCHAR wDomain[sizeof(Domain)]; - WCHAR wSystem[MAX_PATH+1]; - WCHAR wAccount[sizeof(Account)]; - A2WHELPER(SvPV(ST(0),n_a), wSystem, sizeof(wSystem)); - - bResult = LookupAccountSidW(wSystem, /* System */ - sid, /* SID structure */ - wAccount, /* Account name buffer */ - &AcctLen, /* name buffer length */ - wDomain, /* Domain buffer */ - &DomLen, /* Domain buffer length */ - &snu); /* SID name type */ - if (bResult) { - W2AHELPER(wAccount, Account, AcctLen); - W2AHELPER(wDomain, Domain, DomLen); - } - } - else - bResult = LookupAccountSidA(SvPV(ST(0),n_a), /* System */ - sid, /* SID structure */ - Account, /* Account name buffer */ - &AcctLen, /* name buffer length */ - Domain, /* Domain buffer */ - &DomLen, /* Domain buffer length */ - &snu); /* SID name type */ + bResult = LookupAccountSidA(SvPV_nolen(ST(0)), /* System */ + sid, /* SID structure */ + Account, /* Account name buffer */ + &AcctLen, /* name buffer length */ + Domain, /* Domain buffer */ + &DomLen, /* Domain buffer length */ + &snu); /* SID name type */ if (bResult) { sv_setpv(ST(2), Account); sv_setpv(ST(3), Domain); sv_setiv(ST(4), (IV)snu); XSRETURN_YES; } - else { - GetLastError(); - XSRETURN_NO; - } } - else { - GetLastError(); - XSRETURN_NO; - } -} /* NTLookupAccountSID */ + XSRETURN_NO; +} XS(w32_InitiateSystemShutdown) { @@ -289,31 +223,21 @@ XS(w32_InitiateSystemShutdown) HANDLE hToken; /* handle to process token */ TOKEN_PRIVILEGES tkp; /* pointer to token structure */ BOOL bRet; - WCHAR wbuffer[MAX_PATH+1]; char *machineName, *message; - STRLEN n_a; if (items != 5) croak("usage: Win32::InitiateSystemShutdown($machineName, $message, " "$timeOut, $forceClose, $reboot);\n"); - machineName = SvPV(ST(0), n_a); - if (USING_WIDE()) { - A2WHELPER(machineName, wbuffer, sizeof(wbuffer)); - } + machineName = SvPV_nolen(ST(0)); if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { - if (USING_WIDE()) - LookupPrivilegeValueW(wbuffer, - SE_SHUTDOWN_NAMEW, - &tkp.Privileges[0].Luid); - else - LookupPrivilegeValueA(machineName, - SE_SHUTDOWN_NAMEA, - &tkp.Privileges[0].Luid); + LookupPrivilegeValueA(machineName, + SE_SHUTDOWN_NAMEA, + &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; /* only setting one */ tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; @@ -323,19 +247,9 @@ XS(w32_InitiateSystemShutdown) (PTOKEN_PRIVILEGES)NULL, 0); } - message = SvPV(ST(1), n_a); - if (USING_WIDE()) { - WCHAR* pWBuf; - int length = strlen(message)+1; - New(0, pWBuf, length, WCHAR); - A2WHELPER(message, pWBuf, length*sizeof(WCHAR)); - bRet = InitiateSystemShutdownW(wbuffer, pWBuf, - SvIV(ST(2)), SvIV(ST(3)), SvIV(ST(4))); - Safefree(pWBuf); - } - else - bRet = InitiateSystemShutdownA(machineName, message, - SvIV(ST(2)), SvIV(ST(3)), SvIV(ST(4))); + message = SvPV_nolen(ST(1)); + bRet = InitiateSystemShutdownA(machineName, message, + SvIV(ST(2)), SvIV(ST(3)), SvIV(ST(4))); /* Disable shutdown privilege. */ tkp.Privileges[0].Attributes = 0; @@ -352,29 +266,19 @@ XS(w32_AbortSystemShutdown) TOKEN_PRIVILEGES tkp; /* pointer to token structure */ BOOL bRet; char *machineName; - STRLEN n_a; - WCHAR wbuffer[MAX_PATH+1]; if (items != 1) croak("usage: Win32::AbortSystemShutdown($machineName);\n"); - machineName = SvPV(ST(0), n_a); - if (USING_WIDE()) { - A2WHELPER(machineName, wbuffer, sizeof(wbuffer)); - } + machineName = SvPV_nolen(ST(0)); if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { - if (USING_WIDE()) - LookupPrivilegeValueW(wbuffer, - SE_SHUTDOWN_NAMEW, - &tkp.Privileges[0].Luid); - else - LookupPrivilegeValueA(machineName, - SE_SHUTDOWN_NAMEA, - &tkp.Privileges[0].Luid); + LookupPrivilegeValueA(machineName, + SE_SHUTDOWN_NAMEA, + &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; /* only setting one */ tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; @@ -384,11 +288,7 @@ XS(w32_AbortSystemShutdown) (PTOKEN_PRIVILEGES)NULL, 0); } - if (USING_WIDE()) { - bRet = AbortSystemShutdownW(wbuffer); - } - else - bRet = AbortSystemShutdownA(machineName); + bRet = AbortSystemShutdownA(machineName); /* Disable shutdown privilege. */ tkp.Privileges[0].Attributes = 0; @@ -405,64 +305,39 @@ XS(w32_MsgBox) char *msg; char *title = "Perl"; DWORD flags = MB_ICONEXCLAMATION; - STRLEN n_a; I32 result; if (items < 1 || items > 3) croak("usage: Win32::MsgBox($message [, $flags [, $title]]);\n"); - msg = SvPV(ST(0), n_a); + msg = SvPV_nolen(ST(0)); if (items > 1) { flags = SvIV(ST(1)); if (items > 2) - title = SvPV(ST(2), n_a); - } - if (USING_WIDE()) { - WCHAR* pMsg; - WCHAR* pTitle; - int length; - length = strlen(msg)+1; - New(0, pMsg, length, WCHAR); - A2WHELPER(msg, pMsg, length*sizeof(WCHAR)); - length = strlen(title)+1; - New(0, pTitle, length, WCHAR); - A2WHELPER(title, pTitle, length*sizeof(WCHAR)); - result = MessageBoxW(GetActiveWindow(), pMsg, pTitle, flags); - Safefree(pMsg); - Safefree(pTitle); + title = SvPV_nolen(ST(2)); } - else - result = MessageBoxA(GetActiveWindow(), msg, title, flags); - + result = MessageBoxA(GetActiveWindow(), msg, title, flags); XSRETURN_IV(result); } XS(w32_LoadLibrary) { dXSARGS; - STRLEN n_a; HANDLE hHandle; - char* lpName; if (items != 1) croak("usage: Win32::LoadLibrary($libname)\n"); - lpName = (char *)SvPV(ST(0),n_a); - if (USING_WIDE()) { - WCHAR wbuffer[MAX_PATH+1]; - A2WHELPER(lpName, wbuffer, sizeof(wbuffer)); - hHandle = LoadLibraryW(wbuffer); - } - else - hHandle = LoadLibraryA(lpName); + hHandle = LoadLibraryA(SvPV_nolen(ST(0))); XSRETURN_IV((long)hHandle); } XS(w32_FreeLibrary) { dXSARGS; + if (items != 1) croak("usage: Win32::FreeLibrary($handle)\n"); - if (FreeLibrary((HINSTANCE) SvIV(ST(0)))) { + if (FreeLibrary(INT2PTR(HINSTANCE, SvIV(ST(0))))) { XSRETURN_YES; } XSRETURN_NO; @@ -471,10 +346,10 @@ XS(w32_FreeLibrary) XS(w32_GetProcAddress) { dXSARGS; - STRLEN n_a; + if (items != 2) croak("usage: Win32::GetProcAddress($hinstance, $procname)\n"); - XSRETURN_IV((long)GetProcAddress((HINSTANCE)SvIV(ST(0)), SvPV(ST(1), n_a))); + XSRETURN_IV(PTR2IV(GetProcAddress(INT2PTR(HINSTANCE, SvIV(ST(0))), SvPV_nolen(ST(1))))); } XS(w32_RegisterServer) @@ -483,31 +358,19 @@ XS(w32_RegisterServer) BOOL result = FALSE; HINSTANCE hnd; FARPROC func; - STRLEN n_a; - char* lpName; if (items != 1) croak("usage: Win32::RegisterServer($libname)\n"); - lpName = SvPV(ST(0),n_a); - if (USING_WIDE()) { - WCHAR wbuffer[MAX_PATH+1]; - A2WHELPER(lpName, wbuffer, sizeof(wbuffer)); - hnd = LoadLibraryW(wbuffer); - } - else - hnd = LoadLibraryA(lpName); - + hnd = LoadLibraryA(SvPV_nolen(ST(0))); if (hnd) { func = GetProcAddress(hnd, "DllRegisterServer"); if (func && func() == 0) result = TRUE; FreeLibrary(hnd); } - if (result) - XSRETURN_YES; - else - XSRETURN_NO; + ST(0) = boolSV(result); + XSRETURN(1); } XS(w32_UnregisterServer) @@ -516,31 +379,19 @@ XS(w32_UnregisterServer) BOOL result = FALSE; HINSTANCE hnd; FARPROC func; - STRLEN n_a; - char* lpName; if (items != 1) croak("usage: Win32::UnregisterServer($libname)\n"); - lpName = SvPV(ST(0),n_a); - if (USING_WIDE()) { - WCHAR wbuffer[MAX_PATH+1]; - A2WHELPER(lpName, wbuffer, sizeof(wbuffer)); - hnd = LoadLibraryW(wbuffer); - } - else - hnd = LoadLibraryA(lpName); - + hnd = LoadLibraryA(SvPV_nolen(ST(0))); if (hnd) { func = GetProcAddress(hnd, "DllUnregisterServer"); if (func && func() == 0) result = TRUE; FreeLibrary(hnd); } - if (result) - XSRETURN_YES; - else - XSRETURN_NO; + ST(0) = boolSV(result); + XSRETURN(1); } /* XXX rather bogus */ @@ -595,10 +446,6 @@ XS(w32_GetFolderPath) if (items == 2) create = SvTRUE(ST(1)) ? CSIDL_FLAG_CREATE : 0; - /* We are not bothering with USING_WIDE() anymore, - * because this is not how Unicode works with Perl. - * Nobody seems to use "perl -C" anyways. - */ module = LoadLibrary("shfolder.dll"); if (module) { PFNSHGetFolderPath pfn; diff --git a/win32/perlhost.h b/win32/perlhost.h index 24ed2b7..92d5757 100644 --- a/win32/perlhost.h +++ b/win32/perlhost.h @@ -2414,13 +2414,7 @@ CPerlHost::Chdir(const char *dirname) errno = ENOENT; return -1; } - if (USING_WIDE()) { - WCHAR wBuffer[MAX_PATH]; - A2WHELPER(dirname, wBuffer, sizeof(wBuffer)); - ret = m_pvDir->SetCurrentDirectoryW(wBuffer); - } - else - ret = m_pvDir->SetCurrentDirectoryA((char*)dirname); + ret = m_pvDir->SetCurrentDirectoryA((char*)dirname); if(ret < 0) { errno = ENOENT; } diff --git a/win32/win32.c b/win32/win32.c index f640141..880a59b 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -741,11 +741,6 @@ win32_opendir(const char *filename) char scanname[MAX_PATH+3]; Stat_t sbuf; WIN32_FIND_DATAA aFindData; - WIN32_FIND_DATAW wFindData; - HANDLE fh; - char buffer[MAX_PATH*2]; - WCHAR wbuffer[MAX_PATH+1]; - char* ptr; len = strlen(filename); if (len > MAX_PATH) @@ -773,15 +768,8 @@ win32_opendir(const char *filename) scanname[len] = '\0'; /* do the FindFirstFile call */ - if (USING_WIDE()) { - A2WHELPER(scanname, wbuffer, sizeof(wbuffer)); - fh = FindFirstFileW(PerlDir_mapW(wbuffer), &wFindData); - } - else { - fh = FindFirstFileA(PerlDir_mapA(scanname), &aFindData); - } - dirp->handle = fh; - if (fh == INVALID_HANDLE_VALUE) { + dirp->handle = FindFirstFileA(PerlDir_mapA(scanname), &aFindData); + if (dirp->handle == INVALID_HANDLE_VALUE) { DWORD err = GetLastError(); /* FindFirstFile() fails on empty drives! */ switch (err) { @@ -805,20 +793,13 @@ win32_opendir(const char *filename) /* now allocate the first part of the string table for * the filenames that we find. */ - if (USING_WIDE()) { - W2AHELPER(wFindData.cFileName, buffer, sizeof(buffer)); - ptr = buffer; - } - else { - ptr = aFindData.cFileName; - } - idx = strlen(ptr)+1; + idx = strlen(aFindData.cFileName)+1; if (idx < 256) dirp->size = 128; else dirp->size = idx; Newx(dirp->start, dirp->size, char); - strcpy(dirp->start, ptr); + strcpy(dirp->start, aFindData.cFileName); dirp->nfiles++; dirp->end = dirp->curr = dirp->start; dirp->end += idx; @@ -847,30 +828,16 @@ win32_readdir(DIR *dirp) dirp->curr += len + 1; if (dirp->curr >= dirp->end) { dTHX; - char* ptr; BOOL res; - WIN32_FIND_DATAW wFindData; WIN32_FIND_DATAA aFindData; - char buffer[MAX_PATH*2]; /* finding the next file that matches the wildcard * (which should be all of them in this directory!). */ - if (USING_WIDE()) { - res = FindNextFileW(dirp->handle, &wFindData); - if (res) { - W2AHELPER(wFindData.cFileName, buffer, sizeof(buffer)); - ptr = buffer; - } - } - else { - res = FindNextFileA(dirp->handle, &aFindData); - if (res) - ptr = aFindData.cFileName; - } + res = FindNextFileA(dirp->handle, &aFindData); if (res) { long endpos = dirp->end - dirp->start; - long newsize = endpos + strlen(ptr) + 1; + long newsize = endpos + strlen(aFindData.cFileName) + 1; /* bump the string table size by enough for the * new name and its null terminator */ while (newsize > dirp->size) { @@ -879,7 +846,7 @@ win32_readdir(DIR *dirp) Renew(dirp->start, dirp->size, char); dirp->curr = dirp->start + curpos; } - strcpy(dirp->start + endpos, ptr); + strcpy(dirp->start + endpos, aFindData.cFileName); dirp->end = dirp->start + newsize; dirp->nfiles++; } @@ -1187,8 +1154,6 @@ win32_stat(const char *path, Stat_t *sbuf) char buffer[MAX_PATH+1]; int l = strlen(path); int res; - WCHAR wbuffer[MAX_PATH+1]; - WCHAR* pwbuffer; HANDLE handle; int nlink = 1; @@ -1223,16 +1188,9 @@ win32_stat(const char *path, Stat_t *sbuf) /* We *must* open & close the file once; otherwise file attribute changes */ /* might not yet have propagated to "other" hard links of the same file. */ /* This also gives us an opportunity to determine the number of links. */ - if (USING_WIDE()) { - A2WHELPER(path, wbuffer, sizeof(wbuffer)); - pwbuffer = PerlDir_mapW(wbuffer); - handle = CreateFileW(pwbuffer, 0, 0, NULL, OPEN_EXISTING, 0, NULL); - } - else { - path = PerlDir_mapA(path); - l = strlen(path); - handle = CreateFileA(path, 0, 0, NULL, OPEN_EXISTING, 0, NULL); - } + path = PerlDir_mapA(path); + l = strlen(path); + handle = CreateFileA(path, 0, 0, NULL, OPEN_EXISTING, 0, NULL); if (handle != INVALID_HANDLE_VALUE) { BY_HANDLE_FILE_INFORMATION bhi; if (GetFileInformationByHandle(handle, &bhi)) @@ -1240,21 +1198,12 @@ win32_stat(const char *path, Stat_t *sbuf) CloseHandle(handle); } - /* pwbuffer or path will be mapped correctly above */ - if (USING_WIDE()) { -#if defined(WIN64) || defined(USE_LARGE_FILES) - res = _wstati64(pwbuffer, sbuf); -#else - res = _wstat(pwbuffer, (struct _stat*)sbuf); -#endif - } - else { + /* path will be mapped correctly above */ #if defined(WIN64) || defined(USE_LARGE_FILES) - res = _stati64(path, sbuf); + res = _stati64(path, sbuf); #else - res = stat(path, sbuf); + res = stat(path, sbuf); #endif - } sbuf->st_nlink = nlink; if (res < 0) { @@ -1262,13 +1211,7 @@ win32_stat(const char *path, Stat_t *sbuf) * XXX using GetFileAttributesEx() will enable us to set * sbuf->st_*time (but note that's not available on the * Windows of 1995) */ - DWORD r; - if (USING_WIDE()) { - r = GetFileAttributesW(pwbuffer); - } - else { - r = GetFileAttributesA(path); - } + DWORD r = GetFileAttributesA(path); if (r != 0xffffffff && (r & FILE_ATTRIBUTE_DIRECTORY)) { /* sbuf may still contain old garbage since stat() failed */ Zero(sbuf, 1, Stat_t); @@ -1284,9 +1227,7 @@ win32_stat(const char *path, Stat_t *sbuf) && (path[2] == '\\' || path[2] == '/')) { /* The drive can be inaccessible, some _stat()s are buggy */ - if (USING_WIDE() - ? !GetVolumeInformationW(pwbuffer,NULL,0,NULL,NULL,NULL,NULL,0) - : !GetVolumeInformationA(path,NULL,0,NULL,NULL,NULL,NULL,0)) { + if (!GetVolumeInformationA(path,NULL,0,NULL,NULL,NULL,NULL,0)) { errno = ENOENT; return -1; } @@ -1423,38 +1364,18 @@ DllExport char * win32_getenv(const char *name) { dTHX; - WCHAR wBuffer[MAX_PATH+1]; DWORD needlen; SV *curitem = Nullsv; - if (USING_WIDE()) { - A2WHELPER(name, wBuffer, sizeof(wBuffer)); - needlen = GetEnvironmentVariableW(wBuffer, NULL, 0); - } - else - needlen = GetEnvironmentVariableA(name,NULL,0); + needlen = GetEnvironmentVariableA(name,NULL,0); if (needlen != 0) { curitem = sv_2mortal(newSVpvn("", 0)); - if (USING_WIDE()) { - SV *acuritem; - do { - SvGROW(curitem, (needlen+1)*sizeof(WCHAR)); - needlen = GetEnvironmentVariableW(wBuffer, - (WCHAR*)SvPVX(curitem), - needlen); - } while (needlen >= SvLEN(curitem)/sizeof(WCHAR)); - SvCUR_set(curitem, (needlen*sizeof(WCHAR))+1); - acuritem = sv_2mortal(newSVsv(curitem)); - W2AHELPER((WCHAR*)SvPVX(acuritem), SvPVX(curitem), SvCUR(curitem)); - } - else { - do { - SvGROW(curitem, needlen+1); - needlen = GetEnvironmentVariableA(name,SvPVX(curitem), - needlen); - } while (needlen >= SvLEN(curitem)); - SvCUR_set(curitem, needlen); - } + do { + SvGROW(curitem, needlen+1); + needlen = GetEnvironmentVariableA(name,SvPVX(curitem), + needlen); + } while (needlen >= SvLEN(curitem)); + SvCUR_set(curitem, needlen); } else { /* allow any environment variables that begin with 'PERL' @@ -1474,48 +1395,32 @@ win32_putenv(const char *name) dTHX; char* curitem; char* val; - WCHAR* wCuritem; - WCHAR* wVal; int length, relval = -1; if (name) { - if (USING_WIDE()) { - length = strlen(name)+1; - Newx(wCuritem,length,WCHAR); - A2WHELPER(name, wCuritem, length*sizeof(WCHAR)); - wVal = wcschr(wCuritem, '='); - if (wVal) { - *wVal++ = '\0'; - if (SetEnvironmentVariableW(wCuritem, *wVal ? wVal : NULL)) - relval = 0; - } - Safefree(wCuritem); - } - else { - Newx(curitem,strlen(name)+1,char); - strcpy(curitem, name); - val = strchr(curitem, '='); - if (val) { - /* The sane way to deal with the environment. - * Has these advantages over putenv() & co.: - * * enables us to store a truly empty value in the - * environment (like in UNIX). - * * we don't have to deal with RTL globals, bugs and leaks. - * * Much faster. - * Why you may want to enable USE_WIN32_RTL_ENV: - * * environ[] and RTL functions will not reflect changes, - * which might be an issue if extensions want to access - * the env. via RTL. This cuts both ways, since RTL will - * not see changes made by extensions that call the Win32 - * functions directly, either. - * GSAR 97-06-07 - */ - *val++ = '\0'; - if (SetEnvironmentVariableA(curitem, *val ? val : NULL)) - relval = 0; - } - Safefree(curitem); - } + Newx(curitem,strlen(name)+1,char); + strcpy(curitem, name); + val = strchr(curitem, '='); + if (val) { + /* The sane way to deal with the environment. + * Has these advantages over putenv() & co.: + * * enables us to store a truly empty value in the + * environment (like in UNIX). + * * we don't have to deal with RTL globals, bugs and leaks. + * * Much faster. + * Why you may want to enable USE_WIN32_RTL_ENV: + * * environ[] and RTL functions will not reflect changes, + * which might be an issue if extensions want to access + * the env. via RTL. This cuts both ways, since RTL will + * not see changes made by extensions that call the Win32 + * functions directly, either. + * GSAR 97-06-07 + */ + *val++ = '\0'; + if (SetEnvironmentVariableA(curitem, *val ? val : NULL)) + relval = 0; + } + Safefree(curitem); } return relval; } @@ -1583,42 +1488,21 @@ win32_unlink(const char *filename) int ret; DWORD attrs; - if (USING_WIDE()) { - WCHAR wBuffer[MAX_PATH+1]; - WCHAR* pwBuffer; - - A2WHELPER(filename, wBuffer, sizeof(wBuffer)); - pwBuffer = PerlDir_mapW(wBuffer); - attrs = GetFileAttributesW(pwBuffer); - if (attrs == 0xFFFFFFFF) - goto fail; - if (attrs & FILE_ATTRIBUTE_READONLY) { - (void)SetFileAttributesW(pwBuffer, attrs & ~FILE_ATTRIBUTE_READONLY); - ret = _wunlink(pwBuffer); - if (ret == -1) - (void)SetFileAttributesW(pwBuffer, attrs); - } - else - ret = _wunlink(pwBuffer); + filename = PerlDir_mapA(filename); + attrs = GetFileAttributesA(filename); + if (attrs == 0xFFFFFFFF) { + errno = ENOENT; + return -1; } - else { - filename = PerlDir_mapA(filename); - attrs = GetFileAttributesA(filename); - if (attrs == 0xFFFFFFFF) - goto fail; - if (attrs & FILE_ATTRIBUTE_READONLY) { - (void)SetFileAttributesA(filename, attrs & ~FILE_ATTRIBUTE_READONLY); - ret = unlink(filename); - if (ret == -1) - (void)SetFileAttributesA(filename, attrs); - } - else - ret = unlink(filename); + if (attrs & FILE_ATTRIBUTE_READONLY) { + (void)SetFileAttributesA(filename, attrs & ~FILE_ATTRIBUTE_READONLY); + ret = unlink(filename); + if (ret == -1) + (void)SetFileAttributesA(filename, attrs); } + else + ret = unlink(filename); return ret; -fail: - errno = ENOENT; - return -1; } DllExport int @@ -1630,19 +1514,11 @@ win32_utime(const char *filename, struct utimbuf *times) FILETIME ftAccess; FILETIME ftWrite; struct utimbuf TimeBuffer; - WCHAR wbuffer[MAX_PATH+1]; - WCHAR* pwbuffer; - int rc; - if (USING_WIDE()) { - A2WHELPER(filename, wbuffer, sizeof(wbuffer)); - pwbuffer = PerlDir_mapW(wbuffer); - rc = _wutime(pwbuffer, (struct _utimbuf*)times); - } - else { - filename = PerlDir_mapA(filename); - rc = utime(filename, times); - } + + filename = PerlDir_mapA(filename); + rc = utime(filename, times); + /* EACCES: path specifies directory or readonly file */ if (rc == 0 || errno != EACCES /* || !IsWinNT() */) return rc; @@ -1654,16 +1530,9 @@ win32_utime(const char *filename, struct utimbuf *times) } /* This will (and should) still fail on readonly files */ - if (USING_WIDE()) { - handle = CreateFileW(pwbuffer, GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, - OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); - } - else { - handle = CreateFileA(filename, GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, - OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); - } + handle = CreateFileA(filename, GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (handle == INVALID_HANDLE_VALUE) return rc; @@ -2483,7 +2352,6 @@ DllExport FILE * win32_fopen(const char *filename, const char *mode) { dTHX; - WCHAR wMode[MODE_SIZE], wBuffer[MAX_PATH+1]; FILE *f; if (!*filename) @@ -2492,13 +2360,7 @@ win32_fopen(const char *filename, const char *mode) if (stricmp(filename, "/dev/null")==0) filename = "NUL"; - if (USING_WIDE()) { - A2WHELPER(mode, wMode, sizeof(wMode)); - A2WHELPER(filename, wBuffer, sizeof(wBuffer)); - f = _wfopen(PerlDir_mapW(wBuffer), wMode); - } - else - f = fopen(PerlDir_mapA(filename), mode); + f = fopen(PerlDir_mapA(filename), mode); /* avoid buffering headaches for child processes */ if (f && *mode == 'a') win32_fseek(f, 0, SEEK_END); @@ -2514,14 +2376,8 @@ DllExport FILE * win32_fdopen(int handle, const char *mode) { dTHX; - WCHAR wMode[MODE_SIZE]; FILE *f; - if (USING_WIDE()) { - A2WHELPER(mode, wMode, sizeof(wMode)); - f = _wfdopen(handle, wMode); - } - else - f = fdopen(handle, (char *) mode); + f = fdopen(handle, (char *) mode); /* avoid buffering headaches for child processes */ if (f && *mode == 'a') win32_fseek(f, 0, SEEK_END); @@ -2532,15 +2388,9 @@ DllExport FILE * win32_freopen(const char *path, const char *mode, FILE *stream) { dTHX; - WCHAR wMode[MODE_SIZE], wBuffer[MAX_PATH+1]; if (stricmp(path, "/dev/null")==0) path = "NUL"; - if (USING_WIDE()) { - A2WHELPER(mode, wMode, sizeof(wMode)); - A2WHELPER(path, wBuffer, sizeof(wBuffer)); - return _wfreopen(PerlDir_mapW(wBuffer), wMode, stream); - } return freopen(PerlDir_mapA(path), mode, stream); } @@ -3027,10 +2877,10 @@ win32_link(const char *oldname, const char *newname) if (pfnCreateHardLinkW == NULL) pfnCreateHardLinkW = Nt4CreateHardLinkW; - if ((A2WHELPER(oldname, wOldName, sizeof(wOldName))) && - (A2WHELPER(newname, wNewName, sizeof(wNewName))) && + if (MultiByteToWideChar(CP_ACP, 0, oldname, -1, wOldName, MAX_PATH+1) && + MultiByteToWideChar(CP_ACP, 0, newname, -1, wNewName, MAX_PATH+1) && (wcscpy(wOldName, PerlDir_mapW(wOldName)), - pfnCreateHardLinkW(PerlDir_mapW(wNewName), wOldName, NULL))) + pfnCreateHardLinkW(PerlDir_mapW(wNewName), wOldName, NULL))) { return 0; } @@ -3041,8 +2891,6 @@ win32_link(const char *oldname, const char *newname) DllExport int win32_rename(const char *oname, const char *newname) { - WCHAR wOldName[MAX_PATH+1]; - WCHAR wNewName[MAX_PATH+1]; char szOldName[MAX_PATH+1]; char szNewName[MAX_PATH+1]; BOOL bResult; @@ -3053,20 +2901,10 @@ win32_rename(const char *oname, const char *newname) */ if (IsWinNT()) { DWORD dwFlags = MOVEFILE_COPY_ALLOWED; - if (USING_WIDE()) { - A2WHELPER(oname, wOldName, sizeof(wOldName)); - A2WHELPER(newname, wNewName, sizeof(wNewName)); - if (wcsicmp(wNewName, wOldName)) - dwFlags |= MOVEFILE_REPLACE_EXISTING; - wcscpy(wOldName, PerlDir_mapW(wOldName)); - bResult = MoveFileExW(wOldName,PerlDir_mapW(wNewName), dwFlags); - } - else { - if (stricmp(newname, oname)) - dwFlags |= MOVEFILE_REPLACE_EXISTING; - strcpy(szOldName, PerlDir_mapA(oname)); - bResult = MoveFileExA(szOldName,PerlDir_mapA(newname), dwFlags); - } + if (stricmp(newname, oname)) + dwFlags |= MOVEFILE_REPLACE_EXISTING; + strcpy(szOldName, PerlDir_mapA(oname)); + bResult = MoveFileExA(szOldName,PerlDir_mapA(newname), dwFlags); if (!bResult) { DWORD err = GetLastError(); switch (err) { @@ -3277,7 +3115,6 @@ win32_open(const char *path, int flag, ...) dTHX; va_list ap; int pmode; - WCHAR wBuffer[MAX_PATH+1]; va_start(ap, flag); pmode = va_arg(ap, int); @@ -3286,10 +3123,6 @@ win32_open(const char *path, int flag, ...) if (stricmp(path, "/dev/null")==0) path = "NUL"; - if (USING_WIDE()) { - A2WHELPER(path, wBuffer, sizeof(wBuffer)); - return _wopen(PerlDir_mapW(wBuffer), flag, pmode); - } return open(PerlDir_mapA(path), flag, pmode); } @@ -3536,11 +3369,6 @@ DllExport int win32_mkdir(const char *dir, int mode) { dTHX; - if (USING_WIDE()) { - WCHAR wBuffer[MAX_PATH+1]; - A2WHELPER(dir, wBuffer, sizeof(wBuffer)); - return _wmkdir(PerlDir_mapW(wBuffer)); - } return mkdir(PerlDir_mapA(dir)); /* just ignore mode */ } @@ -3548,11 +3376,6 @@ DllExport int win32_rmdir(const char *dir) { dTHX; - if (USING_WIDE()) { - WCHAR wBuffer[MAX_PATH+1]; - A2WHELPER(dir, wBuffer, sizeof(wBuffer)); - return _wrmdir(PerlDir_mapW(wBuffer)); - } return rmdir(PerlDir_mapA(dir)); } @@ -3564,11 +3387,6 @@ win32_chdir(const char *dir) errno = ENOENT; return -1; } - if (USING_WIDE()) { - WCHAR wBuffer[MAX_PATH+1]; - A2WHELPER(dir, wBuffer, sizeof(wBuffer)); - return _wchdir(wBuffer); - } return chdir(dir); } @@ -3576,11 +3394,6 @@ DllExport int win32_access(const char *path, int mode) { dTHX; - if (USING_WIDE()) { - WCHAR wBuffer[MAX_PATH+1]; - A2WHELPER(path, wBuffer, sizeof(wBuffer)); - return _waccess(PerlDir_mapW(wBuffer), mode); - } return access(PerlDir_mapA(path), mode); } @@ -3588,11 +3401,6 @@ DllExport int win32_chmod(const char *path, int mode) { dTHX; - if (USING_WIDE()) { - WCHAR wBuffer[MAX_PATH+1]; - A2WHELPER(path, wBuffer, sizeof(wBuffer)); - return _wchmod(PerlDir_mapW(wBuffer), mode); - } return chmod(PerlDir_mapA(path), mode); } @@ -3882,16 +3690,9 @@ win32_get_childdir(void) { dTHX; char* ptr; - char szfilename[(MAX_PATH+1)*2]; - if (USING_WIDE()) { - WCHAR wfilename[MAX_PATH+1]; - GetCurrentDirectoryW(MAX_PATH+1, wfilename); - W2AHELPER(wfilename, szfilename, sizeof(szfilename)); - } - else { - GetCurrentDirectoryA(MAX_PATH+1, szfilename); - } + char szfilename[MAX_PATH+1]; + GetCurrentDirectoryA(MAX_PATH+1, szfilename); Newx(ptr, strlen(szfilename)+1, char); strcpy(ptr, szfilename); return ptr; @@ -4390,7 +4191,6 @@ DllExport void* win32_dynaload(const char* filename) { dTHX; - HMODULE hModule; char buf[MAX_PATH+1]; char *first; @@ -4410,15 +4210,7 @@ win32_dynaload(const char* filename) filename = buf; } } - if (USING_WIDE()) { - WCHAR wfilename[MAX_PATH+1]; - A2WHELPER(filename, wfilename, sizeof(wfilename)); - hModule = LoadLibraryExW(PerlDir_mapW(wfilename), NULL, LOAD_WITH_ALTERED_SEARCH_PATH); - } - else { - hModule = LoadLibraryExA(PerlDir_mapA(filename), NULL, LOAD_WITH_ALTERED_SEARCH_PATH); - } - return hModule; + return LoadLibraryExA(PerlDir_mapA(filename), NULL, LOAD_WITH_ALTERED_SEARCH_PATH); } /* @@ -4667,57 +4459,19 @@ XS(w32_GetOSVersion) } osver; BOOL bEx = TRUE; - if (USING_WIDE()) { - struct { - DWORD dwOSVersionInfoSize; - DWORD dwMajorVersion; - DWORD dwMinorVersion; - DWORD dwBuildNumber; - DWORD dwPlatformId; - WCHAR szCSDVersion[128]; - unsigned short wServicePackMajor; - unsigned short wServicePackMinor; - unsigned short wSuiteMask; - BYTE wProductType; - BYTE wReserved; - } osverw; - char szCSDVersion[sizeof(osverw.szCSDVersion)]; - osverw.dwOSVersionInfoSize = sizeof(osverw); - if (!GetVersionExW((OSVERSIONINFOW*)&osverw)) { - bEx = FALSE; - osverw.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW); - if (!GetVersionExW((OSVERSIONINFOW*)&osverw)) { - XSRETURN_EMPTY; - } - } - if (GIMME_V == G_SCALAR) { - XSRETURN_IV(osverw.dwPlatformId); - } - W2AHELPER(osverw.szCSDVersion, szCSDVersion, sizeof(szCSDVersion)); - XPUSHs(newSVpvn(szCSDVersion, strlen(szCSDVersion))); - osver.dwMajorVersion = osverw.dwMajorVersion; - osver.dwMinorVersion = osverw.dwMinorVersion; - osver.dwBuildNumber = osverw.dwBuildNumber; - osver.dwPlatformId = osverw.dwPlatformId; - osver.wServicePackMajor = osverw.wServicePackMajor; - osver.wServicePackMinor = osverw.wServicePackMinor; - osver.wSuiteMask = osverw.wSuiteMask; - osver.wProductType = osverw.wProductType; + osver.dwOSVersionInfoSize = sizeof(osver); + if (!GetVersionExA((OSVERSIONINFOA*)&osver)) { + bEx = FALSE; + osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); + if (!GetVersionExA((OSVERSIONINFOA*)&osver)) { + XSRETURN_EMPTY; + } } - else { - osver.dwOSVersionInfoSize = sizeof(osver); - if (!GetVersionExA((OSVERSIONINFOA*)&osver)) { - bEx = FALSE; - osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); - if (!GetVersionExA((OSVERSIONINFOA*)&osver)) { - XSRETURN_EMPTY; - } - } - if (GIMME_V == G_SCALAR) { - XSRETURN_IV(osver.dwPlatformId); - } - XPUSHs(newSVpvn(osver.szCSDVersion, strlen(osver.szCSDVersion))); + if (GIMME_V == G_SCALAR) { + XSRETURN_IV(osver.dwPlatformId); } + XPUSHs(newSVpvn(osver.szCSDVersion, strlen(osver.szCSDVersion))); + XPUSHs(newSViv(osver.dwMajorVersion)); XPUSHs(newSViv(osver.dwMinorVersion)); XPUSHs(newSViv(osver.dwBuildNumber)); @@ -4757,21 +4511,11 @@ XS(w32_FormatMessage) if (items != 1) Perl_croak(aTHX_ "usage: Win32::FormatMessage($errno)"); - if (USING_WIDE()) { - WCHAR wmsgbuf[ONE_K_BUFSIZE]; - if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, - &source, SvIV(ST(0)), 0, - wmsgbuf, ONE_K_BUFSIZE-1, NULL)) - { - W2AHELPER(wmsgbuf, msgbuf, sizeof(msgbuf)); - XSRETURN_PV(msgbuf); - } - } - else { - if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, - &source, SvIV(ST(0)), 0, - msgbuf, sizeof(msgbuf)-1, NULL)) - XSRETURN_PV(msgbuf); + if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, + &source, SvIV(ST(0)), 0, + msgbuf, sizeof(msgbuf)-1, NULL)) + { + XSRETURN_PV(msgbuf); } XSRETURN_UNDEF; @@ -4951,22 +4695,12 @@ XS(w32_CopyFile) { dXSARGS; BOOL bResult; + char szSourceFile[MAX_PATH+1]; + if (items != 3) Perl_croak(aTHX_ "usage: Win32::CopyFile($from, $to, $overwrite)"); - if (USING_WIDE()) { - WCHAR wSourceFile[MAX_PATH+1]; - WCHAR wDestFile[MAX_PATH+1]; - A2WHELPER(SvPV_nolen(ST(0)), wSourceFile, sizeof(wSourceFile)); - wcscpy(wSourceFile, PerlDir_mapW(wSourceFile)); - A2WHELPER(SvPV_nolen(ST(1)), wDestFile, sizeof(wDestFile)); - bResult = CopyFileW(wSourceFile, PerlDir_mapW(wDestFile), !SvTRUE(ST(2))); - } - else { - char szSourceFile[MAX_PATH+1]; - strcpy(szSourceFile, PerlDir_mapA(SvPV_nolen(ST(0)))); - bResult = CopyFileA(szSourceFile, PerlDir_mapA(SvPV_nolen(ST(1))), !SvTRUE(ST(2))); - } - + strcpy(szSourceFile, PerlDir_mapA(SvPV_nolen(ST(0)))); + bResult = CopyFileA(szSourceFile, PerlDir_mapA(SvPV_nolen(ST(1))), !SvTRUE(ST(2))); if (bResult) XSRETURN_YES; XSRETURN_NO; diff --git a/win32/win32.h b/win32/win32.h index 4c5dee6..8f5b27d 100644 --- a/win32/win32.h +++ b/win32/win32.h @@ -427,22 +427,6 @@ DllExport int win32_async_check(pTHX); #define w32_use_showwindow (PL_sys_intern.thr_intern.Wuse_showwindow) #define w32_showwindow (PL_sys_intern.thr_intern.Wshowwindow) -/* UNICODE<>ANSI translation helpers */ -/* Use CP_ACP when mode is ANSI */ -/* Use CP_UTF8 when mode is UTF8 */ - -#define A2WHELPER_LEN(lpa, alen, lpw, nBytes)\ - (lpw[0] = 0, MultiByteToWideChar((IN_BYTES) ? CP_ACP : CP_UTF8, 0, \ - lpa, alen, lpw, (nBytes/sizeof(WCHAR)))) -#define A2WHELPER(lpa, lpw, nBytes) A2WHELPER_LEN(lpa, -1, lpw, nBytes) - -#define W2AHELPER_LEN(lpw, wlen, lpa, nChars)\ - (lpa[0] = '\0', WideCharToMultiByte((IN_BYTES) ? CP_ACP : CP_UTF8, 0, \ - lpw, wlen, (LPSTR)lpa, nChars,NULL,NULL)) -#define W2AHELPER(lpw, lpa, nChars) W2AHELPER_LEN(lpw, -1, lpa, nChars) - -#define USING_WIDE() (0) - #ifdef USE_ITHREADS # define PERL_WAIT_FOR_CHILDREN \ STMT_START { \ diff --git a/wince/perlhost.h b/wince/perlhost.h index bcf2b4f..a15ff6d 100644 --- a/wince/perlhost.h +++ b/wince/perlhost.h @@ -2424,13 +2424,7 @@ CPerlHost::Chdir(const char *dirname) errno = ENOENT; return -1; } - if (USING_WIDE()) { - WCHAR wBuffer[MAX_PATH]; - A2WHELPER(dirname, wBuffer, sizeof(wBuffer)); - ret = m_pvDir->SetCurrentDirectoryW(wBuffer); - } - else - ret = m_pvDir->SetCurrentDirectoryA((char*)dirname); + ret = m_pvDir->SetCurrentDirectoryA((char*)dirname); if(ret < 0) { errno = ENOENT; } diff --git a/wince/win32.h b/wince/win32.h index 3c38d5d..6ff870f 100644 --- a/wince/win32.h +++ b/wince/win32.h @@ -404,22 +404,6 @@ DllExport int win32_async_check(pTHX); #define w32_use_showwindow (PL_sys_intern.thr_intern.Wuse_showwindow) #define w32_showwindow (PL_sys_intern.thr_intern.Wshowwindow) -/* UNICODE<>ANSI translation helpers */ -/* Use CP_ACP when mode is ANSI */ -/* Use CP_UTF8 when mode is UTF8 */ - -#define A2WHELPER_LEN(lpa, alen, lpw, nBytes)\ - (lpw[0] = 0, MultiByteToWideChar((IN_BYTES) ? CP_ACP : CP_UTF8, 0, \ - lpa, alen, lpw, (nBytes/sizeof(WCHAR)))) -#define A2WHELPER(lpa, lpw, nBytes) A2WHELPER_LEN(lpa, -1, lpw, nBytes) - -#define W2AHELPER_LEN(lpw, wlen, lpa, nChars)\ - (lpa[0] = '\0', WideCharToMultiByte((IN_BYTES) ? CP_ACP : CP_UTF8, 0, \ - lpw, wlen, (LPSTR)lpa, nChars,NULL,NULL)) -#define W2AHELPER(lpw, lpa, nChars) W2AHELPER_LEN(lpw, -1, lpa, nChars) - -#define USING_WIDE() (0) - #ifdef USE_ITHREADS # define PERL_WAIT_FOR_CHILDREN \ STMT_START { \ diff --git a/wince/wince.c b/wince/wince.c index e498f07..dc92163 100644 --- a/wince/wince.c +++ b/wince/wince.c @@ -1937,15 +1937,8 @@ win32_get_childdir(void) { dTHX; char* ptr; - char szfilename[(MAX_PATH+1)*2]; - if (USING_WIDE()) { - WCHAR wfilename[MAX_PATH+1]; - GetCurrentDirectoryW(MAX_PATH+1, wfilename); - W2AHELPER(wfilename, szfilename, sizeof(szfilename)); - } - else { - GetCurrentDirectoryA(MAX_PATH+1, szfilename); - } + char szfilename[MAX_PATH+1]; + GetCurrentDirectoryA(MAX_PATH+1, szfilename); Newx(ptr, strlen(szfilename)+1, char); strcpy(ptr, szfilename);