void ICVM_IceTransRead(void){ R_R0=_IceTransRead( (ciptr)rSTKs32(0), (char *)rSTKs32(1), rSTKs32(2) ); icvm_SetErr(); }
Status _IceRead ( register IceConn iceConn, unsigned long nbytes, register char *ptr ) { register unsigned long nleft; nleft = nbytes; while (nleft > 0) { int nread; if (iceConn->io_ok) nread = _IceTransRead (iceConn->trans_conn, ptr, (int) nleft); else return (1); if (nread <= 0) { #ifdef WIN32 errno = WSAGetLastError(); #endif if (iceConn->want_to_close) { /* * We sent a WantToClose message and now we detected that * the other side closed the connection. */ _IceConnectionClosed (iceConn); /* invoke watch procs */ _IceFreeConnection (iceConn); return (0); } else { /* * Fatal IO error. First notify each protocol's IceIOErrorProc * callback, then invoke the application IO error handler. */ iceConn->io_ok = False; if (iceConn->connection_status == IceConnectPending) { /* * Don't invoke IO error handler if we are in the * middle of a connection setup. */ return (1); } if (iceConn->process_msg_info) { int i; for (i = iceConn->his_min_opcode; i <= iceConn->his_max_opcode; i++) { _IceProcessMsgInfo *process; process = &iceConn->process_msg_info[ i - iceConn->his_min_opcode]; if ((process != NULL) && process->in_use) { IceIOErrorProc IOErrProc = process->accept_flag ? process->protocol->accept_client->io_error_proc : process->protocol->orig_client->io_error_proc; if (IOErrProc) (*IOErrProc) (iceConn); } } } (*_IceIOErrorHandler) (iceConn); return (1); } } nleft -= nread; ptr += nread; } return (1); }