示例#1
0
static int
_streamref_readdelim (struct _mu_stream *str, char *buf, size_t bufsize,
		      int delim, size_t *pnread)
{
  struct _mu_streamref *sp = (struct _mu_streamref *)str;
  int rc;
  size_t nread;
  mu_off_t off;
  
  rc = mu_stream_seek (sp->transport, sp->offset, MU_SEEK_SET, &off);
  if (rc == 0)
    {
      rc = mu_stream_readdelim (sp->transport, buf, bufsize, delim, &nread);
      if (rc == 0)
	{
	  if (sp->end)
	    {
	      size_t size = sp->end - off + 1;
	      if (nread > size)
		nread = size;
	    }
	  sp->offset += nread;
	  *pnread = nread;
	}
    }
  else if (rc == ESPIPE)
    {
      *pnread = 0;
      mu_stream_clearerr (sp->transport);
      return 0;
    }
  return streamref_return (sp, rc);
}
示例#2
0
static int
_iostream_readdelim (struct _mu_stream *str, char *buf, size_t bufsize,
		    int delim, size_t *pnread)
{
  struct _mu_iostream *sp = (struct _mu_iostream *)str;
  int rc = mu_stream_readdelim (sp->transport[_MU_STREAM_INPUT], buf,
				bufsize, delim, pnread);
  if (rc)
    sp->last_err_str = _MU_STREAM_INPUT;
  return rc;
}