Date: Thu, 13 Jan 2000 08:01:49 -0500 From: "Mikhail Evstiounin" <evstiounin@adelphia.net> To: <freebsd-questions@FreeBSD.ORG> Subject: Re: Giving a sighandler more information Message-ID: <00eb01bf5dc6$5adffe00$fc353018@evstiouninadelphia.net.pit.adelphia.net>
next in thread | raw e-mail | index | archive | help
-----Original Message----- From: Oliver Fromme <olli@dorifer.heim3.tu-clausthal.de> To: freebsd-questions@FreeBSD.ORG <freebsd-questions@FreeBSD.ORG> Date: Wednesday, January 12, 2000 11:42 PM Subject: Re: Giving a sighandler more information >Mikhail Evstiounin <evstiounin@adelphia.net> wrote in list.freebsd-questions: > > From: Oliver Fromme <olli@dorifer.heim3.tu-clausthal.de> > >>Laurence Berland <stuyman@confusion.net> wrote in list.freebsd-questions: > >> > Followup question: is a sig_atomic_t appropriate to hold the value of a > >> > FILE * ? > >> > >>No. It is only guaranteed to be large enough to hold an int. > >>Of course, on intel PCs, a pointer has the same size as an int, > >>but not on other platforms (e.g. the Alpha). Therefore, > >>portable programs cannot store a pointer in a sig_atomic_t. > > > > Sorry, guys, but it requirenments of ANSI that sizeof(void*)==sizeof(int). > >No! A program which assumes that an int is large enough to >store a pointer is BROKEN. See this simple test program: Oliver, IT'S A REQUIRIMENTS OF THE STANDARD!!! - NOT MY WISH!!! And Alpha compiler just plain violates this standard (BTW, didn't check recent C standard - C99 or C98). This requirement was in there for the purpose - portability. > > #include <stdio.h> > int main (int argc, char *argv[]) { > printf("sizeof(int) == %d\n", sizeof(int)); > printf("sizeof(void*) == %d\n", sizeof(void*)); > return 0; > } > >On an Alpha (64bit), the result is: > > sizeof(int) == 4 > sizeof(void*) == 8 > >That was compiled with DEC's C compiler in -std1 mode. This >is one of the most ANSI/ISO-compliant compilers that I'm aware >of. (Note that gcc is not that ANSI-compliant.) > Agreed. This is a real life. But take a look at the standard: sizeof(short)<=sizeof(int)<=sizeof(long) and sizeof(void*)==sizeof(int). GCC team is very accurate - if they know that they have something incompatible with ANSI standard they always tell it - there is a whole document in distributuive that states what is different and why GCC team thinks it should be different. > > and question does it mean that alpha integer is 32 bit, or pointer has more > > than 64? > >See above. ints are 32 bits, pointers are 64 bits. Thanx. >And this is perfectly within ANSI spec. My reading of ANSI is slightly different. As someone who participate in writing of 5 compilers I worked with standards a lot. But I didn't do it anymore since 1995. And since then C commmitte added a lot of stuff to new standard. Could you point me to the ANSI standard you are refence to? I was talking about, I believe, C89. > >Regards > Oliver > >-- >Oliver Fromme, Leibnizstr. 18/61, 38678 Clausthal, Germany >(Info: finger userinfo:olli@dorifer.heim3.tu-clausthal.de) > >"In jedem Stück Kohle wartet ein Diamant auf seine Geburt" > (Terry Pratchett) > > >To Unsubscribe: send mail to majordomo@FreeBSD.org >with "unsubscribe freebsd-questions" in the body of the message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?00eb01bf5dc6$5adffe00$fc353018>