static int pscom_psm_do_read(pscom_con_t *con) { pspsm_con_info_t *ci = con->arch.psm.ci; /* old request outstanding? */ if (ci->rbuf) return 0; /* post a new request */ pscom_read_get_buf_locked(con, &ci->rbuf, &ci->rbuflen); int ret = pspsm_recvlook(ci); if (ret == -EPIPE) goto err; assert(ret == -EAGAIN); return 0; err: errno = -ret; pscom_con_error(con, PSCOM_OP_READ, PSCOM_ERR_STDERROR); return 1; }
static int pscom_psm_do_read(pscom_con_t *con) { pspsm_con_info_t *ci = con->arch.psm.ci; char *rbuf; /**< buffer to be used for next receive */ size_t rbuflen; /**< size of buffer */ /* old request outstanding? */ if (pspsm_recv_pending(ci)) return 0; /* post a new request */ pscom_read_get_buf_locked(con, &rbuf, &rbuflen); int ret = pspsm_recv_start(ci, rbuf, rbuflen); if (ret) goto err; return 0; err: errno = -ret; pscom_con_error(con, PSCOM_OP_READ, PSCOM_ERR_STDERROR); return 1; }