Ignore:
Timestamp:
Jan 23, 2001, 7:31:26 PM (25 years ago)
Author:
sandervl
Message:

handle manager class for standard handles added

File:
1 edited

Legend:

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

    r5016 r5019  
    1 /* $Id: HandleManager.cpp,v 1.61 2001-01-23 11:59:44 sandervl Exp $ */
     1/* $Id: HandleManager.cpp,v 1.62 2001-01-23 18:31:25 sandervl Exp $ */
    22
    33/*
     
    6161#include "HMThread.h"
    6262#include "HMNPipe.h"
     63#include "HMStd.h"
    6364#include <vmutex.h>
    6465#include <win\thread.h>
     
    129130                                         /* this MUST !!! be false initially */
    130131
    131   HMDeviceHandler        *pHMOpen32;      /* default handle manager instance */
     132  HMDeviceHandler        *pHMStandard;     /* default handle manager instance */
     133  HMDeviceHandler        *pHMOpen32;       /* default handle manager instance */
    132134  HMDeviceHandler        *pHMEvent;        /* static instances of subsystems */
    133135  HMDeviceHandler        *pHMFile;
     
    253255                                                       /* free handle found ? */
    254256    if (INVALID_HANDLE_VALUE == TabWin32Handles[ulLoop].hmHandleData.hHMHandle) {
    255         //SvL: Mark handle as taken here. Doing it outside of this function
     257        //SvL: Mark handle as allocated here. Doing it outside of this function
    256258        //     isn't thread safe. (and not very smart)
    257259        TabWin32Handles[ulLoop].hmHandleData.hHMHandle      = ulLoop;
     
    403405
    404406    /* copy standard handles from OS/2's Open32 Subsystem */
     407    HMGlobals.pHMStandard   = new HMDeviceStandardClass("\\\\STANDARD_HANDLE\\");
    405408    HMSetStdHandle(STD_INPUT_HANDLE,  O32_GetStdHandle(STD_INPUT_HANDLE));
    406409    HMSetStdHandle(STD_OUTPUT_HANDLE, O32_GetStdHandle(STD_OUTPUT_HANDLE));
    407410    HMSetStdHandle(STD_ERROR_HANDLE,  O32_GetStdHandle(STD_ERROR_HANDLE));
    408411
    409                         /* create handle manager instance for Open32 handles */
     412    /* create handle manager instance for Open32 handles */
    410413    HMGlobals.pHMOpen32     = new HMDeviceOpen32Class("\\\\.\\");
    411414    HMGlobals.pHMEvent      = new HMDeviceEventClass("\\\\EVENT\\");
     
    462465  if(HMGlobals.pHMDisk)
    463466    delete HMGlobals.pHMDisk;
     467  if(HMGlobals.pHMStandard);
     468    delete HMGlobals.pHMStandard;
    464469
    465470  return (NO_ERROR);
     
    707712 *****************************************************************************/
    708713
    709 HANDLE  HMGetStdHandle(DWORD nStdHandle)
     714HANDLE HMGetStdHandle(DWORD nStdHandle)
    710715{
    711716  switch (nStdHandle)
     
    737742 *****************************************************************************/
    738743
    739 BOOL    HMSetStdHandle(DWORD  nStdHandle,
    740                                HANDLE hHandle)
    741 {
     744BOOL HMSetStdHandle(DWORD  nStdHandle, HANDLE hHandleOpen32)
     745{
     746 PHMHANDLEDATA pHMHandleData;
     747 HANDLE        hHandle;
     748
     749  hHandle = _HMHandleGetFree();              /* get free handle */
     750  if (hHandle == -1)                         /* oops, no free handles ! */
     751  {
     752    SetLastError(ERROR_NOT_ENOUGH_MEMORY);      /* use this as error message */
     753    return 0;
     754  }
     755
     756  /* initialize the complete HMHANDLEDATA structure */
     757  pHMHandleData = &TabWin32Handles[hHandle].hmHandleData;
     758  pHMHandleData->dwType     = FILE_TYPE_CHAR;
     759  pHMHandleData->dwAccess   = 0;
     760  pHMHandleData->dwShare    = 0;
     761  pHMHandleData->dwCreation = 0;
     762  pHMHandleData->dwFlags    = 0;
     763  pHMHandleData->dwUserData = nStdHandle;
     764  pHMHandleData->hHMHandle  = hHandleOpen32;
     765  pHMHandleData->lpHandlerData = NULL;
     766
     767  TabWin32Handles[hHandle].pDeviceHandler = HMGlobals.pHMStandard;
     768
    742769  switch (nStdHandle)
    743770  {
     
    13771404  if (-1 == iIndex)                                               /* error ? */
    13781405  {
    1379     //Must return FILE_TYPE_CHAR here; (used to fail index check)
    1380     //---------->>> ASSUMES that _HMHandleQuery failes!!!!!!!!!!!!!!!!
    1381     if((hFile == GetStdHandle(STD_INPUT_HANDLE)) ||
    1382        (hFile == GetStdHandle(STD_OUTPUT_HANDLE)) ||
    1383        (hFile == GetStdHandle(STD_ERROR_HANDLE)))
    1384     {
    1385         return FILE_TYPE_CHAR;
    1386     }
    1387     else
    1388     {
    13891406      SetLastError(ERROR_INVALID_HANDLE);     /* set win32 error information */
    13901407      return FILE_TYPE_UNKNOWN;                            /* signal failure */
    1391     }
    13921408  }
    13931409
Note: See TracChangeset for help on using the changeset viewer.