/*++
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);
}