Changeset 21569 for trunk/src/kernel32/oslibdos.cpp
- Timestamp:
- Feb 4, 2011, 11:59:05 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/oslibdos.cpp
r21564 r21569 802 802 FILESTATUS3 fs3; /* file information structure */ 803 803 LPWIN32_FILE_ATTRIBUTE_DATA lpFad = (LPWIN32_FILE_ATTRIBUTE_DATA) pBuffer; 804 char pszOemName[CCHMAXPATH]; 805 806 //Convert file name from Windows to OS/2 codepage 807 CharToOemA(ODINHelperStripUNC(pszName), pszOemName); 804 808 805 809 // Note: we only handle standard "GetFileExInfoStandard" requests 806 rc = DosQueryPathInfo( ODINHelperStripUNC(pszName),/* query the file information */810 rc = DosQueryPathInfo(pszOemName, /* query the file information */ 807 811 FIL_STANDARD, 808 812 &fs3, … … 887 891 ULONG cbInfoBuf) 888 892 { 889 APIRET rc = DosQueryPathInfo( ODINHelperStripUNC(pszPathName), ulInfoLevel, 890 pInfoBuf, cbInfoBuf ); 891 892 if(rc == ERROR_TOO_MANY_OPEN_FILES) 893 { 893 APIRET rc; 894 char pszOemPathName[CCHMAXPATH]; 895 896 //Convert file name from Windows to OS/2 codepage 897 CharToOemA(ODINHelperStripUNC(pszPathName), pszOemPathName); 898 899 rc = DosQueryPathInfo(pszOemPathName, ulInfoLevel, 900 pInfoBuf, cbInfoBuf); 901 902 if(rc == ERROR_TOO_MANY_OPEN_FILES) 903 { 894 904 LONG reqCount = 2; 895 905 ULONG maxFiles; 896 906 897 907 if(DosSetRelMaxFH(&reqCount, &maxFiles) == NO_ERROR) 898 rc = DosQueryPathInfo(psz PathName, ulInfoLevel,899 pInfoBuf, cbInfoBuf);900 }901 return rc;908 rc = DosQueryPathInfo(pszOemPathName, ulInfoLevel, 909 pInfoBuf, cbInfoBuf); 910 } 911 return rc; 902 912 } 903 913 //****************************************************************************** … … 1397 1407 BOOL OSLibDosGetFileInformationByHandle(LPCSTR lpFileName, DWORD hFile, BY_HANDLE_FILE_INFORMATION* pInfo) 1398 1408 { 1399 APIRETrc;1409 APIRET rc; 1400 1410 1401 1411 // NOTE: On HPFS386, doing FIL_QUERYEASIZE on a write-only file will … … 1658 1668 DWORD hPipe; 1659 1669 DWORD rc, ulAction; 1670 char lpOemName[CCHMAXPATH]; 1671 1672 //Convert file name from Windows to OS/2 codepage 1673 CharToOemA(lpName, lpOemName); 1660 1674 1661 1675 if ((dwOpenMode & PIPE_ACCESS_DUPLEX_W) == PIPE_ACCESS_DUPLEX_W) … … 1695 1709 dwOS2PipeMode |= nMaxInstances; 1696 1710 1697 if (strstr(lp Name,"\\\\."))1711 if (strstr(lpOemName,"\\\\.")) 1698 1712 { 1699 1713 // If pipe is created on the local machine … … 1701 1715 // in Windows named pipes scheme is a \\.\PIPE\pipename 1702 1716 // but in OS/2 only \PIPE\pipename 1703 lpOS2Name = (LPSTR)lp Name + 3;1704 } 1705 else lpOS2Name = (LPSTR)lp Name;1717 lpOS2Name = (LPSTR)lpOemName + 3; 1718 } 1719 else lpOS2Name = (LPSTR)lpOemName; 1706 1720 1707 1721 dprintf(("DosCreateNPipe(%s,%x,%x,%x,%x,%x)",lpOS2Name,dwOS2Mode,dwOS2PipeMode,nInBufferSize,nOutBufferSize,nDefaultTimeOut)); … … 1785 1799 ULONG openFlag = 0; 1786 1800 ULONG openMode = OPEN_FLAGS_NOINHERIT; //default is not inherited by child processes 1787 1801 char lpOemName[CCHMAXPATH]; 1802 1803 //Convert file name from Windows to OS/2 codepage 1804 CharToOemA(lpName, lpOemName); 1788 1805 1789 1806 switch(fuCreate) … … 1844 1861 openMode |= OPEN_ACCESS_WRITEONLY; 1845 1862 1846 if (strstr(lp Name,"\\\\."))1863 if (strstr(lpOemName,"\\\\.")) 1847 1864 { 1848 1865 // If pipe is created on the local machine … … 1850 1867 // in Windows named pipes scheme is a \\.\PIPE\pipename 1851 1868 // but in OS/2 only \PIPE\pipename 1852 lpOS2Name = (LPSTR)lp Name + 3;1853 } 1854 else lpOS2Name = (LPSTR)lp Name;1869 lpOS2Name = (LPSTR)lpOemName + 3; 1870 } 1871 else lpOS2Name = (LPSTR)lpOemName; 1855 1872 1856 1873 rc = DosOpen(lpOS2Name, &hPipe, &ulAction, 0, 0, … … 1897 1914 LPSTR lpOS2Name; 1898 1915 DWORD rc; 1899 1900 if (strstr(lpNamedPipeName,"\\\\.")) 1916 char lpOemNamedPipeName[CCHMAXPATH]; 1917 1918 //Convert file name from Windows to OS/2 codepage 1919 CharToOemA(lpNamedPipeName, lpOemNamedPipeName); 1920 1921 if (strstr(lpOemNamedPipeName,"\\\\.")) 1901 1922 { 1902 1923 // If pipe is created on the local machine … … 1904 1925 // in Windows named pipes scheme is a \\.\PIPE\pipename 1905 1926 // but in OS/2 only \PIPE\pipename 1906 lpOS2Name = (LPSTR)lp NamedPipeName + 3;1907 } 1908 else lpOS2Name = (LPSTR)lp NamedPipeName;1927 lpOS2Name = (LPSTR)lpOemNamedPipeName + 3; 1928 } 1929 else lpOS2Name = (LPSTR)lpOemNamedPipeName; 1909 1930 1910 1931 rc=DosCallNPipe(lpOS2Name, … … 2026 2047 LPSTR lpOS2Name; 2027 2048 DWORD rc; 2028 2029 if (strstr(lpszNamedPipeName,"\\\\.")) 2049 char lpszOemNamedPipeName[CCHMAXPATH]; 2050 2051 //Convert file name from Windows to OS/2 codepage 2052 CharToOemA(lpszNamedPipeName, lpszOemNamedPipeName); 2053 2054 if (strstr(lpszOemNamedPipeName,"\\\\.")) 2030 2055 { 2031 2056 // If pipe is created on the local machine … … 2033 2058 // in Windows named pipes scheme is a \\.\PIPE\pipename 2034 2059 // but in OS/2 only \PIPE\pipename 2035 lpOS2Name = (LPSTR)lpsz NamedPipeName + 3;2036 } 2037 else lpOS2Name = (LPSTR)lpsz NamedPipeName;2060 lpOS2Name = (LPSTR)lpszOemNamedPipeName + 3; 2061 } 2062 else lpOS2Name = (LPSTR)lpszOemNamedPipeName; 2038 2063 2039 2064 rc=DosWaitNPipe(lpOS2Name,dwTimeout); … … 3123 3148 } 3124 3149 3125 /**3126 * Pure wrapper for DosQueryModulName which returns the OS/2 returncode.3127 * @returns Returncode from DosQueryModuleName.3128 * @param hModule Handle of the module which name we query.3129 * @param cchName Length of the output name buffer.3130 * @param pszname Pointer to the output name buffer.3131 * @status Completely implemented.3132 * @author knut st. osmundsen (knut.stange.osmundsen@mynd.no)3133 */3134 3150 ULONG OSLibDosQueryModuleName(ULONG hModule, int cchName, char *pszName) 3135 3151 { 3136 return DosQueryModuleName(hModule, cchName, pszName); 3137 } 3138 3152 char pszOemName[CCHMAXPATH]; 3153 APIRET rc; 3154 3155 rc = DosQueryModuleName(hModule, sizeof(pszOemName), pszOemName); 3156 if(rc == NO_ERROR) 3157 { 3158 //Convert file name from OS/2 to Windows 3159 if (!OemToCharBuffA(pszOemName, pszName, cchName)) 3160 return GetLastError(); 3161 } 3162 3163 rc = error2WinError(rc,ERROR_INVALID_HANDLE); 3164 SetLastError(rc); 3165 return rc; 3166 } 3139 3167 3140 3168 HINSTANCE OSLibDosLoadModule(LPSTR szModName) … … 3143 3171 HMODULE hModule = NULLHANDLE; 3144 3172 char name[ CCHMAXPATH ]; 3145 3146 rc = DosLoadModule(name, CCHMAXPATH, szModName, &hModule); 3173 char szOemModName[CCHMAXPATH]; 3174 3175 //Convert file name from Windows to OS/2 codepage 3176 CharToOemA(ODINHelperStripUNC(szModName), szOemModName); 3177 3178 rc = DosLoadModule(name, CCHMAXPATH, szOemModName, &hModule); 3147 3179 if(rc) { 3148 3180 SetLastError(error2WinError(rc,ERROR_FILE_NOT_FOUND)); … … 3229 3261 PPIB pPIB; 3230 3262 APIRET rc; 3263 char lpszOemPath[CCHMAXPATH]; 3231 3264 3232 3265 if(hModule == -1 || hModule == 0) … … 3236 3269 } 3237 3270 *lpszPath = 0; 3238 rc = DosQueryModuleName(hModule, cchPath, lpszPath); 3271 rc = DosQueryModuleName(hModule, sizeof(lpszOemPath), lpszOemPath); 3272 3273 if(rc == NO_ERROR) 3274 { 3275 //Convert file name from OS/2 to Windows 3276 if (!OemToCharBuffA(lpszOemPath, lpszPath, cchPath)) 3277 return 0; 3278 } 3239 3279 3240 3280 DWORD len = strlen(lpszPath);
Note:
See TracChangeset
for help on using the changeset viewer.