return a 0 on false, not undef to match XS
error_string to return undef instead of '' for NULL