mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 17:44:45 +00:00
reformat some code to make it readably
svn path=/trunk/; revision=14530
This commit is contained in:
parent
237d12dc8e
commit
68c2c91476
1 changed files with 476 additions and 485 deletions
|
@ -28,31 +28,23 @@
|
|||
/* TYPES */
|
||||
|
||||
/* Pointer to a callback that handles a particular parameter */
|
||||
typedef BOOL (*COMMDCB_PARAM_CALLBACK)
|
||||
(
|
||||
DCB *,
|
||||
COMMTIMEOUTS *,
|
||||
BOOL *,
|
||||
LPWSTR *
|
||||
);
|
||||
typedef BOOL (*COMMDCB_PARAM_CALLBACK)(DCB *, COMMTIMEOUTS *, BOOL *, LPWSTR *);
|
||||
|
||||
/* Symbolic flag of any length */
|
||||
typedef struct _COMMDCB_PARAM_STRFLAG
|
||||
{
|
||||
UNICODE_STRING String;
|
||||
ULONG_PTR Value;
|
||||
} COMMDCB_PARAM_STRFLAG;
|
||||
} COMMDCB_PARAM_STRFLAG, *PCOMMDCB_PARAM_STRFLAG;
|
||||
|
||||
/* One char long symbolic flag */
|
||||
typedef struct _COMMDCB_PARAM_CHARFLAG
|
||||
{
|
||||
WCHAR Char;
|
||||
ULONG_PTR Value;
|
||||
} COMMDCB_PARAM_CHARFLAG;
|
||||
} COMMDCB_PARAM_CHARFLAG, *PCOMMDCB_PARAM_CHARFLAG;
|
||||
|
||||
/* MACROS */
|
||||
/* stupid Borland C++ requires this */
|
||||
#define _L(__S__) L ## __S__
|
||||
|
||||
/* Declare a parameter handler */
|
||||
#define COMMDCB_PARAM_HANDLER(__P__) \
|
||||
|
@ -69,13 +61,11 @@ typedef struct _COMMDCB_PARAM_CHARFLAG
|
|||
Lookup a string flag and return its numerical value. The flags array must be
|
||||
sorted - a dichotomycal search is performed
|
||||
*/
|
||||
BOOL COMMDCB_LookupStrFlag
|
||||
(
|
||||
UNICODE_STRING * Flag,
|
||||
COMMDCB_PARAM_STRFLAG * Flags,
|
||||
static BOOL
|
||||
COMMDCB_LookupStrFlag(PUNICODE_STRING Flag,
|
||||
PCOMMDCB_PARAM_STRFLAG Flags,
|
||||
int FlagCount,
|
||||
ULONG_PTR * Value
|
||||
)
|
||||
PULONG_PTR Value)
|
||||
{
|
||||
/* Lower and upper bound for dichotomycal search */
|
||||
int nLowerBound = 0;
|
||||
|
@ -88,12 +78,9 @@ BOOL COMMDCB_LookupStrFlag
|
|||
int nCurFlag = nLowerBound + (nUpperBound - nLowerBound) / 2;
|
||||
|
||||
/* compare the string with the pivot */
|
||||
nComparison = RtlCompareUnicodeString
|
||||
(
|
||||
Flag,
|
||||
nComparison = RtlCompareUnicodeString(Flag,
|
||||
&Flags[nCurFlag].String,
|
||||
TRUE
|
||||
);
|
||||
TRUE);
|
||||
|
||||
/* string is equal */
|
||||
if(nComparison == 0)
|
||||
|
@ -104,29 +91,21 @@ BOOL COMMDCB_LookupStrFlag
|
|||
/* success */
|
||||
return TRUE;
|
||||
}
|
||||
/* string is less than */
|
||||
else if(nComparison < 0)
|
||||
{
|
||||
/*
|
||||
restrict the search to the first half of the current slice, minus the pivot
|
||||
* restrict the search to the first half of the current slice, minus the pivot
|
||||
*/
|
||||
nUpperBound = nCurFlag - 1;
|
||||
|
||||
/* fallthrough */
|
||||
}
|
||||
/* string is greater than */
|
||||
else
|
||||
{
|
||||
/*
|
||||
restrict the search to the second half of the current slice, minus the pivot
|
||||
* restrict the search to the second half of the current slice, minus the pivot
|
||||
*/
|
||||
nLowerBound = nCurFlag + 1;
|
||||
|
||||
/* fallthrough */
|
||||
}
|
||||
}
|
||||
/* continue until the slice is empty */
|
||||
while(nLowerBound <= nUpperBound);
|
||||
} while(nLowerBound <= nUpperBound);
|
||||
|
||||
/* string not found: failure */
|
||||
return FALSE;
|
||||
|
@ -137,13 +116,11 @@ BOOL COMMDCB_LookupStrFlag
|
|||
Find the next character flag and return its numerical value. The flags array
|
||||
must be sorted - a dichotomycal search is performed
|
||||
*/
|
||||
BOOL COMMDCB_ParseCharFlag
|
||||
(
|
||||
LPWSTR * StrTail,
|
||||
COMMDCB_PARAM_CHARFLAG * Flags,
|
||||
static BOOL
|
||||
COMMDCB_ParseCharFlag(LPWSTR *StrTail,
|
||||
PCOMMDCB_PARAM_CHARFLAG Flags,
|
||||
int FlagCount,
|
||||
ULONG_PTR * Value
|
||||
)
|
||||
PULONG_PTR Value)
|
||||
{
|
||||
/* Lower and upper bound for dichotomycal search */
|
||||
int nLowerBound = 0;
|
||||
|
@ -153,14 +130,13 @@ BOOL COMMDCB_ParseCharFlag
|
|||
|
||||
/* premature end of string, or the character is whitespace */
|
||||
if(!wcFlag || iswspace(wcFlag))
|
||||
/* failure */
|
||||
return FALSE;
|
||||
|
||||
/* uppercase the character for case-insensitive search */
|
||||
wcFlag = towupper(wcFlag);
|
||||
|
||||
/* skip the character flag */
|
||||
++ (*StrTail);
|
||||
(*StrTail)++;
|
||||
|
||||
/* see COMMDCB_LookupStrFlag for a description of the algorithm */
|
||||
do
|
||||
|
@ -184,8 +160,7 @@ BOOL COMMDCB_ParseCharFlag
|
|||
{
|
||||
nLowerBound = nCurFlag + 1;
|
||||
}
|
||||
}
|
||||
while(nUpperBound >= nLowerBound);
|
||||
} while(nUpperBound >= nLowerBound);
|
||||
|
||||
/* flag not found: failure */
|
||||
return FALSE;
|
||||
|
@ -195,24 +170,22 @@ BOOL COMMDCB_ParseCharFlag
|
|||
Find the next string flag and return its numerical value. The flags array must
|
||||
be sorted - a dichotomycal search is performed
|
||||
*/
|
||||
BOOL COMMDCB_ParseStrFlag
|
||||
(
|
||||
LPWSTR * StrTail,
|
||||
COMMDCB_PARAM_STRFLAG * Flags,
|
||||
static BOOL
|
||||
COMMDCB_ParseStrFlag(LPWSTR *StrTail,
|
||||
PCOMMDCB_PARAM_STRFLAG Flags,
|
||||
int FlagCount,
|
||||
ULONG_PTR * Value
|
||||
)
|
||||
PULONG_PTR Value)
|
||||
{
|
||||
LPWSTR pwcNewTail = *StrTail;
|
||||
LPWSTR pwcNewTail;
|
||||
UNICODE_STRING wstrFlag;
|
||||
|
||||
/* scan the string until the first space character or the terminating null */
|
||||
while(pwcNewTail[0] && !iswspace(pwcNewTail[0]))
|
||||
++ pwcNewTail;
|
||||
for(pwcNewTail = *StrTail;
|
||||
pwcNewTail[0] && !iswspace(pwcNewTail[0]);
|
||||
pwcNewTail++);
|
||||
|
||||
/* string flag empty */
|
||||
if(pwcNewTail == *StrTail)
|
||||
/* failure */
|
||||
return FALSE;
|
||||
|
||||
/* build the UNICODE_STRING description of the string flag */
|
||||
|
@ -230,43 +203,45 @@ BOOL COMMDCB_ParseStrFlag
|
|||
/*
|
||||
Parse a boolean value in the symbolic form on/off
|
||||
*/
|
||||
BOOL COMMDCB_ParseBool(LPWSTR * StrTail, BOOL * Value)
|
||||
static BOOL
|
||||
COMMDCB_ParseBool(LPWSTR *StrTail,
|
||||
PBOOL Value)
|
||||
{
|
||||
BOOL bRetVal;
|
||||
ULONG_PTR nValue;
|
||||
static COMMDCB_PARAM_STRFLAG a_BoolFlags[] =
|
||||
{
|
||||
static COMMDCB_PARAM_STRFLAG a_BoolFlags[] = {
|
||||
{ ROS_STRING_INITIALIZER(L"off"), FALSE },
|
||||
{ ROS_STRING_INITIALIZER(L"on"), TRUE }
|
||||
};
|
||||
|
||||
/* try to recognize the next flag as a boolean */
|
||||
bRetVal = COMMDCB_ParseStrFlag
|
||||
(
|
||||
StrTail,
|
||||
bRetVal = COMMDCB_ParseStrFlag(StrTail,
|
||||
a_BoolFlags,
|
||||
sizeof(a_BoolFlags) / sizeof(a_BoolFlags[0]),
|
||||
&nValue
|
||||
);
|
||||
&nValue);
|
||||
|
||||
/* failure */
|
||||
if(!bRetVal) return FALSE;
|
||||
|
||||
if(!bRetVal)
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
*Value = nValue ? TRUE : FALSE;
|
||||
*Value = (nValue ? TRUE : FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
Parse a decimal integer
|
||||
*/
|
||||
BOOL COMMDCB_ParseInt(LPWSTR * StrTail, DWORD * Value)
|
||||
static BOOL
|
||||
COMMDCB_ParseInt(LPWSTR *StrTail,
|
||||
DWORD *Value)
|
||||
{
|
||||
LPWSTR pwcPrevTail = *StrTail;
|
||||
DWORD nValue = wcstoul(*StrTail, StrTail, 10);
|
||||
|
||||
/* no character was consumed: failure */
|
||||
if(pwcPrevTail == *StrTail) return FALSE;
|
||||
if(pwcPrevTail == *StrTail)
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
*Value = nValue;
|
||||
|
@ -283,32 +258,54 @@ COMMDCB_PARAM_HANDLER(baud)
|
|||
|
||||
/* parse the baudrate */
|
||||
if(!COMMDCB_ParseInt(StrTail, &nValue))
|
||||
/* failure */
|
||||
return FALSE;
|
||||
|
||||
switch(nValue)
|
||||
{
|
||||
/* documented abbreviations */
|
||||
case 11: Dcb->BaudRate = 110; break;
|
||||
case 15: Dcb->BaudRate = 150; break;
|
||||
case 30: Dcb->BaudRate = 300; break;
|
||||
case 60: Dcb->BaudRate = 600; break;
|
||||
case 12: Dcb->BaudRate = 1200; break;
|
||||
case 24: Dcb->BaudRate = 2400; break;
|
||||
case 48: Dcb->BaudRate = 4800; break;
|
||||
case 96: Dcb->BaudRate = 9600; break;
|
||||
case 19: Dcb->BaudRate = 19200; break;
|
||||
case 11:
|
||||
Dcb->BaudRate = 110;
|
||||
break;
|
||||
case 15:
|
||||
Dcb->BaudRate = 150;
|
||||
break;
|
||||
case 30:
|
||||
Dcb->BaudRate = 300;
|
||||
break;
|
||||
case 60:
|
||||
Dcb->BaudRate = 600;
|
||||
break;
|
||||
case 12:
|
||||
Dcb->BaudRate = 1200;
|
||||
break;
|
||||
case 24:
|
||||
Dcb->BaudRate = 2400;
|
||||
break;
|
||||
case 48:
|
||||
Dcb->BaudRate = 4800;
|
||||
break;
|
||||
case 96:
|
||||
Dcb->BaudRate = 9600;
|
||||
break;
|
||||
case 19:
|
||||
Dcb->BaudRate = 19200;
|
||||
break;
|
||||
|
||||
/* literal value */
|
||||
default: Dcb->BaudRate = nValue; break;
|
||||
default:
|
||||
Dcb->BaudRate = nValue;
|
||||
break;
|
||||
}
|
||||
|
||||
/* if the stop bits haven't been specified explicitely */
|
||||
if(!(*StopBitsSet))
|
||||
{
|
||||
/* default the stop bits to 2 for 110 baud */
|
||||
if(Dcb->BaudRate == 110) Dcb->StopBits = TWOSTOPBITS;
|
||||
if(Dcb->BaudRate == 110)
|
||||
Dcb->StopBits = TWOSTOPBITS;
|
||||
/* else, default the stop bits to 1 */
|
||||
else Dcb->StopBits = ONESTOPBIT;
|
||||
else
|
||||
Dcb->StopBits = ONESTOPBIT;
|
||||
}
|
||||
|
||||
/* success */
|
||||
|
@ -325,11 +322,11 @@ COMMDCB_PARAM_HANDLER(data)
|
|||
|
||||
/* parse the data bits */
|
||||
if(!COMMDCB_ParseInt(StrTail, &nValue))
|
||||
/* failure */
|
||||
return FALSE;
|
||||
|
||||
/* value out of range: failure */
|
||||
if(nValue < 5 || nValue > 8) return FALSE;
|
||||
if(nValue < 5 || nValue > 8)
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
Dcb->ByteSize = nValue;
|
||||
|
@ -341,8 +338,7 @@ COMMDCB_PARAM_HANDLER(dtr)
|
|||
{
|
||||
BOOL bRetVal;
|
||||
ULONG_PTR nValue;
|
||||
static COMMDCB_PARAM_STRFLAG a_DTRFlags[] =
|
||||
{
|
||||
static COMMDCB_PARAM_STRFLAG a_DTRFlags[] = {
|
||||
{ ROS_STRING_INITIALIZER(L"hs"), DTR_CONTROL_HANDSHAKE },
|
||||
{ ROS_STRING_INITIALIZER(L"off"), DTR_CONTROL_DISABLE },
|
||||
{ ROS_STRING_INITIALIZER(L"on"), DTR_CONTROL_ENABLE }
|
||||
|
@ -352,16 +348,14 @@ COMMDCB_PARAM_HANDLER(dtr)
|
|||
(void)StopBitsSet;
|
||||
|
||||
/* parse the flag */
|
||||
bRetVal = COMMDCB_ParseStrFlag
|
||||
(
|
||||
StrTail,
|
||||
bRetVal = COMMDCB_ParseStrFlag(StrTail,
|
||||
a_DTRFlags,
|
||||
sizeof(a_DTRFlags) / sizeof(a_DTRFlags[0]),
|
||||
&nValue
|
||||
);
|
||||
&nValue);
|
||||
|
||||
/* failure */
|
||||
if(!bRetVal) return FALSE;
|
||||
if(!bRetVal)
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
Dcb->fDtrControl = nValue;
|
||||
|
@ -378,7 +372,6 @@ COMMDCB_PARAM_HANDLER(idsr)
|
|||
|
||||
/* parse the flag */
|
||||
if(!COMMDCB_ParseBool(StrTail, &bValue))
|
||||
/* failure */
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
|
@ -396,7 +389,6 @@ COMMDCB_PARAM_HANDLER(octs)
|
|||
|
||||
/* parse the flag */
|
||||
if(!COMMDCB_ParseBool(StrTail, &bValue))
|
||||
/* failure */
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
|
@ -414,7 +406,6 @@ COMMDCB_PARAM_HANDLER(odsr)
|
|||
|
||||
/* parse the flag */
|
||||
if(!COMMDCB_ParseBool(StrTail, &bValue))
|
||||
/* failure */
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
|
@ -427,8 +418,7 @@ COMMDCB_PARAM_HANDLER(parity)
|
|||
{
|
||||
BOOL bRetVal;
|
||||
ULONG_PTR nValue;
|
||||
static COMMDCB_PARAM_CHARFLAG a_ParityFlags[] =
|
||||
{
|
||||
static COMMDCB_PARAM_CHARFLAG a_ParityFlags[] = {
|
||||
{ L'e', EVENPARITY },
|
||||
{ L'm', MARKPARITY },
|
||||
{ L'n', NOPARITY },
|
||||
|
@ -440,16 +430,14 @@ COMMDCB_PARAM_HANDLER(parity)
|
|||
(void)StopBitsSet;
|
||||
|
||||
/* parse the flag */
|
||||
bRetVal = COMMDCB_ParseCharFlag
|
||||
(
|
||||
StrTail,
|
||||
bRetVal = COMMDCB_ParseCharFlag(StrTail,
|
||||
a_ParityFlags,
|
||||
sizeof(a_ParityFlags) / sizeof(a_ParityFlags[0]),
|
||||
&nValue
|
||||
);
|
||||
&nValue);
|
||||
|
||||
/* failure */
|
||||
if(!bRetVal) return FALSE;
|
||||
if(!bRetVal)
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
Dcb->Parity = nValue;
|
||||
|
@ -461,8 +449,7 @@ COMMDCB_PARAM_HANDLER(rts)
|
|||
{
|
||||
DWORD nRetVal;
|
||||
ULONG_PTR nValue;
|
||||
static COMMDCB_PARAM_STRFLAG a_RTSFlags[] =
|
||||
{
|
||||
static COMMDCB_PARAM_STRFLAG a_RTSFlags[] = {
|
||||
{ ROS_STRING_INITIALIZER(L"hs"), RTS_CONTROL_HANDSHAKE },
|
||||
{ ROS_STRING_INITIALIZER(L"off"), RTS_CONTROL_DISABLE },
|
||||
{ ROS_STRING_INITIALIZER(L"on"), RTS_CONTROL_ENABLE },
|
||||
|
@ -473,16 +460,14 @@ COMMDCB_PARAM_HANDLER(rts)
|
|||
(void)StopBitsSet;
|
||||
|
||||
/* parse the flag */
|
||||
nRetVal = COMMDCB_ParseStrFlag
|
||||
(
|
||||
StrTail,
|
||||
nRetVal = COMMDCB_ParseStrFlag(StrTail,
|
||||
a_RTSFlags,
|
||||
sizeof(a_RTSFlags) / sizeof(a_RTSFlags[0]),
|
||||
&nValue
|
||||
);
|
||||
&nValue);
|
||||
|
||||
/* failure */
|
||||
if(!nRetVal) return FALSE;
|
||||
if(!nRetVal)
|
||||
return FALSE;
|
||||
|
||||
/* success */
|
||||
Dcb->fRtsControl = nValue;
|
||||
|
@ -494,8 +479,7 @@ COMMDCB_PARAM_HANDLER(stop)
|
|||
{
|
||||
BOOL bRetVal;
|
||||
ULONG_PTR nValue;
|
||||
static COMMDCB_PARAM_STRFLAG a_StopFlags[] =
|
||||
{
|
||||
static COMMDCB_PARAM_STRFLAG a_StopFlags[] = {
|
||||
{ ROS_STRING_INITIALIZER(L"1"), ONESTOPBIT },
|
||||
{ ROS_STRING_INITIALIZER(L"1.5"), ONE5STOPBITS },
|
||||
{ ROS_STRING_INITIALIZER(L"2"), TWOSTOPBITS }
|
||||
|
@ -504,16 +488,14 @@ COMMDCB_PARAM_HANDLER(stop)
|
|||
(void)Timeouts;
|
||||
|
||||
/* parse the flag */
|
||||
bRetVal = COMMDCB_ParseStrFlag
|
||||
(
|
||||
StrTail,
|
||||
bRetVal = COMMDCB_ParseStrFlag(StrTail,
|
||||
a_StopFlags,
|
||||
sizeof(a_StopFlags) / sizeof(a_StopFlags[0]),
|
||||
&nValue
|
||||
);
|
||||
&nValue);
|
||||
|
||||
/* failure */
|
||||
if(!bRetVal) return FALSE;
|
||||
if(!bRetVal)
|
||||
return FALSE;
|
||||
|
||||
/* tell the baud= handler that the stop bits have been specified explicitely */
|
||||
*StopBitsSet = TRUE;
|
||||
|
@ -533,7 +515,6 @@ COMMDCB_PARAM_HANDLER(to)
|
|||
|
||||
/* parse the flag */
|
||||
if(!COMMDCB_ParseBool(StrTail, &bValue))
|
||||
/* failure */
|
||||
return FALSE;
|
||||
|
||||
/* for BuildCommDCB(), Timeouts is NULL */
|
||||
|
@ -545,10 +526,16 @@ COMMDCB_PARAM_HANDLER(to)
|
|||
Timeouts->ReadTotalTimeoutConstant = 0;
|
||||
Timeouts->WriteTotalTimeoutMultiplier = 0;
|
||||
|
||||
if(bValue)
|
||||
{
|
||||
/* timeout */
|
||||
if(bValue) Timeouts->WriteTotalTimeoutConstant = 60000;
|
||||
Timeouts->WriteTotalTimeoutConstant = 60000;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* no timeout */
|
||||
else Timeouts->WriteTotalTimeoutConstant = 0;
|
||||
Timeouts->WriteTotalTimeoutConstant = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* success */
|
||||
|
@ -565,13 +552,18 @@ COMMDCB_PARAM_HANDLER(xon)
|
|||
|
||||
/* parse the flag */
|
||||
if(!COMMDCB_ParseBool(StrTail, &bValue))
|
||||
/* failure */
|
||||
return FALSE;
|
||||
|
||||
if(bValue)
|
||||
{
|
||||
/* XON/XOFF */
|
||||
if(bValue) Dcb->fInX = Dcb->fOutX = TRUE;
|
||||
Dcb->fInX = Dcb->fOutX = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* no XON/XOFF */
|
||||
else Dcb->fInX = Dcb->fOutX = FALSE;
|
||||
Dcb->fInX = Dcb->fOutX = FALSE;
|
||||
}
|
||||
|
||||
/* success */
|
||||
return TRUE;
|
||||
|
@ -580,7 +572,7 @@ COMMDCB_PARAM_HANDLER(xon)
|
|||
/* FUNCTIONS */
|
||||
#define COMMDCB_PARAM(__P__) \
|
||||
{ \
|
||||
ROS_STRING_INITIALIZER(_L(#__P__)), \
|
||||
ROS_STRING_INITIALIZER( L""#__P__ ), \
|
||||
(ULONG_PTR)&COMMDCB_ ## __P__ ## Param \
|
||||
}
|
||||
|
||||
|
@ -589,38 +581,33 @@ COMMDCB_PARAM_HANDLER(xon)
|
|||
*/
|
||||
BOOL
|
||||
STDCALL
|
||||
BuildCommDCBAndTimeoutsW
|
||||
(
|
||||
LPCWSTR lpDef,
|
||||
BuildCommDCBAndTimeoutsW(LPCWSTR lpDef,
|
||||
LPDCB lpDCB,
|
||||
LPCOMMTIMEOUTS lpCommTimeouts
|
||||
)
|
||||
LPCOMMTIMEOUTS lpCommTimeouts)
|
||||
{
|
||||
/* tell the baud= handler that the stop bits should be defaulted */
|
||||
BOOL bStopBitsSet = FALSE;
|
||||
|
||||
/* parameter validation */
|
||||
if(lpDCB->DCBlength != sizeof(DCB)) goto InvalidParam;
|
||||
if(lpDCB->DCBlength != sizeof(DCB))
|
||||
goto InvalidParam;
|
||||
|
||||
/* set defaults */
|
||||
lpDCB->StopBits = ONESTOPBIT;
|
||||
|
||||
/*
|
||||
The documentation for MODE says that data= defaults to 7, but BuildCommDCB
|
||||
doesn't seem to set it
|
||||
* The documentation for MODE says that data= defaults to 7, but BuildCommDCB
|
||||
* doesn't seem to set it
|
||||
*/
|
||||
/* lpDCB->ByteSize = 7; */
|
||||
|
||||
/* skip COMx[n] */
|
||||
if
|
||||
(
|
||||
lpDef[0] &&
|
||||
if(lpDef[0] &&
|
||||
towupper(lpDef[0]) == L'C' &&
|
||||
lpDef[1] &&
|
||||
towupper(lpDef[1]) == L'O' &&
|
||||
lpDef[2] &&
|
||||
towupper(lpDef[2]) == L'M'
|
||||
)
|
||||
towupper(lpDef[2]) == L'M')
|
||||
{
|
||||
DWORD nDummy;
|
||||
|
||||
|
@ -628,23 +615,26 @@ BuildCommDCBAndTimeoutsW
|
|||
lpDef += 3;
|
||||
|
||||
/* premature end of string */
|
||||
if(!lpDef[0]) goto InvalidParam;
|
||||
if(!lpDef[0])
|
||||
goto InvalidParam;
|
||||
|
||||
/* skip "x" */
|
||||
if(!COMMDCB_ParseInt((LPWSTR *)&lpDef, &nDummy)) goto InvalidParam;
|
||||
if(!COMMDCB_ParseInt((LPWSTR *)&lpDef, &nDummy))
|
||||
goto InvalidParam;
|
||||
|
||||
/* skip ":" */
|
||||
if(lpDef[0] == L':') ++ lpDef;
|
||||
if(lpDef[0] == L':')
|
||||
lpDef++;
|
||||
}
|
||||
|
||||
/* skip leading whitespace */
|
||||
while(lpDef[0] && iswspace(lpDef[0])) ++ lpDef;
|
||||
while(lpDef[0] && iswspace(lpDef[0]))
|
||||
lpDef++;
|
||||
|
||||
/* repeat until the end of the string */
|
||||
while(lpDef[0])
|
||||
{
|
||||
static COMMDCB_PARAM_STRFLAG a_Params[] =
|
||||
{
|
||||
static COMMDCB_PARAM_STRFLAG a_Params[] = {
|
||||
COMMDCB_PARAM(baud),
|
||||
COMMDCB_PARAM(data),
|
||||
COMMDCB_PARAM(dtr),
|
||||
|
@ -663,10 +653,12 @@ BuildCommDCBAndTimeoutsW
|
|||
LPWSTR pwcPrevTail = (LPWSTR)lpDef;
|
||||
|
||||
/* get the parameter */
|
||||
while(lpDef[0] && lpDef[0] != L'=') ++ lpDef;
|
||||
while(lpDef[0] && lpDef[0] != L'=')
|
||||
lpDef++;
|
||||
|
||||
/* premature end of string */
|
||||
if(!lpDef[0]) goto InvalidParam;
|
||||
if(!lpDef[0])
|
||||
goto InvalidParam;
|
||||
|
||||
/* build the parameter's UNICODE_STRING */
|
||||
wstrParam.Buffer = pwcPrevTail;
|
||||
|
@ -674,34 +666,31 @@ BuildCommDCBAndTimeoutsW
|
|||
wstrParam.MaximumLength = wstrParam.Length;
|
||||
|
||||
/* skip the "=" */
|
||||
++ lpDef;
|
||||
lpDef++;
|
||||
|
||||
/* lookup the callback for the parameter */
|
||||
bRetVal = COMMDCB_LookupStrFlag
|
||||
(
|
||||
&wstrParam,
|
||||
bRetVal = COMMDCB_LookupStrFlag(&wstrParam,
|
||||
a_Params,
|
||||
sizeof(a_Params) / sizeof(a_Params[0]),
|
||||
(ULONG_PTR *)&pCallback
|
||||
);
|
||||
(ULONG_PTR *)&pCallback);
|
||||
|
||||
/* invalid parameter */
|
||||
if(!bRetVal) goto InvalidParam;
|
||||
if(!bRetVal)
|
||||
goto InvalidParam;
|
||||
|
||||
/* call the callback to parse the parameter's argument */
|
||||
if(!pCallback(lpDCB, lpCommTimeouts, &bStopBitsSet, (LPWSTR *)&lpDef))
|
||||
/* failure */
|
||||
goto InvalidParam;
|
||||
|
||||
/* skip trailing whitespace */
|
||||
while(lpDef[0] && iswspace(lpDef[0])) ++ lpDef;
|
||||
while(lpDef[0] && iswspace(lpDef[0]))
|
||||
lpDef++;
|
||||
}
|
||||
|
||||
/* success */
|
||||
return TRUE;
|
||||
|
||||
InvalidParam:
|
||||
/* failure */
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -712,20 +701,22 @@ InvalidParam:
|
|||
*/
|
||||
BOOL
|
||||
STDCALL
|
||||
BuildCommDCBAndTimeoutsA(LPCSTR lpDef, LPDCB lpDCB, LPCOMMTIMEOUTS lpCommTimeouts)
|
||||
BuildCommDCBAndTimeoutsA(LPCSTR lpDef,
|
||||
LPDCB lpDCB,
|
||||
LPCOMMTIMEOUTS lpCommTimeouts)
|
||||
{
|
||||
NTSTATUS nErrCode;
|
||||
NTSTATUS Status;
|
||||
BOOL bRetVal;
|
||||
ANSI_STRING strDef;
|
||||
UNICODE_STRING wstrDef;
|
||||
|
||||
RtlInitAnsiString(&strDef, (LPSTR)lpDef);
|
||||
|
||||
nErrCode = RtlAnsiStringToUnicodeString(&wstrDef, &strDef, TRUE);
|
||||
Status = RtlAnsiStringToUnicodeString(&wstrDef, &strDef, TRUE);
|
||||
|
||||
if(!NT_SUCCESS(nErrCode))
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastErrorByStatus(nErrCode);
|
||||
SetLastErrorByStatus(Status);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue