diff --git a/conman.c b/conman.c index 0286422f..98930057 100644 --- a/conman.c +++ b/conman.c @@ -102,8 +102,7 @@ extern pServer pServ; SConnection *pCon; long ident; int inMacro; - int inMacroSave; - int pushLevel; + long macroStack; commandContext cc; }; /*===========================================================================*/ @@ -2242,7 +2241,7 @@ SCStore *SCSave(SConnection *pCon, SCStore *oldStore) { oldStore->ident = pCon->ident; oldStore->inMacro = pCon->iMacro; oldStore->cc = SCGetContext(pCon); - oldStore->pushLevel = 0; + oldStore->macroStack = 0; } return oldStore; } @@ -2270,13 +2269,10 @@ SConnection *SCStorePush(SCStore *conStore) { SConnection *pCon; pCon = SCLoad(conStore); - if (conStore->pushLevel == 0) { - if (conStore->inMacro) { - conStore->inMacroSave = pCon->iMacro; - pCon->iMacro = conStore->inMacro; - } - } - conStore->pushLevel++; + /* push macro flag on stack */ + conStore->macroStack <<= 1; + conStore->macroStack |= (pCon->iMacro != 0); + pCon->iMacro = conStore->inMacro; SCPushContext2(pCon, conStore->cc); return pCon; } @@ -2285,13 +2281,10 @@ void SCStorePop(SCStore *conStore) { SConnection *pCon; pCon = SCLoad(conStore); - if (conStore->pushLevel > 0) { - SCPopContext(pCon); - conStore->pushLevel--; - if (conStore->pushLevel == 0) { - pCon->iMacro = conStore->inMacroSave; - } - } + SCPopContext(pCon); + /* pop macro flag from stack */ + pCon->iMacro = (conStore->macroStack | 1); + conStore->macroStack >>= 1; } /*--------------------------------------------------------------------------*/ int SCStoreConnected(SCStore *conStore) {