From: Andrew Bartlett Date: Wed, 29 Jun 2011 00:49:35 +0000 (+1000) Subject: s3-param Use .offset rather than .ptr when defining parameters X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=21756b7c7d3048ce3396ab63aebc80babf4819e9;p=kai%2Fsamba.git s3-param Use .offset rather than .ptr when defining parameters This change has a number of purposes: * It removes the fancy logic around pointers into sDefault for all per-share parameters. Instead, this is always expressed as an offset, rather than implicitly via PTR_DIFF macros. * It makes struct parm_struct almost identical to that as used in source4/param. This will very shortly allow the loadparm tables and most of the 'special' helper functions to be placed in common. Andrew Bartlett Autobuild-User: Andrew Bartlett Autobuild-Date: Wed Jun 29 05:50:46 CEST 2011 on sn-devel-104 --- diff --git a/source3/include/smb.h b/source3/include/smb.h index f46a58ef118..25e3bacc729 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -731,7 +731,7 @@ struct parm_struct { const char *label; parm_type type; parm_class p_class; - void *ptr; + offset_t offset; bool (*special)(int snum, const char *, char **); const struct enum_list *enum_list; unsigned flags; diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 7da3de393ab..430c2de5ac7 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -930,9 +930,8 @@ static const struct enum_list enum_kerberos_method[] = { * name first, and all synonyms must follow it with the FLAG_HIDE attribute. */ -#define GLOBAL_VAR(name) &Globals.name -#define LOCAL_VAR(name) &sDefault.name -#define offset ptr +#define GLOBAL_VAR(name) offsetof(struct loadparm_global, name) +#define LOCAL_VAR(name) offsetof(struct loadparm_service, name) static struct parm_struct parm_table[] = { {N_("Base Options"), P_SEP, P_SEPARATOR}, @@ -7755,12 +7754,12 @@ void *lp_parm_ptr(struct loadparm_service *service, struct parm_struct *parm) { if (service == NULL) { if (parm->p_class == P_LOCAL) - return parm->ptr; + return (void *)(((char *)&sDefault)+parm->offset); else if (parm->p_class == P_GLOBAL) - return parm->ptr; + return (void *)(((char *)&Globals)+parm->offset); else return NULL; } else { - return (void *)(((char *)service) + PTR_DIFF(parm->ptr, &sDefault)); + return (void *)(((char *)service) + parm->offset); } }