- Timestamp:
- Nov 29, 2001, 12:33:37 AM (24 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/HandleManager.cpp
r7472 r7474 1 /* $Id: HandleManager.cpp,v 1.7 8 2001-11-28 15:45:45 sandervlExp $ */1 /* $Id: HandleManager.cpp,v 1.79 2001-11-28 23:33:34 phaller Exp $ */ 2 2 3 3 /* … … 432 432 433 433 HMGlobals.fIsInitialized = TRUE; /* OK, done */ 434 434 435 #if 1 436 //This is a very bad idea. \\\\.\\NTICE -> NTICE, if the file exits, then 437 //it will open the file instead of the device driver 438 /* add standard symbolic links first, so local symbolic links in the 439 * device handlers get precedence over the default here. 440 * 441 * Device handlers are supposed to place the appropriate 442 * symbolic links such as "\\.\\COM1", "COM1" 443 * 444 * - "\\.\f:\temp\readme.txt" is a valid file 445 * - "com1" is a valid device in case serial port 1 exists, 446 * otherwise it'd be a valid file. 447 * - "\\.\filename" is the only misleading case (to be verified) 448 * 449 * Note: 450 * the Open32 "device" definately MUST be the last device to be 451 * asked to accept the specified name. 452 */ 453 { 454 // strings are placed in read-only segment 455 PSZ pszDrive = strdup("\\\\.\\x:"); 456 PSZ pszDrive2 = strdup("\\\\.\\x:"); 457 for (char ch = 'A'; ch <= 'Z'; ch++) 458 { 459 pszDrive[4] = ch; 460 pszDrive2[4] = ch; 461 HandleNamesAddSymbolicLink(pszDrive, pszDrive+4); 462 HandleNamesAddSymbolicLink(pszDrive2, pszDrive2+4); 463 } 464 free(pszDrive); 465 free(pszDrive2); 466 HandleNamesAddSymbolicLink("\\\\?\\UNC\\", "\\\\"); 467 } 468 #endif 469 435 470 /* copy standard handles from OS/2's Open32 Subsystem */ 436 471 HMGlobals.pHMStandard = new HMDeviceStandardClass("\\\\STANDARD_HANDLE\\"); … … 453 488 HMGlobals.pHMMailslot = new HMMailslotClass("\\MAILSLOT\\"); 454 489 HMGlobals.pHMParPort = new HMDeviceParPortClass("\\\\LPT\\"); 455 456 #if 0457 //This is a very bad idea. \\\\.\\NTICE -> NTICE, if the file exits, then458 //it will open the file instead of the device driver459 /* add standard symbolic links */460 HandleNamesAddSymbolicLink("\\\\.\\", "");461 #endif462 490 } 463 491 return (NO_ERROR); … … 1070 1098 { 1071 1099 TabWin32Handles[iIndexNew].hmHandleData.hHMHandle = INVALID_HANDLE_VALUE; 1072 SetLastError(rc); /* Hehe, OS/2 and NT are pretty compatible :) */ 1100 1101 1102 // Note: 1103 // device handlers have to return an Win32-style error code 1104 // from CreateFile() ! 1105 SetLastError(rc); 1073 1106 return (INVALID_HANDLE_VALUE); /* signal error */ 1074 1107 } -
trunk/src/kernel32/handlenames.cpp
r7465 r7474 170 170 if (fCaseInsensitive) 171 171 { 172 if (strnicmp(pHandleName->pszSymbolicLink, pszSymbolicLink, iLen) == 0) 173 return pHandleName; 172 // Note: pszSymbolicLink must either terminate at [iLen] or 173 // have a delimiter. 174 if ( (pszSymbolicLink[iLen] == '\\') || 175 (pszSymbolicLink[iLen] == 0) ) 176 if (strnicmp(pHandleName->pszSymbolicLink, pszSymbolicLink, iLen) == 0) 177 return pHandleName; 174 178 } 175 179 else 176 180 { 177 if (strncmp(pHandleName->pszSymbolicLink, pszSymbolicLink, iLen) == 0) 178 return pHandleName; 181 if ( (pszSymbolicLink[iLen] == '\\') || 182 (pszSymbolicLink[iLen] == 0) ) 183 if (strncmp(pHandleName->pszSymbolicLink, pszSymbolicLink, iLen) == 0) 184 return pHandleName; 179 185 } 180 186 -
trunk/src/kernel32/hmcomm.cpp
r7471 r7474 1 /* $Id: hmcomm.cpp,v 1.1 7 2001-11-28 15:35:15 sandervlExp $ */1 /* $Id: hmcomm.cpp,v 1.18 2001-11-28 23:33:35 phaller Exp $ */ 2 2 3 3 /* … … 19 19 #include <string.h> 20 20 #include <handlemanager.h> 21 #include "handlenames.h" 21 22 #include <heapstring.h> 22 23 #include "hmdevice.h" … … 91 92 if(pData!= NULL) 92 93 HMDeviceRegisterEx("COM1", this, pData); 94 95 // add symbolic links to the "real name" of the device 96 { 97 // @@@PH what's the long device name: SerialPortx ? 98 // HandleNamesAddSymbolicLink("\\Device\\ParallelPort3", "COM3"); 99 100 PSZ pszCOM = strdup("\\\\.\\COMx"); 101 for (char ch = '1'; ch <= '9'; ch++) 102 { 103 pszCOM[7] = ch; 104 HandleNamesAddSymbolicLink(pszCOM, pszCOM+4); 105 } 106 free(pszCOM); 107 } 93 108 } 94 109 … … 109 124 { 110 125 dprintf2(("HMDeviceCommClass::FindDevice %s %s", lpClassDevName, lpDeviceName)); 111 112 if(namelength > 5) { 113 if(namelength != 9 || lstrncmpA(lpDeviceName, "\\\\.\\", 4) != 0) { 114 return FALSE; //can't be com name 115 } 116 lpDeviceName += 4; //skip prefix 117 } 118 126 119 127 //first 3 letters 'COM'? 120 128 if(lstrncmpiA(lpDeviceName, lpClassDevName, 3) != 0) { … … 207 215 { 208 216 delete pHMHandleData->lpHandlerData; 209 return rc;217 return error2WinError(rc); 210 218 } 211 219 rc = SetBaud(pHMHandleData,9600); -
trunk/src/kernel32/hmdevio.cpp
r7458 r7474 1 /* $Id: hmdevio.cpp,v 1.1 7 2001-11-26 17:16:24 sandervlExp $ */1 /* $Id: hmdevio.cpp,v 1.18 2001-11-28 23:33:35 phaller Exp $ */ 2 2 3 3 /* … … 30 30 #include "map.h" 31 31 #include "exceptutil.h" 32 #include "oslibdos.h" 32 33 33 34 #define DBG_LOCALLOG DBG_hmdevio … … 111 112 { 112 113 HINSTANCE hDrvDll = LoadLibraryA(szDllName); 113 if(hDrvDll) { 114 if(hDrvDll) 115 { 114 116 sprintf(szDrvName, "\\\\.\\%s", szKeyName); 115 117 driver = new HMCustomDriver(hDrvDll, szDrvName); … … 117 119 rc = HMDeviceRegister(szDrvName, driver); 118 120 if (rc != NO_ERROR) /* check for errors */ 119 dprintf(("KERNEL32:RegisterDevices: registering %s failed with %u.\n", szDrvName, rc)); 121 dprintf(("KERNEL32:RegisterDevices: registering %s failed with %u.\n", szDrvName, rc)); 122 123 // @@@PH 124 // there should be an symbolic link: 125 // "\\.\drvname$" -> "drvname$" 120 126 } 121 127 } … … 217 223 if(rc) { 218 224 dprintf(("DosSetRelMaxFH returned %d", rc)); 219 return rc;225 return error2WinError(rc); 220 226 } 221 227 dprintf(("DosOpen failed -> increased nr open files to %d", CurMaxFH)); … … 225 231 dprintf(("DosOpen %s returned %d\n", szOS2Name, rc)); 226 232 227 if(rc == NO_ERROR) { 228 pHMHandleData->hHMHandle = hfFileHandle; 229 return (NO_ERROR); 230 } 231 else return(rc); 233 if(rc == NO_ERROR) 234 { 235 pHMHandleData->hHMHandle = hfFileHandle; 236 return (NO_ERROR); 237 } 238 else 239 return(error2WinError(rc)); 232 240 } 233 241 //****************************************************************************** -
trunk/src/kernel32/hmdisk.cpp
r7457 r7474 1 /* $Id: hmdisk.cpp,v 1. 29 2001-11-26 14:54:01 sandervlExp $ */1 /* $Id: hmdisk.cpp,v 1.30 2001-11-28 23:33:36 phaller Exp $ */ 2 2 3 3 /* … … 67 67 BOOL HMDeviceDiskClass::FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength) 68 68 { 69 // @@@PH 70 // this is broken: 71 // "\\.\C:" and "C:" is a LOGICAL drive 72 // \\.\PHYSICALDRIVEx is a PHYSICAL drive! 73 69 74 //\\.\x: -> length 6 70 75 //\\.\PHYSICALDRIVEn -> length 18 … … 109 114 return ERROR_INVALID_PARAMETER; 110 115 } 111 if(strncmp(lpFileName, // "support" for local unc names112 "\\\\.\\",113 4) == 0)114 {115 lpFileName+=4;116 }117 116 118 117 //Disable error popus. NT allows an app to open a cdrom/dvd drive without a disk inside … … 206 205 filename[2] = 0; 207 206 208 //Disable error popu s. NT allows an app to open a cdrom/dvd drive without a disk inside207 //Disable error popups. NT allows an app to open a cdrom/dvd drive without a disk inside 209 208 //OS/2 fails in that case with error ERROR_NOT_READY 210 209 ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS); -
trunk/src/kernel32/hmfile.cpp
r7457 r7474 1 /* $Id: hmfile.cpp,v 1.3 0 2001-11-26 14:54:01 sandervlExp $ */1 /* $Id: hmfile.cpp,v 1.31 2001-11-28 23:33:36 phaller Exp $ */ 2 2 3 3 /* … … 49 49 * Variables : 50 50 * Result : 51 * Remark : TODO: \\.\PHYSICALDRIVEx opens physical drive x51 * Remark : 52 52 * Status : NO_ERROR - API succeeded 53 53 * other - what is to be set in SetLastError … … 72 72 lpSecurityAttributes, 73 73 pHMHandleDataTemplate)); 74 75 if(strncmp(lpFileName, // "support" for local unc names 76 "\\\\.\\", 77 4) == 0) 78 { 79 lpFileName+=4; 80 } 81 else { 82 ParsePath(lpFileName, filepath, sizeof(filepath)); 83 lpFileName = filepath; 84 } 85 74 75 ParsePath(lpFileName, filepath, sizeof(filepath)); 76 lpFileName = filepath; 86 77 87 78 // create from template … … 180 171 } 181 172 182 if(strcmp(lpFileName, // "support" for local unc names183 "\\\\.\\") == 0)184 {185 lpFileName+=4;186 }187 else188 173 if(!strchr(lpFileName, ':') && !strchr(lpFileName, '\\')) 189 174 { -
trunk/src/kernel32/hmmailslot.cpp
r7457 r7474 1 /* $Id: hmmailslot.cpp,v 1. 3 2001-11-26 14:54:02 sandervlExp $1 /* $Id: hmmailslot.cpp,v 1.4 2001-11-28 23:33:36 phaller Exp $ 2 2 * 3 3 * Win32 mailslot APIs … … 190 190 191 191 char *pipename = (char *)alloca(strlen(lpFileName)+16); 192 if(pipename == NULL) {193 DebugInt3();194 SetLastError(ERROR_NOT_ENOUGH_MEMORY);195 return FALSE;192 if(pipename == NULL) 193 { 194 DebugInt3(); 195 return ERROR_NOT_ENOUGH_MEMORY; 196 196 } 197 197 strcpy(pipename, "\\\\.\\pipe\\"); … … 215 215 //todo: lookup name and fail if exists 216 216 mailslot = new HMMailSlotInfo(lpFileName, hPipe, -1, 0, FALSE, (LPSECURITY_ATTRIBUTES)lpSecurityAttributes); 217 if(mailslot == NULL) { 218 DebugInt3(); 219 return ERROR_NOT_ENOUGH_MEMORY; 217 if(mailslot == NULL) 218 { 219 DebugInt3(); 220 return ERROR_NOT_ENOUGH_MEMORY; 220 221 } 221 222 pHMHandleData->dwUserData = (DWORD)mailslot; -
trunk/src/kernel32/hmnpipe.cpp
r7457 r7474 1 /* $Id: hmnpipe.cpp,v 1. 4 2001-11-26 14:54:02 sandervlExp $ */1 /* $Id: hmnpipe.cpp,v 1.5 2001-11-28 23:33:37 phaller Exp $ */ 2 2 /* 3 3 * Project Odin Software License can be found in LICENSE.TXT … … 140 140 pHMHandleData->dwCreation, 141 141 pHMHandleData->dwFlags); 142 if(pHMHandleData->hHMHandle == -1) { 143 return GetLastError(); 144 } 145 return ERROR_SUCCESS; 142 if(pHMHandleData->hHMHandle == -1) 143 { 144 return GetLastError(); 145 } 146 return ERROR_SUCCESS; 146 147 } 147 148 -
trunk/src/kernel32/hmparport.cpp
r7457 r7474 1 /* $Id: hmparport.cpp,v 1. 8 2001-11-26 14:54:03 sandervlExp $ */1 /* $Id: hmparport.cpp,v 1.9 2001-11-28 23:33:37 phaller Exp $ */ 2 2 3 3 /* … … 152 152 153 153 // add symbolic links to the "real name" of the device 154 HandleNamesAddSymbolicLink("\\Device\\ParallelPort1", "LPT1"); 155 HandleNamesAddSymbolicLink("\\Device\\ParallelPort2", "LPT2"); 156 HandleNamesAddSymbolicLink("\\Device\\ParallelPort3", "LPT3"); 154 { 155 PSZ pszLPT = strdup("\\\\.\\LPTx"); 156 PSZ pszLPT2 = strdup("\\Device\\ParallelPort1"); 157 for (char ch = '1'; ch <= '3'; ch++) 158 { 159 pszLPT[7] = ch; 160 pszLPT2[20] = ch; 161 HandleNamesAddSymbolicLink(pszLPT, pszLPT+4); 162 HandleNamesAddSymbolicLink(pszLPT2, pszLPT+4); 163 } 164 free(pszLPT); 165 free(pszLPT2); 166 } 157 167 } 158 168 … … 172 182 BOOL HMDeviceParPortClass::FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength) 173 183 { 174 dprintf(("HMDeviceParPortClass::FindDevice(%s,%s)\n", 175 lpClassDevName, 176 lpDeviceName)); 177 184 // can be both, "LPT1" and "LPT1:" 178 185 if(namelength > 5) 179 186 return FALSE; //can't be lpt name … … 208 215 pHMHandleDataTemplate)); 209 216 210 char comname[6];217 char lptname[6]; 211 218 212 219 dprintf(("HMDeviceParPortClass: Parallel port %s open request\n", lpFileName)); 213 220 214 if(strlen(lpFileName) > 5) { 215 return -1; //safety check (unnecessary..) 216 } 217 pHMHandleData->hHMHandle = 0; 218 219 strcpy(comname, lpFileName); 220 comname[4] = 0; //get rid of : (if present) (eg LPT1:) 221 strcpy(lptname, lpFileName); 222 lptname[4] = 0; //get rid of : (if present) (eg LPT1:) 221 223 222 224 //AH: TODO parse Win32 security handles 223 225 ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS); 224 pHMHandleData->hHMHandle = OSLibDosOpen( comname,226 pHMHandleData->hHMHandle = OSLibDosOpen(lptname, 225 227 OSLIB_ACCESS_READWRITE | 226 228 OSLIB_ACCESS_SHAREDENYREAD | 227 229 OSLIB_ACCESS_SHAREDENYWRITE); 228 230 SetErrorMode(oldmode); 229 231 232 // check if handle could be opened properly 233 if (0 == pHMHandleData->hHMHandle) 234 { 235 // @@@PH we need to get an OS/2 return code from OSLibDosOpen! 236 // and translate it via error2WinError 237 return ERROR_ACCESS_DENIED; // signal failure 238 } 239 230 240 #if 0 231 241 if (pHMHandleData->hHMHandle != 0) … … 256 266 " XON Char : 0x%x\n" 257 267 " XOFF Char : 0x%x\n", 258 comname,268 lptname, 259 269 ((PHMDEVCOMDATA)pHMHandleData->lpHandlerData)->dcbOS2.usWriteTimeout, 260 270 ((PHMDEVCOMDATA)pHMHandleData->lpHandlerData)->dcbOS2.usReadTimeout, … … 610 620 #endif 611 621 612 return(rc== 0);622 return(rc==NO_ERROR); 613 623 } 614 624 -
trunk/src/kernel32/oslibdos.cpp
r7398 r7474 1 /* $Id: oslibdos.cpp,v 1.8 5 2001-11-19 13:02:58phaller Exp $ */1 /* $Id: oslibdos.cpp,v 1.86 2001-11-28 23:33:37 phaller Exp $ */ 2 2 /* 3 3 * Wrappers for OS/2 Dos* API … … 178 178 case ERROR_WRITE_PROTECT: //19 179 179 return ERROR_WRITE_PROTECT_W; 180 181 case ERROR_BAD_UNIT: //20 182 return ERROR_BAD_UNIT_W; 180 183 181 184 case ERROR_NOT_READY: //21 … … 604 607 os2flags, 605 608 0L); /* No extended attribute */ 606 607 if(rc) { 608 if(rc == ERROR_TOO_MANY_OPEN_FILES) { 609 ULONG CurMaxFH; 610 LONG ReqCount = 32; 611 612 rc = DosSetRelMaxFH(&ReqCount, &CurMaxFH); 613 if(rc) { 614 dprintf(("DosSetRelMaxFH returned %d", rc)); 615 return 0; 616 } 617 dprintf(("DosOpen failed -> increased nr open files to %d", CurMaxFH)); 618 goto tryopen; 619 } 609 if(rc) 610 { 611 if(rc == ERROR_TOO_MANY_OPEN_FILES) 612 { 613 ULONG CurMaxFH; 614 LONG ReqCount = 32; 615 616 rc = DosSetRelMaxFH(&ReqCount, &CurMaxFH); 617 if(rc) 618 { 619 dprintf(("DosSetRelMaxFH returned %d", rc)); 620 620 return 0; 621 } 622 else return hFile; 621 } 622 dprintf(("DosOpen failed -> increased nr open files to %d", CurMaxFH)); 623 goto tryopen; 624 } 625 626 SetLastError(error2WinError(rc)); 627 return 0; 628 } 629 630 // OK, file was opened 631 SetLastError(ERROR_SUCCESS_W); 632 return hFile; 623 633 } 624 634 //******************************************************************************
Note:
See TracChangeset
for help on using the changeset viewer.