Re: svn commit: r1917050 - in /apr/apr/trunk: CHANGES crypto/apr_crypto.c dbd/apr_dbd.c dbm/apr_dbm.c include/private/apu_internal.h util-misc/apu_dso.c

Ruediger Pluem <[email protected]>
Newsgroups gmane.comp.apache.apr.devel
Message-ID <[email protected]>

On 4/16/24 11:33 PM, [email protected] wrote:
> Author: minfrin
> Date: Tue Apr 16 21:33:58 2024
> New Revision: 1917050
> 
> URL: http://svn.apache.org/viewvc?rev=1917050&view=rev
> Log:
> Pass details of module loading errors back to the caller through the
> apu_err_t structure.
> 
> Modified:
>     apr/apr/trunk/CHANGES
>     apr/apr/trunk/crypto/apr_crypto.c
>     apr/apr/trunk/dbd/apr_dbd.c
>     apr/apr/trunk/dbm/apr_dbm.c
>     apr/apr/trunk/include/private/apu_internal.h
>     apr/apr/trunk/util-misc/apu_dso.c
> 

> Modified: apr/apr/trunk/util-misc/apu_dso.c
> URL: http://svn.apache.org/viewvc/apr/apr/trunk/util-misc/apu_dso.c?rev=1917050&r1=1917049&r2=1917050&view=diff
> ==============================================================================
> --- apr/apr/trunk/util-misc/apu_dso.c (original)
> +++ apr/apr/trunk/util-misc/apu_dso.c Tue Apr 16 21:33:58 2024
> @@ -131,7 +131,8 @@ apr_status_t apu_dso_load(apr_dso_handle
>                            apr_dso_handle_sym_t *dsoptr,
>                            const char *module,
>                            const char *modsym,
> -                          apr_pool_t *pool)
> +                          apr_pool_t *pool,
> +                          apu_err_t *err)

Now the caller needs to allocate memory even if it is not interested in the error or if there is no error at all.
Wouldn't it be better to add an apu_err_t **err instead (which can be NULL) and in case of an error allocate an
apu_err_t from pool and fill it and return it in **err (provided it was not NULL).


>  {
>      apr_dso_handle_t *dlhandle = NULL;
>      char *pathlist;
> @@ -186,6 +187,7 @@ apr_status_t apu_dso_load(apr_dso_handle
>          apr_cpystrn(eos, module, sizeof(path) - (eos - path));
>  
>          rv = apr_dso_load(&dlhandle, path, global);
> +
>          if (dlhandleptr) {
>              *dlhandleptr = dlhandle;
>          }
> @@ -205,20 +207,27 @@ apr_status_t apu_dso_load(apr_dso_handle
>              apr_cpystrn(eos, module, sizeof(path) - (eos - path));
>  
>              rv = apr_dso_load(&dlhandle, path, global);
> +
>              if (dlhandleptr) {
>                  *dlhandleptr = dlhandle;
>              }
> +
>              if (rv == APR_SUCCESS) { /* APR_EDSOOPEN */
>                  break;
>              }
>          }
>      }
>  
> -    if (rv != APR_SUCCESS) /* APR_ESYMNOTFOUND */
> +    if (rv != APR_SUCCESS) { /* APR_ESYMNOTFOUND */
> +        err->msg = apr_pstrdup(pool, apr_dso_error(dlhandle, NULL, 0));
> +        err->reason = apr_pstrdup(pool, module);
>          return rv;
> +    }
>  
>      rv = apr_dso_sym(dsoptr, dlhandle, modsym);
>      if (rv != APR_SUCCESS) { /* APR_ESYMNOTFOUND */
> +        err->msg = apr_pstrdup(pool, apr_dso_error(dlhandle, NULL, 0));
> +        err->reason = apr_pstrdup(pool, module);
>          apr_dso_unload(dlhandle);
>      }
>      else {
> @@ -231,5 +240,5 @@ apr_status_t apu_dso_load(apr_dso_handle
>      return rv;
>  }
>  
> -#endif /* APR_DSO_BUILD */
> +#endif /* APR_HAVE_MODULAR_DSO */

Regards

Rüdiger
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.