Example #1
0
/* $begin rio_readlineb */
ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen) 
{
    int n, rc;
    char c, *bufp = usrbuf;
	char line[8192];
	
	while(strstr(line, "HTTP") == NULL)
	{
		for (n = 1; n < maxlen; n++) { 
		if ((rc = rio_read(rp, &c, 1)) == 1) {
			*bufp++ = c;
			line[n-1] = c;
			if (c == '\n')
			break;
		} else if (rc == 0) {
			if (n == 1)
			return 0; /* EOF, no data read */
			else
			break;    /* EOF, some data was read */
		} else
			return -1;	  /* error */
		}
		*bufp = 0;
	}
	if (strstr(line, "HTTP/1.1") == NULL)
	{
		
		for (n = 1; n < maxlen; n++) { 
		if ((rc = rio_read(rp, &c, 1)) == 1) {
			*bufp++ = c;
			line[n-1] = c;
			if (c == '\n')
			{
			break;}
		} else if (rc == 0) {
			if (n == 1)
			return 0; /* EOF, no data read */
			else
			break;    /* EOF, some data was read */
		} else
			return -1;	  /* error */
		}
		*bufp = 0;
		
		rio_read(rp, &c, 1);
		//rio_read(rp, &c, 1);
		
		
		return n;
	}
	
    return n;
}
Example #2
0
File: rio.c Project: songtzu/study
ssize_t rio_readlineb(rio_t* rp, void* usrbuf, size_t maxlen) {
  int n, rc;
  char c;
  char* bufp = usrbuf;

  for (n = 1; n < maxlen; ++n) {
    if (1 == (rc = rio_read(rp, &c, 1))) {
      *bufp++ = c;
      if ('\n' == c)
        break;
    }
    else if (0 == rc) {
      if (1 == n)
        return 0;
      else
        break;
    }
    else {
      return -1;
    }
  }

  *bufp = 0;

  return n;
}
Example #3
0
/*	Robustly read n bytes(buffered)	*/
ssize_t rio_readnb(rio_t *rp, void *usrbuf, size_t n)
{
	int rc, nleft;
	char *bufp = usrbuf;
	nleft = n;
	while( nleft > 0)
	{
		if ((rc = rio_read(rp, bufp, nleft)) < 0)
		{
			if(errno != EINTR)
				return -1;
			else 
				continue;
		}
		else if (rc == 0)
		{
			return 0;
		}
		else
		{
			bufp += rc;
			nleft -= rc;
		}
	}
	return n - nleft;
}
Example #4
0
ssize_t rio_readlineb(rio_t *rp,void *usrbuf,size_t maxlen)
{
	int n,rc;
	char c,*bufp = usrbuf;

	for(n = 1;n < maxlen; n++)
	{
		if((rc = rio_read(rp,&c,1)) == 1)
		{
			*bufp++ = c;
			if(c == '\n')
			{
				break;
			}
		}else if(rc == 0)
		{
			if(n == 1)
			{
				return 0;
			}else
			{
				break;
			}
		}else 
		{
			return -1;
		}
	}
	*bufp = 0;
	return n;
}
Example #5
0
ssize_t rio_readnb(rio_t *rp,void *usrbuf,size_t n)
{
	size_t nleft = n;
	ssize_t nread;
	char *bufp = usrbuf;

	while(nleft > 0)
	{
		if((nread = rio_read(rp,bufp,nleft)) < 0)
		{
			if(errno == EINTR)
			{
				nread = 0;
			}else
			{
				return -1;
			}
		}else if(nread == 0)
		{
			break;
		}

		nleft -= nread;
		bufp += nread;
	}
	return (n-nleft);
}
Example #6
0
File: rio.c Project: Zirconi/whd
ssize_t rio_readlineb(rio_t *rp, void *buf, size_t n)
{
    size_t i, ret;
    char c;
    char *bp = (char *)buf;
    for(i = 1; i < n; ++i)
    {
        if((ret = rio_read(rp, &c, 1)) == 1)
        {
            *bp++ = c;
            if(c == '\n')
                break;
        }
        else if(ret == 0)
        {
            if(i == 1)
                return 0;
            else break;
        }
        else
            return -1;
    }
    *bp = '\0';
    return i;
}
Example #7
0
/* $begin rio_readlineb */
ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen) 
{
    int n, rc;
    char c, *bufp = usrbuf;


    for (n = 1; n < maxlen; n++) { 
	if ((rc = rio_read(rp, &c, 1)) == 1) {
	    *bufp++ = c;
	    if (c == '\n')
			break;
	} else if (rc == 0) {
	    if (n == 1)
		{
			return 0; /* EOF, no data read */
		}
	    else
		{
			break;    /* EOF, some data was read */
		}
	}
	 else
	{
	    return -1;	  /* error */
    }
	}
    *bufp = 0;
    return n;
}
Example #8
0
ssize_t rio_readlineb(rio_t *rp, char *usrbuf, size_t maxlen)
{	/* read_one_line function WITH buffer */
	int n, rc;
	char c, *bufp = usrbuf;
	
	for (n = 1; n < maxlen; n++)
	{
		if ((rc = rio_read(rp, &c, 1)) == 1)
		{
			*bufp++ = c;
			if (c == '\n')
				break;
		}
		else if (rc == 0)
		{
			if (n == 1)
				return 0;	/* EOF, no data was read */
			else
				break;		/* EOF, some data was read */
		}
		else
		{
			return -1;		/* error */
		}
	}
	
	*bufp = 0;
	
	return n;
}
Example #9
0
static ssize_t Rio_read(rio_t *rp, char *usrbuf, size_t n)
{
	ssize_t rt;
	rt = rio_read(rp, usrbuf, n);
	if (rt == -1)
		unix_error("Rio_read error");
	return rt;
}
Example #10
0
/* $begin rio_readnb */
ssize_t rio_readnb(rio_t *rp, void *usrbuf, size_t n) 
{
    size_t nleft = n;
    ssize_t nread;
    char *bufp = usrbuf;
    
    while (nleft > 0) {
	if ((nread = rio_read(rp, bufp, nleft)) < 0) 
            return -1;          /* errno set by read() */ 
	else if (nread == 0)
	    break;              /* EOF */
	nleft -= nread;
	bufp += nread;
    }
    return (n - nleft);         /* return >= 0 */
}
Example #11
0
int Rio::rio_readn(void *usrbuf, int n)
{
	int nread;
	int nleft = n;
	char *bufp = (char*)usrbuf;
	while(nleft > 0)
	{
		if((nread = rio_read(bufp, nleft)) == -1)
			return -1;
		else if(nread == 0)
			return 0;
		nleft -= nread;
		bufp += nread;
	}
	return (n - nleft);
}
Example #12
0
ssize_t Rio::rio_readn(char *usrbuf, size_t n)
{
	ssize_t nread;
	size_t nleft = n;
	char *bufp = usrbuf;
	while(nleft > 0)
	{
		if((nread = rio_read(bufp, nleft)) == -1)
			return -1;
		else if(nread == 0)
			return 0;
		nleft -= nread;
		bufp += nread;
	}
	return (n - nleft);
}
/* $begin rio_readnb */
ssize_t rio_readnb(rio_t *rp, void *usrbuf, size_t n) {
	size_t nleft = n;
	ssize_t nread;
	char *bufp = usrbuf;

	while (nleft > 0) {
		if ((nread = rio_read(rp, bufp, nleft)) < 0) {
			if (errno == EINTR) /* interrupted by sig handler return */
				nread = 0; /* call read() again */
			else
				return -1; /* errno set by read() */
		} else if (nread == 0)
			break; /* EOF */
		nleft -= nread;
		bufp += nread;
	}
	return (n - nleft); /* return >= 0 */
}
Example #14
0
ssize_t rio_readline(rio_t *rp, char *usrbuf, size_t maxlen)
{
	ssize_t nread;
	char c;
	int i;
	for (i = 0; i < maxlen - 1; ++i) {
		nread = rio_read(rp, &c, 1);
		if (nread == -1) 
			return -1;
		else if (nread == 0) 
			break;
		//放入usrbuf
		*usrbuf++ = c;
		if (c == '\n')
			break;
	}
	*usrbuf = '\0';
	return i;
}
Example #15
0
ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen) {
  int n, rc;
  char c, *bufp = usrbuf;
  // copy at most maxlen - 1 bytes, the left 1 byte for null terminate ch
  for (n = 1; n < maxlen; ++n) {
    if ((rc = rio_read(rp, &c, 1)) == 1) {
      *bufp++ = c;
      if (c == '\n') {
        break;
      }
    } else if (rc == 0) {
      if (n == 1) return 0; // EOF, no data read
      else break;
    } else {
      return -1;
    }
  }
  *bufp = '\0';
  return n;
}
Example #16
0
ssize_t rio_readnb(rio_t *rp, void *usrbuf, size_t n)
{
	size_t nleft = n;
	size_t nread;
	char *bufp = (char*)usrbuf;

	while (nleft > 0)
	{
		if ((nread = rio_read(rp, bufp, nleft)) < 0)
			if (errno == EINTR)
				nread = 0;
			else
				return -1;
		else if (nread == 0)
			break;
		nleft -= nread;
		bufp += nread;
	}
	return (n - nleft);
}
Example #17
0
/* $begin rio_readlineb */
ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen)
{
    int n, rc;
    char c, *bufp = usrbuf;

    n = 0;

    while (n < maxlen-1) {
        if ((rc = rio_read(rp, &c, 1)) == 1) {
            n++;
            *bufp++ = c;
            if (c == '\n')
                break;
        } else if (rc == 0) {
            break;    /* EOF */
        } else
            return -1;	  /* error */
    }
    *bufp = 0;
    return n;
}
Example #18
0
ssize_t rio_readnb(rio_t *rio_ptr, void *buf, size_t n) {
  size_t nleft = n;
  ssize_t nread;
  char *bufptr = buf;

  while (nleft > 0) {
    nread = rio_read(rio_ptr, bufptr, nleft);
    if (nread < 0) {
      if (errno == EINTR) {
        nread = 0;
      } else {
        return -1;
      }
    } else if (nread == 0) {
      break;
    }
    nleft -= nread;
    bufptr += nread;
  }
  return (n - nleft);
}
Example #19
0
File: rio.c Project: songtzu/study
ssize_t rio_readnb(rio_t* rp, void* usrbuf, size_t n) {
  size_t nleft = 0;
  ssize_t nread;
  char* bufp = usrbuf;

  while (nleft > 0) {
    if ((nread = rio_read(rp, bufp, nleft)) < 0) {
      if (EINTR == errno)
        nread = 0;
      else
        return -1;
    }
    else if (0 == nread) {
      break;
    }

    nleft -= nread;
    bufp += nread;
  }

  return (n - nleft);
}
ssize_t rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen)
{
    size_t n;
    char *bufp = usrbuf;

    for (n = 1; n < maxlen; n++) {
    	ssize_t rc = rio_read(rp, bufp, 1);
    if (rc < 0)
        return -1;          /* errno set by read(), give up */
    if (rc == 0) {
        if (n == 1)
        	return 0;         /* EOF, no data read */
    	else
        	break;            /* EOF, some data was read */
    }
    if (*bufp++ == '\n')  /* read() success, 0 < rc <= 1 */
        break;
 	}
  	*bufp = '\0';

  	return n;
}
Example #21
0
ssize_t
rio_readlineb(rio_t *rp, void *usrbuf, size_t maxlen)
{
	int n, rc;
	char c, *bufp = usrbuf;
	//要加入\0 所以要留一个
	for(n = 1; n < maxlen ; n++){
		if((rc = rio_read(rp, &c, 1)) == 1){
			*bufp++ = c;
			if(c == '\n')
				break;
		} else if (rc == 0) {
			if(n == 1)	
				return 0;	//空字符串
			else 
				break;
		} else  
			return -1;
	}

	*bufp = 0;
	return n;
}
Example #22
0
ssize_t Rio::rio_readLine(char *usrbuf, size_t maxlen)
{
	char *bufp = usrbuf;
	char c;
	ssize_t nread;
	int i;
	for (i = 0; i < maxlen - 1; i++) 
	{
		if((nread = rio_read(&c, 1)) == -1)
			return -1;
		else if(nread == 0)
		{
			if(i == 0)
				return 0;
			break;
		}
		*bufp++ = c;
		if(c == '\n')
			break;
	}
	*bufp = '\0';
	return i;
}
Example #23
0
int Rio::rio_readline(void *usrbuf, int maxlen)
{
	char *bufp = (char*)usrbuf;
	char c;
	int nread;
	int i;
	for (i = 0; i < maxlen - 1; i++) 
	{
		if((nread = rio_read(&c, 1)) == -1)
			return -1;
		else if(nread == 0)
		{
			if(i == 0)
				return 0;
			break;
		}
		*bufp++ = c;
		if(c == '\n')
			break;
	}
	*bufp = '\0';
	return i;
}
Example #24
0
ssize_t rio_readnb(rio_t *rp, char *usrbuf, size_t n)
{	/* read function WITH buffer */
	size_t nleft = n;
	ssize_t nread;
	char *bufp = usrbuf;
	
	while (nleft > 0)
	{
		if ((nread = rio_read(rp, bufp, nleft)) < 0)
		{
			return -1;			/* error set by read() */
		}
		else if (nread == 0)
		{
			break;				/* EOF */
		}
		
		nleft -= nread;
		bufp += nread;
	}
	
	return n -nleft;			/* retun >= 0 */
}
Example #25
0
ssize_t rio_readlineb(rio_t *rio_ptr, void *buf, size_t maxlen) {
  int n, ret;
  char c, *bufptr = buf;

  for (n = 1; n < maxlen; ++n) {
    ret = rio_read(rio_ptr, &c, 1);
    if (ret == 1) {
      *bufptr++ = c;
      if (c == '\n') {
        break;
      }
    } else if (ret == 0) {
      if (n == 1) {
        return 0;
      } else {
        break;
      }
    } else {
      return ret;
    }
  }
  *bufptr = 0;
  return n;
}
Example #26
0
ssize_t rio_readn(rio_t *rp, void *buf, size_t count)
{
	size_t nleft = count;	//剩余没有读取的字节数
	ssize_t nread = 0;	//接收读取返回值
	char *bufp = (char *)buf;	//缓冲区的偏移量

	while (nleft > 0) {
		//不再使用系统read调用
		nread = rio_read(rp, bufp, nleft);
		if (nread == -1) {
			if (errno == EINTR) 
				continue;
			return -1;
		} 
		else if (nread == 0) {
			break;
		}

		nleft -= nread;
		bufp += nread;
	}

	return count - nleft; 
}