176,7 → 176,6 |
int block_bb_read(dev_handle_t dev_handle, off_t off, size_t size) |
{ |
void *bb_buf; |
int rc; |
|
devcon_t *devcon = devcon_search(dev_handle); |
if (!devcon) |
189,11 → 188,10 |
|
off_t bufpos = 0; |
size_t buflen = 0; |
rc = block_read(dev_handle, &bufpos, &buflen, &off, |
bb_buf, size, size); |
if (rc != EOK) { |
if (!block_read(dev_handle, &bufpos, &buflen, &off, |
bb_buf, size, size)) { |
free(bb_buf); |
return rc; |
return EIO; /* XXX real error code */ |
} |
devcon->bb_buf = bb_buf; |
devcon->bb_off = off; |
221,9 → 219,9 |
* @param size Size of the destination buffer. |
* @param block_size Block size to be used for the transfer. |
* |
* @return EOK on success or a negative return code on failure. |
* @return True on success, false on failure. |
*/ |
int |
bool |
block_read(int dev_handle, off_t *bufpos, size_t *buflen, off_t *pos, void *dst, |
size_t size, size_t block_size) |
{ |
258,7 → 256,7 |
int rc = async_req_2_1(devcon->dev_phone, RD_READ_BLOCK, |
*pos / block_size, block_size, &retval); |
if ((rc != EOK) || (retval != EOK)) |
return (rc != EOK ? rc : retval); |
return false; |
|
*bufpos = 0; |
*buflen = block_size; |
265,7 → 263,7 |
} |
} |
|
return EOK; |
return true; |
} |
|
block_t *block_get(dev_handle_t dev_handle, off_t offset, size_t bs) |
287,8 → 285,8 |
} |
b->size = bs; |
|
if (block_read(dev_handle, &bufpos, &buflen, &pos, b->data, |
bs, bs) != EOK) { |
if (!block_read(dev_handle, &bufpos, &buflen, &pos, b->data, |
bs, bs)) { |
free(b->data); |
free(b); |
return NULL; |