Stefan Fuhrmann wrote on Mon, Apr 05, 2021 at 21:17:23 +0200:
> +++ status.c (working copy)
> @@ -1123,15 +1288,15 @@
> if (depth == svn_depth_infinity
> && info->has_descendants /* is dir, or was dir and tc descendants
> */)
> {
> - SVN_ERR(get_dir_status(wb, local_abspath, TRUE,
> - dir_repos_root_url, dir_repos_relpath,
> - dir_repos_uuid, info,
> - dirent, ignore_patterns,
> - svn_depth_infinity, get_all,
> - no_ignore,
> - status_func, status_baton,
> - cancel_func, cancel_baton,
> - scratch_pool));
> + SVN_ERR(wb->dir_status_func(wb, local_abspath, TRUE,
> + dir_repos_root_url, dir_repos_relpath,
> + dir_repos_uuid, info,
> + dirent, ignore_patterns,
> + svn_depth_infinity, get_all,
> + no_ignore,
> + status_func, status_baton,
> + cancel_func, cancel_baton,
> + scratch_pool));
It's unusual for a call to wb->dir_status_func not to pass
wb->dir_status_baton.
Here are the callsites:
> @@ -2644,6 +3138,8 @@
> + wb.dir_status_func = get_dir_status;
> + wb.dir_status_baton = NULL;
This callsite doesn't care about the baton.
> +static svn_error_t *
> +get_dir_status_process(void **result,
> + svn_task__t *task,
> + void *thread_context,
> + void *process_baton,
> + svn_cancel_func_t cancel_func,
> + void *cancel_baton,
> + apr_pool_t *result_pool,
> + apr_pool_t *scratch_pool)
> +{
⋮
> + wb->dir_status_func = create_dir_status_task;
> + wb->dir_status_baton = &status_baton;
> +
> + SVN_ERR(get_dir_status(wb, baton->local_abspath,
⋮
> + add_status_result,
> + &status_baton,
> + cancel_func,
> + cancel_baton,
> + scratch_pool));
This callsite doesn't care about wb->dir_status_baton not being passed,
because wb itself is passed. Furthermore, the value of the baton is
also passed as add_status_result's baton.
So, I'm guessing it all works, but it's not the func/baton pattern the
struct member names imply it to be.
Cheers,
Daniel
> +}