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.

Reply via email to