Corrected test version of NETReadTillTermNew M.Z.

This commit is contained in:
cvs
2004-08-09 09:03:33 +00:00
parent fe7413471a
commit d2661c83ed

View File

@ -361,7 +361,7 @@ CreateSocketAdress(
iRet = send(self->sockid,buffer,lLen,0);
if(iRet != lLen)
{
printf("Incomplete send: %d to %d\n ",iRet,lLen);
printf("Incomplete send: %d to %d\n",iRet,lLen);
if(iRet < 0)
{
printf("System error: %s\n",strerror(errno));
@ -389,7 +389,8 @@ CreateSocketAdress(
if(timeout > 0)
{
/* setup for select first */
tmo.tv_usec = timeout;
tmo.tv_usec = timeout % 1000000;
tmo.tv_sec = timeout / 1000000;
FD_ZERO(&lMask);
FD_SET(self->sockid,&lMask);
if((self->sockid >= FD_SETSIZE) || (self->sockid < 0) ) /* invalid descriptor */
@ -435,7 +436,8 @@ CreateSocketAdress(
}
/* setup for select */
tmo.tv_usec = timeout;
tmo.tv_usec = timeout % 1000000;
tmo.tv_sec = timeout / 1000000;
FD_ZERO(&lMask);
FD_SET(self->sockid,&lMask);
if((self->sockid >= FD_SETSIZE) || (self->sockid < 0) )
@ -457,27 +459,11 @@ CreateSocketAdress(
return 0;
}
}
/*------------------------------------------------------------------------*/
static int findTerm(char *buffer, char *term)
{
int i, j;
for(i = 0; i < strlen(buffer); i++)
{
for(j = 0; j < strlen(term); j++)
{
if(buffer[i] == term[j])
{
return i;
}
}
}
return -1;
}
/*-------------------------------------------------------------------------*/
int NETReadTillTermNew(mkChannel *self, int timeout,
char *pTerm, char *pBuffer, int iBufLen)
{
time_t maxTime;
time_t maxTime, now;
int bufPtr = 0, status, i, length;
char c;
@ -489,28 +475,19 @@ int NETReadTillTermNew(mkChannel *self, int timeout,
maxTime = time(NULL) + (time_t)ceil((double)timeout/1000);
length = strlen(pTerm);
memset(pBuffer,0,iBufLen);
while(time(NULL) < maxTime)
{
/*
is data available
*/
status = NETAvailable(self,5);
if(status < 0)
status = NETAvailable(self,timeout*1000); /* first time: full timeout */
if(status <= 0) /* return on error or on timeout */
{
return status;
}
if(status == 0)
while (status > 0)
{
continue;
}
status = recv(self->sockid,&c,1,0);
if(status < 0)
{
return status;
}
/*
printf("Read char %c\n",c);
*/
for(i = 0; i < length; i++)
{
if(c == pTerm[i])
@ -518,13 +495,29 @@ int NETReadTillTermNew(mkChannel *self, int timeout,
return 1;
}
}
if(iBufLen - bufPtr > 0)
if(c != 0) /* skip null characters */
{
if(bufPtr >= iBufLen-1)
{
return -1; /* overflow */
}
pBuffer[bufPtr] = c;
bufPtr++;
}
}
/*
wait for more data
*/
status = NETAvailable(self,1); /* minimal timeout */
while (status == 0)
{
if(time(NULL) > maxTime)
{
return 0; /* timeout */
}
status = NETAvailable(self,100000); /* 0.1 s timeout */
};
};
return status;
}
/*--------------------------------------------------------------------------
This old version may be removed in some stage. It has two problems: