lib/krb5: prevent build failures of krb5_plugin_common on Windows

The Microsoft compiler cannot handle multiple const modifiers
for the same type.    It is also unhappy with the output pointer
parameter being declared const.

This change introduces new typedefs and cast of the dlsym() return
type to prevent warnings.

Change-Id: Ia92645efab8d2ec6745339a6f47c690782ae730a
This commit is contained in:
Jeffrey Altman
2019-02-07 23:04:16 -05:00
committed by Jeffrey Altman
parent ac6fa4cadc
commit 434b34d71c
3 changed files with 13 additions and 10 deletions

View File

@@ -41,6 +41,6 @@ krb5_error_code KRB5_CALLCONV
ccache_ops_plugin_load(krb5_context context,
krb5_get_instance_func_t *func,
size_t *n_ftables,
const krb5_plugin_common_ftable *const **ftables);
krb5_plugin_common_ftable_p **ftables);
#endif /* HEIMDAL_KRB5_CCACHE_PLUGIN_H */

View File

@@ -39,11 +39,14 @@
/*
* All plugin function tables extend the following structure.
*/
typedef struct krb5_plugin_common_ftable_desc {
struct krb5_plugin_common_ftable_desc {
int version;
krb5_error_code (KRB5_LIB_CALL *init)(krb5_context, void **);
void (KRB5_LIB_CALL *fini)(void *);
} krb5_plugin_common_ftable;
};
typedef struct krb5_plugin_common_ftable_desc krb5_plugin_common_ftable;
typedef struct krb5_plugin_common_ftable_desc *krb5_plugin_common_ftable_p;
typedef struct krb5_plugin_common_ftable_desc * const krb5_plugin_common_ftable_cp;
/*
* All plugins must export a function named "<type>_plugin_load" with

View File

@@ -151,7 +151,7 @@ copy_internal_dso(const char *name)
}
struct krb5_plugin {
krb5_plugin_common_ftable *ftable;
krb5_plugin_common_ftable_p ftable;
void *ctx;
};
@@ -482,7 +482,7 @@ add_dso_plugin_struct(krb5_context context,
const char *name)
{
krb5_error_code ret;
krb5_plugin_common_ftable *cpm;
krb5_plugin_common_ftable_p cpm;
struct krb5_plugin *pl;
heim_array_t plugins;
@@ -490,7 +490,7 @@ add_dso_plugin_struct(krb5_context context,
return NULL;
/* suppress error here because we may be looking for a different plugin type */
cpm = dlsym(dsohandle, name);
cpm = (krb5_plugin_common_ftable_p)dlsym(dsohandle, name);
if (cpm == NULL)
return NULL;
@@ -518,7 +518,7 @@ typedef krb5_error_code
(KRB5_CALLCONV *krb5_plugin_load_t)(krb5_context context,
krb5_get_instance_func_t *func,
size_t *n_ftables,
const krb5_plugin_common_ftable *const **ftables);
krb5_plugin_common_ftable_cp **ftables);
static krb5_boolean
validate_plugin_deps(krb5_context context,
@@ -575,13 +575,13 @@ add_dso_plugins_load_fn(krb5_context context,
size_t i;
krb5_get_instance_func_t get_instance;
size_t n_ftables;
const krb5_plugin_common_ftable *const *ftables;
krb5_plugin_common_ftable_cp *ftables;
if (asprintf(&sym, "%s_plugin_load", caller->name) == -1)
return NULL;
/* suppress error here because we may be looking for a different plugin type */
load_fn = dlsym(dsohandle, sym);
load_fn = (krb5_plugin_load_t)dlsym(dsohandle, sym);
free(sym);
if (load_fn == NULL)
return NULL;
@@ -601,7 +601,7 @@ add_dso_plugins_load_fn(krb5_context context,
plugins = heim_array_create();
for (i = 0; i < n_ftables; i++) {
const krb5_plugin_common_ftable *const cpm = ftables[i];
krb5_plugin_common_ftable_cp cpm = ftables[i];
struct krb5_plugin *pl;
pl = heim_alloc(sizeof(*pl), "krb5-plugin", plugin_free);