I originally submitted this patch as a portability fix to Brian Callahan's oksh, but he suggested I submit it here instead.
Conversion of function pointer to void pointer is not allowed in ISO C, though POSIX requires it for dlsym(). However, here we are also comparing function pointer to void pointer with the == operator without using a cast, which is a constraint error[0]. Rather than add a cast, we can just use a typedef here for the function pointer type, avoiding any C extensions, and adding a bit of type-safety. [0] https://port70.net/~nsz/c/c11/n1570.html#6.5.9p2 --- bin/ksh/emacs.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bin/ksh/emacs.c b/bin/ksh/emacs.c index aa2cceb657d..b63735956a3 100644 --- a/bin/ksh/emacs.c +++ b/bin/ksh/emacs.c @@ -41,8 +41,10 @@ static Area aedit; #define KEOL 1 /* ^M, ^J */ #define KINTR 2 /* ^G, ^C */ +typedef int (*kb_func)(int); + struct x_ftab { - int (*xf_func)(int c); + kb_func xf_func; const char *xf_name; short xf_flags; }; @@ -861,7 +863,7 @@ x_eot_del(int c) return (x_del_char(c)); } -static void * +static kb_func kb_find_hist_func(char c) { struct kb_entry *k; @@ -1315,7 +1317,7 @@ kb_del(struct kb_entry *k) } static struct kb_entry * -kb_add_string(void *func, void *args, char *str) +kb_add_string(kb_func func, void *args, char *str) { unsigned int ele, count; struct kb_entry *k; @@ -1350,7 +1352,7 @@ kb_add_string(void *func, void *args, char *str) } static struct kb_entry * -kb_add(void *func, ...) +kb_add(kb_func func, ...) { va_list ap; unsigned char ch; -- 2.26.2
