Talkffi problems when generating structs with function pointers
Hi! i found a problem while playing with TalkFFI generation of MySQL( yes, thats probably not the path we are going to take but i am doing init to learn). The generation throws a problem with the following struct. typedef struct my_collation_handler_st { my_bool (*init)(struct charset_info_st *, void *(*alloc)(size_t)); /* Collation routines */ int (*strnncoll)(struct charset_info_st *, const uchar *, size_t, const uchar *, size_t, my_bool); int (*strnncollsp)(struct charset_info_st *, const uchar *, size_t, const uchar *, size_t, my_bool); size_t (*strnxfrm)(struct charset_info_st *c, uchar *a, size_t g, const uchar *b, size_t h); size_t (*strnxfrmlen)(struct charset_info_st * aa, size_t bb); my_bool (*like_range)(struct charset_info_st *, const char *s, size_t s_length, pchar w_prefix, pchar w_one, pchar w_many, size_t res_length, char *min_str, char *max_str, size_t *min_len, size_t *max_len); int (*wildcmp)(struct charset_info_st *, const char *str,const char *str_end, const char *wildstr,const char *wildend, int escape,int w_one, int w_many); int (*strcasecmp)(struct charset_info_st *, const char *, const char *); uint (*instr)(struct charset_info_st *, const char *b, size_t b_length, const char *s, size_t s_length, my_match_t *match, uint nmatch); /* Hash calculation */ void (*hash_sort)(struct charset_info_st *cs, const uchar *key, size_t len, ulong *nr1, ulong *nr2); my_bool (*propagate)(struct charset_info_st *cs, const uchar *str, size_t len); } MY_COLLATION_HANDLER; As you can see the struct has eleven fields which are functions pointers. However, when we generate with TalkFFI it s fails, and we can see that the struct generate is the following: an OrderedCollection( #MySQLMySysH25Cb->'init' #MySQLMySysH26Cb->'strnncoll' #MySQLMySysH26Cb->'strnncollsp' {#NBInt32. {'NBInt32 *'->'arg1'}}->'size_t' #MySQLMySysH27Cb->'like_range' #MySQLMySysH28Cb->'wildcmp' #MySQLMySysH6Cb->'strcasecmp' #MySQLMySysH29Cb->'instr' #MySQLMySysH30Cb->'hash_sort' #MySQLMySysH31Cb->'propagate' ) The generate struct have only ten fields and the fourth is wrongly generated. Instead of the two fields strnxfrm and strnxfrmlen , it generates garbage. We were with guille debugging and playing with the struct declaration with not much results. Thanks for any help rochi and guille.
participants (1)
-
Rocio Amaya