void
post_data_write_to_fp(GArray *post_data, guint idx, FILE *fp)
{
    char buf[128 * 1024];
    struct post_data_item_s *pdi = &g_array_index(post_data, struct post_data_item_s, idx);

    if (pdi->file_ref != 0) {
        int fd = -1;
        if (ppb_flash_file_file_ref_open_file(pdi->file_ref, PP_FILEOPENFLAG_READ, &fd) != PP_OK) {
            // some error, skipping this one
            goto err;
        }

        size_t to_write = post_data_get_item_length(pdi);
        while (to_write > 0) {
            ssize_t read_bytes = RETRY_ON_EINTR(read(fd, buf, MIN(to_write, sizeof(buf))));
            if (read_bytes == -1)
                goto err;
            fwrite(buf, 1, (size_t)read_bytes, fp);
            to_write -= read_bytes;
        }
err:
        if (fd >= 0)
            close(fd);
    } else {
        fwrite(pdi->data, 1, pdi->len, fp);
    }
}
Exemplo n.º 2
0
// trace wrappers
static
int32_t
trace_ppb_flash_file_file_ref_open_file(PP_Resource file_ref_id, int32_t mode, PP_FileHandle *file)
{
    trace_info("[PPB] {zilch} %s\n", __func__+6);
    return ppb_flash_file_file_ref_open_file(file_ref_id, mode, file);
}