static void flash_buf(const char *pname, struct fastboot_buffer *buf) { sparse_file** s; switch (buf->type) { case FB_BUFFER_SPARSE: s = reinterpret_cast<sparse_file**>(buf->data); while (*s) { int64_t sz64 = sparse_file_len(*s, true, false); fb_queue_flash_sparse(pname, *s++, sz64); } break; case FB_BUFFER: fb_queue_flash(pname, buf->data, buf->sz); break; default: die("unknown buffer type: %d", buf->type); } }
void do_flash(transport_t *trans, const char *pname, const char *fname) { int64_t sz64; void *data; int64_t limit; sz64 = file_size(fname); limit = get_sparse_limit(trans, sz64); if (limit) { struct sparse_file **s = load_sparse_files(fname, limit); if (s == NULL) { die("cannot sparse load '%s'\n", fname); } while (*s) { sz64 = sparse_file_len(*s, true, false); fb_queue_flash_sparse(pname, *s++, sz64); } } else { unsigned int sz; data = load_file(fname, &sz); if (data == 0) die("cannot load '%s': %s\n", fname, strerror(errno)); fb_queue_flash(pname, data, sz); } }