Beispiel #1
0
int storage_file_write(struct storage_msg *msg,
                       const void *r, size_t req_len)
{
    int rc;
    const struct storage_file_write_req *req = r;

    if (req_len < sizeof(*req)) {
        ALOGE("%s: invalid request length (%zd < %zd)\n",
              __func__, req_len, sizeof(*req));
        msg->result = STORAGE_ERR_NOT_VALID;
        goto err_response;
    }

    int fd = lookup_fd(req->handle, true);
    if (write_with_retry(fd, &req->data[0], req_len - sizeof(*req),
                         req->offset) < 0) {
        rc = errno;
        ALOGW("%s: error writing file (fd=%d): %s\n",
              __func__, fd, strerror(errno));
        msg->result = translate_errno(rc);
        goto err_response;
    }

    msg->result = STORAGE_NO_ERROR;

err_response:
    return ipc_respond(msg, NULL, 0);
}
Beispiel #2
0
ssize_t writev_with_retry(int fd, const struct iovec *iov, size_t ic) 
{
    ssize_t len = 0;
    int i = 0;
    for(i=0; i<ic; ++i)
    {
        write_with_retry(fd, iov[i].iov_base, iov[i].iov_len); 
        len += iov[i].iov_len;
        if(PlaybackDieNow(0))
        {
            return -1;
        }
    }
    return len;
}