On 10 May 2023, at 01:26, Samuel Thibault <samuel.thiba...@gnu.org> wrote: > > Sergey Bugaev, le mar. 09 mai 2023 00:31:07 +0300, a ecrit: >> GCC was complaining about the mismatch in types between the 'fn' pointer >> and the function pointers assigned to it. Since fn is meant to be used >> with different function types, represent it as a 'void *' and not a >> pointer to any particular function type. >> --- >> libps/ps.h | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/libps/ps.h b/libps/ps.h >> index 192847b5..3e59c66a 100644 >> --- a/libps/ps.h >> +++ b/libps/ps.h >> @@ -535,7 +535,7 @@ struct ps_getter >> >> /* A function that will get the value; the protocol between this function >> and its caller is type-dependent. */ >> - void (*fn) (void); >> + void *fn; > > Mmm, IIRC, strictly speaking, a function pointer is not the same as a > pointer, on some odd archs such as ia64 it makes a difference.
That’s not quite true. It’s not a direct pointer to the instructions, but it is still a normal pointer. POSIX dlsym means that function pointers need to fit in void * (but ISO C doesn’t). However, if your pointer is a function, it should be a function pointer, with casts added as needed (which ISO C permits, provided when you make the call it’s cast back to the right type). Jess