27 Nov 2001 jum   » (Master)

The AIX 5 fix download mechanism does work now, I downloaded the latest versions of system components. The result has not been encouaging so far, as if I leave the start of httpd in /etc/inittab AIX 5 in 64 bit mode will now always crash upon boot. I turned httpd off to be able to continue work in 64 bit mode.

I have fixed one strange bug that was causing multicast address add/delete fail if used via the AppleTalk socket ioctl interface. I did introduce this special ioctl interface as not all systems sport an SIOCADDMULTI/SIOCDELMULTI style interface. And to be exact on AIX this is translated on AIX to the proper ndd_ctl NDD_ENABLE_ADDRESS/NDD_DISABLE_ADDRESS calls. And here the problem came in, I used a statment like this:

err = aa_ndd->ndd_ctl(aa_ndd, cmd == ATIOCADDMULTI?
NDD_ENABLE_ADDRESS : NDD_DISABLE_ADDRESS, buf, len);

The problem here is the comparison cmd == ATIOCADDMULTI, cmd is a parameter that explicetely contains the unsigned int from the upper levels and ATIOCADDMULTI is a define using the standard sys/ioctl.h macros as _IOW('A', 5, struct ifreq). _IOW() contains some pretty obscure shifting and on AIX 64 bit does actually produce a sign extended 64 bit value that is negative (having the top 32 bits set to one). This will never compare to the plain 32 bit cmd value, casting using unsigned makes it work (cmd == (unsigned)ATIOCADDMULTI). Go figure.

Latest blog entries     Older blog entries

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!