[Samba] iconv.c / static charset prototype/assembler bug?
Jeremy Allison
jra at samba.org
Tue Jun 27 23:55:47 GMT 2006
On Tue, Jun 27, 2006 at 02:25:28PM +0200, Robert Szeleney wrote:
> Hi!
>
> I think there is a little bug in the current samba release (3.0.22).
>
> Take a look at cp850.c at the last line and you will see following
> definition:
>
> SMB_GENERATE_CHARSET_MODULE_8_BIT_GAP(CP850)
>
> Using the macros from charset.c, the preprocessor expands this to:
>
> NTSTATUS charset_CP850_init(void) \
> { \
> return smb_register_charset(&CP850_functions); \
> } \
>
> NTSTATUS is defined in nt_status.h as follows:
>
> typedef struct {uint32 v;} NTSTATUS;
> #define NT_STATUS(x) ((NTSTATUS) { x })
> #define NT_STATUS_V(x) ((x).v)
>
>
> Ok, when cp850/cp437 is compiled as static, config.h has following macro:
> #define static_init_charset { charset_CP850_init();
> charset_CP437_init();}
>
> This static_init_charset macro gets called in iconv.c. But at this point
> in the file there is no function prototype for charset_CP850_init and
> charset_CP437_init. Thus gcc, doesn't know that it has to reserve space on
> the stack for this 4 byte return value which actually gets returned AND
> pushed to the stack by charset_CP850_init.
Ok, I've looked into this in the current SAMBA_3_0 codebase
(the code that's in 3.0.23RC3) and this problem shouldn't
happen.
When you configure with :
./configure.developer --with-static-modules=charset_CP850
You get :
/* Decl of Static init functions */
#define static_decl_charset extern NTSTATUS charset_CP850_init(void);
followed by :
#define static_init_charset { charset_CP850_init();}
defined in include/config.h
in lib/iconv.c we have :
static_decl_charset;
at the top of the file (after #include "includes.h")
followed by :
static void lazy_initialize_iconv(void)
{
static BOOL initialized;
int i;
if (!initialized) {
initialized = True;
for(i = 0; builtin_functions[i].name; i++)
smb_register_charset(&builtin_functions[i]);
static_init_charset;
}
}
- this should cause the correct declaration and definition to
be used. Follow up this email if you think I'm incorrect on
this but I don't think it's a problem in 3.0.23 RC3.
Jeremy.
More information about the samba
mailing list