コード例 #1
0
ファイル: dal.c プロジェクト: thewacokid/marfs
ssize_t mc_get(DAL_Context* ctx, char* buf, size_t size) {
   ENTRY();

   ssize_t       size_read;
   ObjectStream* os     = MC_OS(ctx);

   if(! (os->flags & OSF_OPEN)) {
      errno = EBADF;
      LOG(LOG_ERR, "Attempted get on OS that is not open.\n");
   }

   ne_handle handle = MC_HANDLE(ctx);

   // context->chunk_offset tracks the offset we are reading at within
   // the object.
   size_read = ne_read(handle, buf, size, MC_CONTEXT(ctx)->chunk_offset);

   if(size_read < 0) {
      LOG(LOG_ERR, "ne_read() failed.\n");
      return -1;
   }
   else if(size_read == 0) { // EOF
      os->flags |= OSF_EOF;
   }

   // update the offset for the next call to read.
   MC_CONTEXT(ctx)->chunk_offset += size_read;
   os->written += size_read;

   EXIT();
   return size_read;
}
コード例 #2
0
ファイル: ne_socket.c プロジェクト: dveeden/Prestan
static ssize_t read_raw(ne_socket *sock, char *buffer, size_t len)
{
    ssize_t ret;
    
    ret = readable_raw(sock, sock->rdtimeout);
    if (ret) return ret;

    do {
	ret = ne_read(sock->fd, buffer, len);
    } while (ret == -1 && NE_ISINTR(ne_errno));

    if (ret == 0) {
	set_error(sock, _("Connection closed"));
	ret = NE_SOCK_CLOSED;
    } else if (ret < 0) {
	int errnum = ne_errno;
	ret = NE_ISRESET(errnum) ? NE_SOCK_RESET : NE_SOCK_ERROR;
	set_strerror(sock, errnum);
    }

    return ret;
}