X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fverify.c;h=41fcff789919f1b60a0e888ad3598a8a21fb4e37;hb=88afc46984c143cbf928a3186f8cc93d819e9269;hp=81aa96d085fdf5e3ded1718af6d44115c05c4f7a;hpb=3de1ec66f778edda19865482d685bc6f4e17faf7;p=wimlib diff --git a/src/verify.c b/src/verify.c index 81aa96d0..41fcff78 100644 --- a/src/verify.c +++ b/src/verify.c @@ -47,54 +47,35 @@ struct verify_blob_list_ctx { }; static int -end_verify_blob(struct blob_descriptor *blob, int status, void *_ctx) +verify_continue_blob(const struct blob_descriptor *blob, u64 offset, + const void *chunk, size_t size, void *_ctx) { struct verify_blob_list_ctx *ctx = _ctx; union wimlib_progress_info *progress = ctx->progress; - if (status) - return status; + if (offset + size == blob->size) + progress->verify_streams.completed_streams++; - progress->verify_streams.completed_streams++; - progress->verify_streams.completed_bytes += blob->size; + progress->verify_streams.completed_bytes += size; - /* Handle rate-limiting of progress messages */ + if (progress->verify_streams.completed_bytes >= ctx->next_progress) { - if (progress->verify_streams.completed_bytes < ctx->next_progress) - return 0; - - /* Time for another progress message. */ - - status = call_progress(ctx->progfunc, WIMLIB_PROGRESS_MSG_VERIFY_STREAMS, - progress, ctx->progctx); - if (status) - return status; + int ret = call_progress(ctx->progfunc, + WIMLIB_PROGRESS_MSG_VERIFY_STREAMS, + progress, ctx->progctx); + if (ret) + return ret; - if (ctx->next_progress == progress->verify_streams.total_bytes) { - ctx->next_progress = ~(uint64_t)0; - return 0; + set_next_progress(progress->verify_streams.completed_bytes, + progress->verify_streams.total_bytes, + &ctx->next_progress); } - - /* Send new message as soon as another 1/128 of the total has - * been verified. (Arbitrary number.) */ - ctx->next_progress = progress->verify_streams.completed_bytes + - progress->verify_streams.total_bytes / 128; - - /* ... Unless that would be more than 5000000 bytes, in which case send - * the next after the next 5000000 bytes. (Another arbitrary number.) */ - if (progress->verify_streams.completed_bytes + 5000000 < ctx->next_progress) - ctx->next_progress = progress->verify_streams.completed_bytes + 5000000; - - /* ... But always send a message as soon as we're completely - * done. */ - if (progress->verify_streams.total_bytes < ctx->next_progress) - ctx->next_progress = progress->verify_streams.total_bytes; return 0; } static int -verify_image_blobs_present(struct wim_image_metadata *imd, - struct blob_table *blob_table) +verify_file_data_present(struct wim_image_metadata *imd, + struct blob_table *blob_table) { struct wim_inode *inode; int ret; @@ -116,9 +97,9 @@ wimlib_verify_wim(WIMStruct *wim, int verify_flags) union wimlib_progress_info progress; struct verify_blob_list_ctx ctx; struct blob_descriptor *blob; - struct read_blob_list_callbacks cbs = { - .end_blob = end_verify_blob, - .end_blob_ctx = &ctx, + struct read_blob_callbacks cbs = { + .continue_blob = verify_continue_blob, + .ctx = &ctx, }; /* Check parameters */ @@ -150,8 +131,8 @@ wimlib_verify_wim(WIMStruct *wim, int verify_flags) if (ret) return ret; - ret = verify_image_blobs_present(wim_get_current_image_metadata(wim), - wim->blob_table); + ret = verify_file_data_present(wim_get_current_image_metadata(wim), + wim->blob_table); if (ret) return ret;