cb, cb_ctx);
}
-#ifndef __WIN32__
/* This function handles reading stream data that is located in an external
* file, such as a file that has been added to the WIM image through execution
* of a wimlib_add_command.
DEBUG("Reading %"PRIu64" bytes from \"%"TS"\"", size, lte->file_on_disk);
- raw_fd = open(lte->file_on_disk, O_BINARY | O_RDONLY);
+ raw_fd = topen(lte->file_on_disk, O_BINARY | O_RDONLY);
if (raw_fd < 0) {
ERROR_WITH_ERRNO("Can't open \"%"TS"\"", lte->file_on_disk);
return WIMLIB_ERR_OPEN;
filedes_close(&fd);
return ret;
}
-#endif /* !__WIN32__ */
/* This function handles the trivial case of reading stream data that is, in
* fact, already located in an in-memory buffer. */
{
static const read_stream_prefix_handler_t handlers[] = {
[RESOURCE_IN_WIM] = read_wim_stream_prefix,
- #ifdef __WIN32__
- [RESOURCE_IN_FILE_ON_DISK] = read_win32_file_prefix,
- #else
[RESOURCE_IN_FILE_ON_DISK] = read_file_on_disk_prefix,
- #endif
[RESOURCE_IN_ATTACHED_BUFFER] = read_buffer_prefix,
#ifdef WITH_FUSE
[RESOURCE_IN_STAGING_FILE] = read_file_on_disk_prefix,
[RESOURCE_IN_NTFS_VOLUME] = read_ntfs_file_prefix,
#endif
#ifdef __WIN32__
+ [RESOURCE_IN_WINNT_FILE_ON_DISK] = read_winnt_file_prefix,
[RESOURCE_WIN32_ENCRYPTED] = read_win32_encrypted_file_prefix,
#endif
};
wimlib_assert(size <= ctx->cur_stream->size - ctx->cur_stream_offset);
if (ctx->cur_stream_offset == 0) {
+ u32 flags;
+
/* Starting a new stream. */
DEBUG("Begin new stream (size=%"PRIu64").",
ctx->cur_stream->size);
- ret = (*ctx->cbs.begin_stream)(ctx->cur_stream, true,
+
+ flags = BEGIN_STREAM_FLAG_PARTIAL_RESOURCE;
+ if (size == ctx->cur_stream->size)
+ flags |= BEGIN_STREAM_FLAG_WHOLE_STREAM;
+ ret = (*ctx->cbs.begin_stream)(ctx->cur_stream,
+ flags,
ctx->cbs.begin_stream_ctx);
if (ret)
return ret;
/* Callback for starting to read a stream while calculating its SHA1 message
* digest. */
static int
-hasher_begin_stream(struct wim_lookup_table_entry *lte, bool is_partial_res,
+hasher_begin_stream(struct wim_lookup_table_entry *lte, u32 flags,
void *_ctx)
{
struct hasher_context *ctx = _ctx;
if (ctx->cbs.begin_stream == NULL)
return 0;
else
- return (*ctx->cbs.begin_stream)(lte, is_partial_res,
+ return (*ctx->cbs.begin_stream)(lte, flags,
ctx->cbs.begin_stream_ctx);
}
{
int ret;
- ret = (*cbs->begin_stream)(lte, false, cbs->begin_stream_ctx);
+ ret = (*cbs->begin_stream)(lte, 0, cbs->begin_stream_ctx);
if (ret)
return ret;
.consume_chunk_ctx = &hasher_ctx,
.end_stream = hasher_end_stream,
.end_stream_ctx = &hasher_ctx,
-
};
return read_full_stream_with_cbs(lte, &hasher_cbs);
}