C/C++ Programmer's Guide (G06.27+, H06.08+, J06.03+)

node = listhead;
while (*node->kind == 4 /* used too soon */ && node != NULL) {
...
node = node->next;
}
To this:
struct listnode {
int *kind;
...
struct listnode *next;
};
struct listnode *listhead, *node;
node = listhead;
while (node != NULL && *node->kind == 4) {
...
node = node->next;
}
Example 11 C/C++ Invalid Cast From char to Integer Pointer (Item 2, Item 10)
Change this:
/* extract 16-bit length from front of long string: */
unsigned char *name;
lth = * (unsigned short *) name; /* misalignment traps here */
name += 2;
To this:
/* extract 16-bit length from front of long string: */
unsigned char *name;
lth = (name[0] << 8) | name[1]
name += 2;
Example 12 C/C++ Invalid Cast From char to Integer Pointer (Item 2, Item 10)
Change this:
/* insert 16-bit length at front of long string: */
unsigned char *name;
unsigned short lth;
* (unsigned short *) name = lth;
To this:
/* insert 16-bit length at front of long string: */
unsigned char *name;
unsigned short lth;
name[0] = lth >> 8;
name[1] = lth;
Example 13 C/C++ Pointer Union (Item 3, Item 10)
Change this:
/* type cast done via union: */
union { unsigned char *bytes;
unsigned short *shorts; } u;
u.bytes = name;
lth = * u.shorts; /* misalignment traps here */
388 Handling TNS Data Alignment