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

> +}

Reply via email to