summaryrefslogblamecommitdiffstats
path: root/private/os2/client/dllnp16.c
blob: 8b6cac3fb035d2898edae432f7a2f94cdcfd6fe7 (plain) (tree)

































































































































































































































                                                                       
/*++

Copyright (c) 1991  Microsoft Corporation

Module Name:

    dllnp16.c

Abstract:

    This module implements 16 equivalents of OS/2 V1.21 Named Pipes
    API Calls. These are called from 16->32 thunks (i386\doscalls.asm).

Author:

    Michael Jarus (mjarus) 24-Feb-1992

Revision History:

--*/

#define INCL_OS2V20_PIPES
#define INCL_OS2V20_FILESYS
#define INCL_OS2V20_ERRORS
#include "os2dll.h"
#define INCL_DOSNMPIPES
#include "os2dll16.h"


APIRET
Dos16CallNPipe(
    PSZ pszName,
    PBYTE pInBuf,
    ULONG cbIn,
    PBYTE pOutBuf,
    ULONG cbOut,
    PUSHORT pcbActual,
    ULONG msec
    )
{
    ULONG   Actual;
    APIRET  Rc;

    try
    {
        Od2ProbeForWrite(pcbActual, sizeof(USHORT), 1);
    }
    except( EXCEPTION_EXECUTE_HANDLER )
    {
            Od2ExitGP();
    }

    Actual = (ULONG) *pcbActual;

    Rc = DosCallNPipe(
            pszName,
            pInBuf,
            cbIn,
            pOutBuf,
            cbOut,
            &Actual,
            msec
            );

    *pcbActual = (USHORT) Actual;

    return (Rc);

}


APIRET
Dos16CreateNPipe(
    IN PSZ      pszName,
    OUT PUSHORT phPipe,
    ULONG       fsOpenMode,
    ULONG       fsPipeMode,
    ULONG       cbOutBuf,
    ULONG       cbInBuf,
    ULONG       ulTimeOut
    )
{
    HPIPE   hPipe;
    APIRET  Rc;

    try
    {
        Od2ProbeForWrite(phPipe, sizeof(USHORT), 1);
    }
    except( EXCEPTION_EXECUTE_HANDLER )
    {
            Od2ExitGP();
    }

    hPipe = (HPIPE) *phPipe;

    Rc = DosCreateNPipe(
               pszName,
               &hPipe,
               fsOpenMode,
               fsPipeMode,
               cbOutBuf,
               cbInBuf,
               ulTimeOut
            );

    *phPipe = (USHORT) hPipe;

    return (Rc);

}


APIRET
Dos16PeekNPipe(
    HPIPE   hpipe,
    PBYTE   pBuf,
    ULONG   cbBuf,
    PUSHORT pActual,
    PUSHORT pcbMore,
    PUSHORT pState
    )
{
    ULONG   Actual;
    ULONG   State;
    APIRET  Rc;

    try
    {
        Od2ProbeForWrite(pActual, sizeof(USHORT), 1);
        Od2ProbeForWrite(pState, sizeof(USHORT), 1);
        Od2ProbeForWrite(pcbMore, sizeof(USHORT), 2);
    }
    except( EXCEPTION_EXECUTE_HANDLER )
    {
            Od2ExitGP ();
    }

    Actual = (ULONG) *pActual;
    State = (ULONG) *pState;

    Rc = DosPeekNPipe(
            hpipe,
            pBuf,
            cbBuf,
            &Actual,
            (PULONG)pcbMore,
            &State
            );

    *pActual = (USHORT) Actual;
    *pState = (USHORT) State;

    return (Rc);
}


APIRET
Dos16QueryNPHState(
    HPIPE   hpipe,
    PUSHORT pState
    )
{
    ULONG   State;
    APIRET  Rc;

    try
    {
        Od2ProbeForWrite(pState, sizeof(USHORT), 1);
    }
    except( EXCEPTION_EXECUTE_HANDLER )
    {
            Od2ExitGP ();
    }

    State = (ULONG) *pState;

    Rc = DosQueryNPHState(
            hpipe,
            &State
            );

    *pState = (USHORT) State;

    return (Rc);

}

APIRET
Dos16TransactNPipe(
    HPIPE   hNamedPipe,
    PBYTE   pInBuf,
    ULONG   cbIn,
    PBYTE   pOutBuf,
    ULONG   cbOut,
    PUSHORT pcbRead
    )
{
    ULONG   cbRead;
    APIRET  Rc;

    try
    {
        Od2ProbeForWrite(pcbRead, sizeof(USHORT), 1);
    }
    except( EXCEPTION_EXECUTE_HANDLER )
    {
            Od2ExitGP ();
    }

    cbRead = (ULONG) *pcbRead;

    Rc = DosTransactNPipe(
            hNamedPipe,
            pInBuf,
            cbIn,
            pOutBuf,
            cbOut,
            &cbRead
            );

    *pcbRead = (USHORT) cbRead;

    return (Rc);

}