Changeset 14803
- Timestamp:
- Sep 12, 2000, 6:27:45 AM (25 years ago)
- Location:
- tags/trunk/src/kernel32
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified tags/trunk/src/kernel32/oslibdos.cpp ¶
r14758 r14803 1 /* $Id: oslibdos.cpp,v 1.4 0 2000-09-04 18:24:42 sandervlExp $ */1 /* $Id: oslibdos.cpp,v 1.41 2000-09-12 04:27:44 bird Exp $ */ 2 2 /* 3 3 * Wrappers for OS/2 Dos* API 4 4 * 5 5 * Copyright 1998-2000 Sander van Leeuwen (sandervl@xs4all.nl) 6 * Copyright 1999-2000 Edgar Buerkle <Edgar.Buerkle@gmx.net>7 * Copyright 2000 Przemyslaw Dobrowolski <dobrawka@asua.org.pl>6 * Copyright 1999-2000 Edgar Buerkle (Edgar.Buerkle@gmx.net) 7 * Copyright 2000 Przemyslaw Dobrowolski (dobrawka@asua.org.pl) 8 8 * Copyright 2000 Christoph Bratschi (cbratschi@datacomm.ch) 9 * Copyright 2000 knut st. osmundsen (knut.stange.osmundsen@mynd.no) 9 10 * 10 11 * Project Odin Software License can be found in LICENSE.TXT … … 40 41 //****************************************************************************** 41 42 void OSLibInitWSeBFileIO() 42 { 43 { 43 44 HMODULE hDoscalls; 44 45 … … 128 129 case ERROR_BAD_FORMAT: //11 129 130 return ERROR_BAD_FORMAT_W; 130 131 131 132 case ERROR_INVALID_ACCESS: //12 132 133 return ERROR_INVALID_ACCESS_W; … … 522 523 APIRET rc; 523 524 524 switch(method) 525 switch(method) 525 526 { 526 527 case OSLIB_SETPTR_FILE_CURRENT: … … 536 537 return OSLIB_ERROR_INVALID_PARAMETER; 537 538 } 538 539 539 540 rc = DosSetFilePtr(hFile, offset, os2method, &newoffset); 540 if(rc) 541 if(rc) 541 542 { 542 543 SetLastError(error2WinError(rc)); … … 686 687 //****************************************************************************** 687 688 //****************************************************************************** 688 APIRET OSLibDosQueryPathInfo(PSZpszPathName,689 690 691 689 DWORD OSLibDosQueryPathInfo(CHAR *pszPathName, 690 ULONG ulInfoLevel, 691 PVOID pInfoBuf, 692 ULONG cbInfoBuf) 692 693 { 693 694 APIRET rc = DosQueryPathInfo( pszPathName, ulInfoLevel, … … 764 765 if((fuShare & (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W)) == 0 ) 765 766 openMode |= OPEN_SHARE_DENYREADWRITE; 766 else 767 else 767 768 if((fuShare & (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W)) == (FILE_SHARE_READ_W | FILE_SHARE_WRITE_W)) 768 769 openMode |= OPEN_SHARE_DENYNONE; 769 else 770 if(fuShare & FILE_SHARE_READ_W) 770 else 771 if(fuShare & FILE_SHARE_READ_W) 771 772 openMode |= OPEN_SHARE_DENYWRITE; 772 else 773 else 773 774 if(fuShare & FILE_SHARE_WRITE_W) 774 775 openMode |= OPEN_SHARE_DENYREAD; … … 776 777 if(fuAccess == (GENERIC_READ_W | GENERIC_WRITE_W)) 777 778 openMode |= OPEN_ACCESS_READWRITE; 778 else 779 if(fuAccess & GENERIC_READ_W) 779 else 780 if(fuAccess & GENERIC_READ_W) 780 781 openMode |= OPEN_ACCESS_READONLY; 781 782 else … … 784 785 785 786 #if 0 786 //SvL: Not true; verified in NT! (also messed up access of files on 787 //SvL: Not true; verified in NT! (also messed up access of files on 787 788 // readonly volumes) 788 789 // CreateFile with OPEN_ALWAYS & GENERIC_READ on non-existing file … … 798 799 799 800 int retry = 0; 800 while(retry < 2) 801 while(retry < 2) 801 802 { 802 803 dprintf(("DosOpen %s openFlag=%x openMode=%x", lpszFile, openFlag, openMode)); … … 809 810 openMode, 810 811 NULL); 811 if(rc == ERROR_TOO_MANY_OPEN_FILES) 812 if(rc == ERROR_TOO_MANY_OPEN_FILES) 812 813 { 813 814 ULONG CurMaxFH; … … 861 862 if(fuMode & OF_READWRITE_W) 862 863 openMode |= OPEN_ACCESS_READWRITE; 863 else 864 else 864 865 if(fuMode & OF_WRITE_W) 865 866 openMode |= OPEN_ACCESS_WRITEONLY; 866 else 867 else 867 868 if(fuMode & OF_CREATE_W) 868 869 openMode |= OPEN_ACCESS_READWRITE; … … 872 873 !(fuMode & (OF_SHARE_DENY_READ_W | OF_SHARE_DENY_NONE_W | OF_SHARE_EXCLUSIVE_W))) 873 874 openMode |= OPEN_SHARE_DENYWRITE; 874 else 875 else 875 876 if (fuMode & OF_SHARE_DENY_NONE_W) 876 877 openMode |= OPEN_SHARE_DENYNONE; 877 else 878 else 878 879 if (fuMode & OF_SHARE_DENY_READ_W) 879 880 openMode |= OPEN_SHARE_DENYREAD; 880 else 881 else 881 882 if (fuMode & OF_SHARE_EXCLUSIVE_W) 882 883 openMode |= OPEN_SHARE_DENYREADWRITE; … … 904 905 { 905 906 SetLastError(ERROR_FILE_NOT_FOUND_W); 906 } 907 } 907 908 else SetLastError(error2WinError(rc)); 908 909 … … 928 929 } 929 930 //TODO: Locking region crossing end of file is permitted. Works in OS/2?? 930 if(f64BitIO) 931 if(f64BitIO) 931 932 { 932 933 FILELOCKL lockRangeL; … … 937 938 lockRangeL.lRange.ulHi = nNumberOfBytesToLockHigh; 938 939 939 rc = OdinDosSetFileLocksL(hFile, NULL, &lockRangeL, 940 rc = OdinDosSetFileLocksL(hFile, NULL, &lockRangeL, 940 941 (dwFlags & LOCKFILE_FAIL_IMMEDIATELY_W) ? 0 : 5000, 0); 941 942 //SvL: 64 bits values are only supported by JFS … … 946 947 } 947 948 } 948 else 949 else 949 950 { 950 951 oldlock: 951 952 FILELOCK lockRange = { OffsetLow, nNumberOfBytesToLockLow }; 952 953 953 rc = DosSetFileLocks(hFile, NULL, &lockRange, 954 rc = DosSetFileLocks(hFile, NULL, &lockRange, 954 955 (dwFlags & LOCKFILE_FAIL_IMMEDIATELY_W) ? 0 : 5000, 0); 955 956 } … … 975 976 dprintf(("OSLibDosUnlockFile: overlapped unlock not yet implemented!!")); 976 977 } 977 if(f64BitIO) 978 if(f64BitIO) 978 979 { 979 980 FILELOCKL unlockRangeL; … … 992 993 } 993 994 } 994 else 995 else 995 996 { 996 997 oldlock: … … 1011 1012 { 1012 1013 APIRET rc; 1013 1014 1014 1015 rc = DosResetBuffer(hFile); 1015 1016 SetLastError(error2WinError(rc)); … … 1022 1023 APIRET rc; 1023 1024 ULONG sizeLow; 1024 1025 if(f64BitIO) 1025 1026 if(f64BitIO) 1026 1027 { 1027 1028 FILESTATUS3L fsts3ConfigInfoL = {{0}}; … … 1034 1035 sizeLow = fsts3ConfigInfoL.cbFile.ulLo; 1035 1036 } 1036 else 1037 else 1037 1038 { 1038 1039 FILESTATUS3 fsts3ConfigInfo = {{0}}; … … 1061 1062 DWORD newoffset; 1062 1063 1063 switch(method) 1064 switch(method) 1064 1065 { 1065 1066 case FILE_BEGIN_W: 1066 1067 method = FILE_BEGIN; 1067 1068 break; 1068 1069 1069 1070 case FILE_CURRENT_W: 1070 1071 method = FILE_CURRENT; 1071 1072 break; 1072 1073 1073 1074 case FILE_END_W: 1074 1075 method = FILE_END; 1075 1076 break; 1076 1077 } 1077 1078 1078 1079 // PH Note: for a negative 32-bit seek, the OS/2 64-bit version 1079 1080 // needs to be skipped. … … 1088 1089 newoffset = newoffsetL.ulLo; 1089 1090 } 1090 else 1091 else 1091 1092 rc = DosSetFilePtr(hFile, OffsetLow, method, &newoffset); 1092 1093 if(rc) 1093 1094 if(rc) 1094 1095 { 1095 1096 SetLastError(error2WinError(rc)); … … 1107 1108 LONGLONG newFilePosL; 1108 1109 APIRET rc; 1109 1110 1110 1111 if(f64BitIO) { 1111 1112 rc = OdinDosSetFilePtrL(hFile, FilePosL, FILE_CURRENT, &newFilePosL); … … 1132 1133 { 1133 1134 APIRET rc; 1134 1135 if(f64BitIO) 1135 1136 if(f64BitIO) 1136 1137 { 1137 1138 FILESTATUS4L statusL = { 0 }; … … 1141 1142 &statusL, 1142 1143 sizeof(statusL)); 1143 if(rc == NO_ERROR) 1144 if(rc == NO_ERROR) 1144 1145 { 1145 1146 pInfo->dwFileAttributes = 0; … … 1175 1176 } 1176 1177 } 1177 else 1178 else 1178 1179 { 1179 1180 FILESTATUS4 status = { 0 }; … … 1183 1184 &status, 1184 1185 sizeof(status)); 1185 if(rc == NO_ERROR) 1186 if(rc == NO_ERROR) 1186 1187 { 1187 1188 pInfo->dwFileAttributes = 0; … … 1226 1227 //****************************************************************************** 1227 1228 //****************************************************************************** 1228 BOOL OSLibDosSetFileTime(DWORD hFile, WORD creationdate, WORD creationtime, 1229 WORD lastaccessdate, WORD lastaccesstime, 1229 BOOL OSLibDosSetFileTime(DWORD hFile, WORD creationdate, WORD creationtime, 1230 WORD lastaccessdate, WORD lastaccesstime, 1230 1231 WORD lastwritedate, WORD lastwritetime) 1231 1232 { … … 1263 1264 //****************************************************************************** 1264 1265 //****************************************************************************** 1265 BOOL OSLibDosGetFileTime(DWORD hFile, WORD *creationdate, WORD *creationtime, 1266 WORD *lastaccessdate, WORD *lastaccesstime, 1266 BOOL OSLibDosGetFileTime(DWORD hFile, WORD *creationdate, WORD *creationtime, 1267 WORD *lastaccessdate, WORD *lastaccesstime, 1267 1268 WORD *lastwritedate, WORD *lastwritetime) 1268 1269 { … … 1866 1867 DosError(FERR_DISABLEHARDERR); 1867 1868 rc = DosQueryFSAttach(drv, 1, FSAIL_QUERYNAME, fsinfo, &cb); 1868 DosError(FERR_ENABLEHARDERR); 1869 DosError(FERR_ENABLEHARDERR); 1869 1870 1870 1871 switch(rc) { … … 1880 1881 1881 1882 fsname = (char *)&fsinfo->szName[0] + fsinfo->cbName + 1; 1882 1883 1883 1884 /* @@@PH 2000/08/10 CMD.EXE querys with nFileSystemNameSize == 0 1884 1885 * however does NOT expect to receive an error. … … 1896 1897 } 1897 1898 //****************************************************************************** 1898 typedef struct _FSINFOBUF 1899 typedef struct _FSINFOBUF 1899 1900 { 1900 1901 ULONG ulVolser; /* Volume serial number */ … … 1902 1903 } FSINFOBUF; 1903 1904 //****************************************************************************** 1904 DWORD OSLibDosQueryVolumeSerialAndName(int drive, LPDWORD lpVolumeSerialNumber, 1905 DWORD OSLibDosQueryVolumeSerialAndName(int drive, LPDWORD lpVolumeSerialNumber, 1905 1906 LPSTR lpVolumeNameBuffer, DWORD nVolumeNameSize) 1906 1907 { … … 1926 1927 *lpVolumeSerialNumber = fsi.ulVolser; 1927 1928 } 1928 if(lpVolumeNameBuffer) 1929 if(lpVolumeNameBuffer) 1929 1930 { 1930 1931 if(nVolumeNameSize > fsi.vol.cch) { … … 1948 1949 if(lpRootPathName == 0) 1949 1950 diskNum = 0; 1950 else 1951 else 1951 1952 if('A' <= *lpRootPathName && *lpRootPathName <= 'Z' ) 1952 1953 diskNum = *lpRootPathName - 'A' + 1; 1953 else 1954 else 1954 1955 if('a' <= *lpRootPathName && *lpRootPathName <= 'z' ) 1955 1956 diskNum = *lpRootPathName - 'a' + 1; … … 1986 1987 phfWrite, 1987 1988 dwSize)); 1988 1989 1989 1990 // select default buffer size 1990 1991 if (dwSize == 0) 1991 1992 dwSize = 4096; 1992 1993 1993 1994 rc = DosCreatePipe(phfRead, 1994 1995 phfWrite, … … 2002 2003 return NO_ERROR; 2003 2004 } 2005 2006 /** 2007 * Pure wrapper for DosQueryModulName which returns the OS/2 returncode. 2008 * @returns Returncode from DosQueryModuleName. 2009 * @param hModule Handle of the module which name we query. 2010 * @param cchName Length of the output name buffer. 2011 * @param pszname Pointer to the output name buffer. 2012 * @status Completely implemented. 2013 * @author knut st. osmundsen (knut.stange.osmundsen@mynd.no) 2014 */ 2015 ULONG OSLibDosQueryModuleName(ULONG hModule, int cchName, char *pszName) 2016 { 2017 return DosQueryModuleName(hModule, cchName, pszName); 2018 } 2019 2020 -
TabularUnified tags/trunk/src/kernel32/oslibdos.h ¶
r14758 r14803 1 /* $Id: oslibdos.h,v 1.2 1 2000-09-04 18:24:43 sandervlExp $ */1 /* $Id: oslibdos.h,v 1.22 2000-09-12 04:27:45 bird Exp $ */ 2 2 3 3 /* … … 85 85 DWORD OSLibDosSearchPath(DWORD cmd, char *path, char *name, char *full_name, DWORD length_fullname); 86 86 87 #ifndef FIL_QUERYFULLNAME 88 #define FIL_QUERYFULLNAME 5 89 #else 90 #if FIL_QUERYFULLNAME != 5 91 #error "Hmm! FIL_QUERYFULLNAME isn't 5" 92 #endif 93 #endif 94 95 DWORD OSLibDosQueryPathInfo(CHAR *pszPathName, 96 ULONG ulInfoLevel, 97 PVOID pInfoBuf, 98 ULONG cbInfoBuf); 99 87 100 DWORD OSLibDosCreateFile(CHAR *lpFileName, DWORD dwAccess, 88 101 DWORD dwShare, LPSECURITY_ATTRIBUTES lpSecurityAttributes, … … 109 122 BOOL OSLibDosGetFileInformationByHandle(DWORD hFile, BY_HANDLE_FILE_INFORMATION* pHFI); 110 123 111 BOOL OSLibDosSetFileTime(DWORD hFile, WORD creationdate, WORD creationtime, 112 WORD lastaccessdate, WORD lastaccesstime, 124 BOOL OSLibDosSetFileTime(DWORD hFile, WORD creationdate, WORD creationtime, 125 WORD lastaccessdate, WORD lastaccesstime, 113 126 WORD lastwritedate, WORD lastwritetime); 114 127 115 BOOL OSLibDosGetFileTime(DWORD hFile, WORD *creationdate, WORD *creationtime, 116 WORD *lastaccessdate, WORD *lastaccesstime, 128 BOOL OSLibDosGetFileTime(DWORD hFile, WORD *creationdate, WORD *creationtime, 129 WORD *lastaccessdate, WORD *lastaccesstime, 117 130 WORD *lastwritedate, WORD *lastwritetime); 118 131 … … 264 277 265 278 #endif 279 280 ULONG OSLibDosQueryModuleName(ULONG hModule, int cchName, char *pszName); 281 282 -
TabularUnified tags/trunk/src/kernel32/oslibmisc.cpp ¶
r14564 r14803 1 /* $Id: oslibmisc.cpp,v 1.1 0 2000-08-11 10:56:18 sandervlExp $ */1 /* $Id: oslibmisc.cpp,v 1.11 2000-09-12 04:27:45 bird Exp $ */ 2 2 /* 3 3 * Misc OS/2 util. procedures … … 134 134 //****************************************************************************** 135 135 ULONG OSLibAllocSel(ULONG size, USHORT *selector) 136 { 136 { 137 137 return (Dos16AllocSeg(size, selector, SEG_NONSHARED) == 0); 138 138 } … … 174 174 } 175 175 } 176 //****************************************************************************** 177 //Get PIB data 178 //****************************************************************************** 179 ULONG OSLibGetPIB(int piboff) 180 { 181 PTIB ptib; 182 PPIB ppib; 183 APIRET rc; 184 185 rc = DosGetInfoBlocks(&ptib, &ppib); 186 if(rc) { 187 return 0; 188 } 189 switch(piboff) 190 { 191 case PIB_TASKHNDL: 192 return ppib->pib_hmte; 193 case PIB_TASKTYPE: 194 if(ppib->pib_ultype == 3) { 195 return TASKTYPE_PM; 196 } 197 else return TASKTYPE_VIO; 198 default: 199 return 0; 200 } 176 177 /** 178 * Gets a PIB data. 179 * @returns Requested PIB data. 180 * 0 may indicate error or that the PIB data you requested actually is 0. 181 * @param iPIB PIB data index. (one of the PIB_* defines in oslibmisc.h) 182 * @author 183 * @remark Spooky error handling. 184 */ 185 ULONG OSLibGetPIB(int iPIB) 186 { 187 PTIB ptib; 188 PPIB ppib; 189 APIRET rc; 190 191 rc = DosGetInfoBlocks(&ptib, &ppib); 192 if (rc) 193 { 194 dprintf(("KERNEL32: OSLibGetPIB(%d): DosGetInfoBlocks failed with rc=%d\n", iPIB, rc)); 195 return 0; 196 } 197 198 switch(iPIB) 199 { 200 case PIB_TASKHNDL: 201 return ppib->pib_hmte; 202 203 case PIB_TASKTYPE: 204 return (ppib->pib_ultype == 3) ? TASKTYPE_PM : TASKTYPE_VIO; 205 206 case PIB_PCHCMD: 207 return (ULONG)ppib->pib_pchcmd; 208 209 default: 210 dprintf(("KERNEL32: OSLibGetPIB(%d): Invalid PIB data index\n.", iPIB)); 211 DebugInt3(); 212 return 0; 213 } 201 214 } 202 215 //****************************************************************************** … … 221 234 /* @@@PH what does this function do ? Strip the path from a FQFN name ? */ 222 235 char *pszFilename; 223 236 224 237 pszFilename = strrchr(path, '\\'); /* find rightmost slash */ 225 238 if (pszFilename != NULL) 226 239 return (++pszFilename); /* return pointer to next character */ 227 240 228 241 pszFilename = strrchr(path, '/'); /* find rightmost slash */ 229 242 if (pszFilename != NULL) 230 243 return (++pszFilename); /* return pointer to next character */ 231 244 232 245 return (path); /* default return value */ 233 246 } … … 255 268 ULONG ulInfoLen = 0; 256 269 APIRET rc = NO_ERROR; /* Return code */ 257 270 258 271 rc = DosQueryCtryInfo(sizeof(CtryInfo), &Country, 259 272 &CtryInfo, &ulInfoLen); 260 273 261 274 if (rc != NO_ERROR) { 262 275 return -1; -
TabularUnified tags/trunk/src/kernel32/oslibmisc.h ¶
r14564 r14803 1 /* $Id: oslibmisc.h,v 1. 6 2000-08-11 10:56:18 sandervlExp $ */1 /* $Id: oslibmisc.h,v 1.7 2000-09-12 04:27:45 bird Exp $ */ 2 2 /* 3 3 * Misc util. procedures … … 30 30 ULONG OSLibGetTIB(int tiboff); 31 31 32 #define PIB_TASKHNDL 0 32 #define PIB_HMTE 0 33 #define PIB_TASKHNDL PIB_HMTE 33 34 #define PIB_TASKTYPE 1 35 #define PIB_PCHCMD 2 34 36 35 #define TASKTYPE_PM 036 #define TASKTYPE_VIO 37 #define TASKTYPE_PM 0 38 #define TASKTYPE_VIO 1 37 39 38 ULONG OSLibGetPIB(int piboff);40 ULONG OSLibGetPIB(int iPIB); 39 41 40 42 ULONG OSLibAllocThreadLocalMemory(int nrdwords);
Note:
See TracChangeset
for help on using the changeset viewer.