+read_staging_file_prefix(const struct blob_descriptor *blob, u64 size,
+ consume_data_callback_t cb, void *cb_ctx)
+{
+ int raw_fd;
+ struct filedes fd;
+ int ret;
+
+ wimlib_assert(size <= blob->size);
+
+ DEBUG("Reading %"PRIu64" bytes from staging file \"%s\"",
+ size, blob->staging_file_name);
+
+ raw_fd = openat(blob->staging_dir_fd, blob->staging_file_name,
+ O_RDONLY | O_NOFOLLOW);
+ if (raw_fd < 0) {
+ ERROR_WITH_ERRNO("Can't open staging file \"%s\"",
+ blob->staging_file_name);
+ return WIMLIB_ERR_OPEN;
+ }
+ filedes_init(&fd, raw_fd);
+ ret = read_raw_file_data(&fd, 0, size, cb, cb_ctx);
+ filedes_close(&fd);
+ return ret;
+}
+#endif
+
+/* This function handles the trivial case of reading blob data that is, in fact,
+ * already located in an in-memory buffer. */
+static int
+read_buffer_prefix(const struct blob_descriptor *blob,