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); } }
// 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); }