morita
morit****@razil*****
2008年 8月 18日 (月) 22:47:58 JST
森です。
ご指摘ありがとうございます!!
パッチ反映させていただきました。
Kouhei Sutou さんは書きました:
> 須藤です。
>
> sen_table_sort_optarg.comparは比較するテーブルの要素とテーブル自身を
> 受けとりますが、テーブルの要素のサイズは受けとりません。
>
> SEN_TYPE_FIXED_SIZEのときは要素のサイズは利用者が既知としてもよ
> いと思いますが、SEN_TYPE_VARIABLE_SIZEのときは受け取った要素毎
> にサイズが異なると思うので、要素のサイズも渡してもらえると嬉しいです。
>
> --- senna.h (revision 1032)
> +++ senna.h (working copy)
> @@ -668,7 +668,9 @@
>
> struct _sen_table_sort_optarg {
> int flags;
> - int (*compar)(sen_obj *, void *, sen_obj *, void *, void *);
> + int (*compar)(sen_obj *table1, void *target1, unsigned int target1_size,
> + sen_obj *table2, void *target2, unsigned int target2_size,
> + void *compare_arg);
> void *compar_arg;
> int offset;
> };
> Index: lib/hash.c
> ===================================================================
> --- lib/hash.c (revision 1032)
> +++ lib/hash.c (working copy)
> @@ -941,8 +941,8 @@
>
> #define COMPARE_VAL_(ap,as,bp,bs)\
> (arg->compar\
> - ? arg->compar((sen_obj *)hash, (void *)(ap),\
> - (sen_obj *)hash, (void *)(bp), arg->compar_arg) \
> + ? arg->compar((sen_obj *)hash, (void *)(ap), as,\
> + (sen_obj *)hash, (void *)(bp), bs, arg->compar_arg)\
> : ((arg->flags & SEN_TABLE_SORT_AS_NUMBER)\
> ? ((arg->flags & SEN_TABLE_SORT_AS_UNSIGNED)\
> ? ((arg->flags & SEN_TABLE_SORT_AS_INT64)\
> @@ -1091,8 +1091,9 @@
>
> #define COMPARE_VAL32_(ap,bp) \
> (arg->compar\
> - ? arg->compar((sen_obj *)hash, (void *)&(ap)->v,\
> - (sen_obj *)hash, (void *)&(bp)->v, arg->compar_arg)\
> + ? arg->compar((sen_obj *)hash, (void *)&(ap)->v, sizeof(uint32_t),\
> + (sen_obj *)hash, (void *)&(bp)->v, sizeof(uint32_t),\
> + arg->compar_arg)\
> : ((arg->flags & SEN_TABLE_SORT_AS_NUMBER)\
> ? ((arg->flags & SEN_TABLE_SORT_AS_UNSIGNED)\
> ? *((uint32_t *)&(ap)->v) > *((uint32_t *)&(bp)->v)\
>
> _______________________________________________
> Senna-dev mailing list
> Senna****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/senna-dev
> バグ報告方法:http://qwik.jp/senna/bug_report.html
>