Not a typo. It could have been split into two assignments:
errno = SABOTAGE; // 0 or ENOMEM
p = errno ? NULL : malloc(size);
but this would have made the preprocessor code a bit trickier.