Major update:

- General bug fixes
- Implement search for multi-character marker search in BufferCore
  Replaced FindChar() method with FindStr() method
- Implemented LocalIO and LinkedIO in FunctionCore
- Connect LocalIO with FD in SelectableCore
- Implement Write buffer with Write Select in SelectableCore
- Improve validation checks in SelectableCore
- Use Handle ptr instead of Handle Names for Config methods
This commit is contained in:
Charl Wentzel
2016-05-25 14:17:40 +02:00
parent e83c09ecb6
commit 9ace97c1a3
6 changed files with 439 additions and 157 deletions

View File

@@ -243,7 +243,7 @@ int CBuffer::ReadFromFD( int Handle, int MaxRead )
// Read from file descriptor
BufRemain = BufSize - BufEnd;
BytesRead = read( Handle, &Buffer[BufEnd], ((BufRemain > DataRemain)? DataRemain : BufRemain) );
if (BytesRead < 0)
if (BytesRead <= 0)
break;
// Update Buffer Pointers
@@ -283,7 +283,7 @@ int CBuffer::WriteToFD( int Handle, int MaxLen )
// Read Data into buffer
ReadPos = BufStart;
DataRemain = (MaxLen == -1)? BufLen : MaxLen;
while ((TotalWritten < MaxLen) && (BufLen > 0))
while (DataRemain)
{
// Read from file descriptor
BufRemain = BufSize - ReadPos;
@@ -336,10 +336,12 @@ char CBuffer::PeekChar( int Pos, bool ClearChar )
//---------------------------------------------------------------------------
// Look for first occurrence of character in buffer
bool CBuffer::FindChar( char SearchChar, int &FoundPos, int StartPos )
bool CBuffer::FindStr( const char * SearchStr, int SearchLen, int &FoundPos, int StartPos )
{
char * CheckPos;
char * Limit;
char * CheckPos = NULL;
char * CheckLimit = NULL;
char * MatchPos = NULL;
char * MatchLimit = NULL;
// Check if buffer exists
if (!BufLen) {
@@ -353,24 +355,35 @@ bool CBuffer::FindChar( char SearchChar, int &FoundPos, int StartPos )
return false;
}
// Get Search start point
if (BufStart + StartPos < BufSize) {
CheckPos = &Buffer[ BufStart+StartPos ];
} else {
CheckPos = &Buffer[ (BufStart+StartPos)-BufSize ];
}
// Get Search start point and limit
CheckPos = (BufStart + StartPos < BufSize)? &Buffer[ BufStart+StartPos ] : &Buffer[ (BufStart+StartPos)-BufSize ];
CheckLimit = &Buffer[BufSize-1];
// Set Match start point and limit
MatchPos = (char*)SearchStr;
MatchLimit = (char*)&SearchStr[SearchLen-1];
// Search for char
FoundPos = StartPos;
Limit = &Buffer[BufSize-1];
while (FoundPos < BufLen)
{
if (*CheckPos == SearchChar)
return true;
// Check if char match
if (*CheckPos == *MatchPos) {
if (MatchPos == MatchLimit)
// Full match found
return true;
else
// Next char to match
MatchPos++;
}
else {
// Reset match point
MatchPos = (char*)SearchStr;
}
// Next char
FoundPos++;
if (CheckPos == Limit) {
if (CheckPos == CheckLimit) {
CheckPos = Buffer; // Roll-over, Start at beginning of buffer
} else {
CheckPos++;