Sono tornato a mettere mano a quel codice per altre ragioni, e proprio perché stavo pensando ad altro, ho trovato una soluzione alternativa a questo problema, sostituendo
if( *pStr == '\0' ) goto exitReading;
con
if( *pStr == '\0' ) --pStr;
char *pStr = pText;
while( *pStr )
{
switch( pStr[0] )
{
case 'z':
pStr = ManageCaseZ(pStr);
if( !pStr ) // Sintax error!
return NULL;
if( *pStr == '\0' ) // End of text.
--pStr;
break;
default:
_SKIP_LINE(pStr);
break;
}
pStr++;
}