Ignore:
Timestamp:
Nov 29, 2001, 12:33:37 AM (24 years ago)
Author:
phaller
Message:

Fixes in HandleManager and Device Handlers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/hmparport.cpp

    r7457 r7474  
    1 /* $Id: hmparport.cpp,v 1.8 2001-11-26 14:54:03 sandervl Exp $ */
     1/* $Id: hmparport.cpp,v 1.9 2001-11-28 23:33:37 phaller Exp $ */
    22
    33/*
     
    152152 
    153153  // 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  }
    157167}
    158168
     
    172182BOOL HMDeviceParPortClass::FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength)
    173183{
    174   dprintf(("HMDeviceParPortClass::FindDevice(%s,%s)\n",
    175            lpClassDevName,
    176            lpDeviceName));
    177  
     184  // can be both, "LPT1" and "LPT1:"
    178185    if(namelength > 5)
    179186        return FALSE;  //can't be lpt name
     
    208215           pHMHandleDataTemplate));
    209216 
    210  char comname[6];
     217 char lptname[6];
    211218
    212219  dprintf(("HMDeviceParPortClass: Parallel port %s open request\n", lpFileName));
    213220
    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:)
    221223
    222224  //AH: TODO parse Win32 security handles
    223225  ULONG oldmode = SetErrorMode(SEM_FAILCRITICALERRORS);
    224   pHMHandleData->hHMHandle = OSLibDosOpen(comname,
     226  pHMHandleData->hHMHandle = OSLibDosOpen(lptname,
    225227                                          OSLIB_ACCESS_READWRITE |
    226228                                          OSLIB_ACCESS_SHAREDENYREAD |
    227229                                          OSLIB_ACCESS_SHAREDENYWRITE);
    228230  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 
    230240#if 0
    231241  if (pHMHandleData->hHMHandle != 0)
     
    256266             " XON Char               : 0x%x\n"
    257267             " XOFF Char              : 0x%x\n",
    258              comname,
     268             lptname,
    259269             ((PHMDEVCOMDATA)pHMHandleData->lpHandlerData)->dcbOS2.usWriteTimeout,
    260270             ((PHMDEVCOMDATA)pHMHandleData->lpHandlerData)->dcbOS2.usReadTimeout,
     
    610620#endif
    611621 
    612   return(rc==0);
     622  return(rc==NO_ERROR);
    613623}
    614624
Note: See TracChangeset for help on using the changeset viewer.