Re: "Writing" instead of "Warning" in dlopen(3) manpage

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wednesday 01 January 2014 20:46:59 Michael Kerrisk (man-pages) wrote:
> --- a/man3/dlopen.3
> +++ b/man3/dlopen.3
> 
> /* According to the C99 standard, casting 'void *' to a function pointer
> as shown above is forbidden. POSIX.1-2003 and POSIX.2008 followed
> C99's requirement, and proposed the following workaround:

i don't want to be pedantic, buuuuut:
 - you want to say "ISO C" rather than "C99"
 - the spec says that it is "undefined behavior" rather than "forbidden"

i wonder about deleting the "followed C99's requirement" part.  they aren't 
really following the requirement since (at least 2008) says that it must be 
supported.

the "POSIX.2008" probably should be "POSIX.1-2008".  or maybe just change it 
to "POSIX.1" ?

> +           *(void **) (&cosine) = dlsym(handle, "cos");
> +
> +       This (clumsy) cast conforms with C99 and will avoid any compiler
> +       warnings.

might it be worth suggesting a union too ?
	double (*cosine)(double);
	union {
		void *vptr;
		double (*ptr)(double);
	} cast;
	cast.vptr = dlsym(...);
	cosine = cast.double;

i think this also avoids aliasing warnings and works nicely in C++ ?  or i 
could be making this up entirely :).

> The 2013 Technical Corrigendum to POSIX.1-2008 (a.k.a. POSIX.1-2013)
> improved matters by requiring that conforming implementations support
> casting 'void *' to a function pointer.

how about adding a comment inside of the man page itself linking to the POSIX 
pages ?  making it visible to end users might be too much, but for people 
maintaining the comments (i.e. you) would be good.
http://pubs.opengroup.org/onlinepubs/009695399/functions/dlsym.html#tag_03_112_08
http://pubs.opengroup.org/onlinepubs/9699919799/functions/dlsym.html#tag_16_96_07

> Nevertheless, some compilers
> (e.g., gcc with the '-pedantic' option) may complain about the cast
> used in this program. */

three things:
 - i think the ISO C standard is required to at least emit a warning
 - i was going to suggest the -pedantic thing :)
 - seriously, you're using "e.g." after chastising me ? :D
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.


[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux