diff options
Diffstat (limited to 'src/recursivedescent.cc')
-rw-r--r-- | src/recursivedescent.cc | 599 |
1 files changed, 432 insertions, 167 deletions
diff --git a/src/recursivedescent.cc b/src/recursivedescent.cc index be9c560..0f0cf8d 100644 --- a/src/recursivedescent.cc +++ b/src/recursivedescent.cc @@ -4,18 +4,20 @@ * @author Andreas Aardal Hanssen * @date 2002-2005 * ----------------------------------------------------------------- **/ -#include "imapparser.h" #include "recursivedescent.h" + +#include "convert.h" +#include "imapparser.h" #include "iodevice.h" #include "iofactory.h" -#include "convert.h" #include "session.h" -#include <stdio.h> -#include <ctype.h> -#include <stack> -#include <iostream> #include <iomanip> +#include <iostream> +#include <stack> + +#include <ctype.h> +#include <stdio.h> using namespace ::std; using namespace Binc; @@ -23,7 +25,6 @@ using namespace Binc; stack<int> Binc::inputBuffer; int Binc::charnr = 0; - //---------------------------------------------------------------------- Operator::ParseResult Binc::expectThisString(const string &s_in) { @@ -33,7 +34,6 @@ Operator::ParseResult Binc::expectThisString(const string &s_in) bool match = true; for (string::const_iterator i = s_in.begin(); i != s_in.end(); ++i) { - char c; if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); @@ -49,7 +49,7 @@ Operator::ParseResult Binc::expectThisString(const string &s_in) break; } } - + if (!match) { bincClient.unreadStr(tmp); return Operator::REJECT; @@ -62,8 +62,7 @@ Operator::ParseResult Binc::expectDateTime(string &s_in) { Session &session = Session::getInstance(); - if (expectThisString("\"") != Operator::ACCEPT) - return Operator::REJECT; + if (expectThisString("\"") != Operator::ACCEPT) return Operator::REJECT; unsigned int digit1, digit2; if (expectSPACE() == Operator::ACCEPT) { @@ -89,8 +88,7 @@ Operator::ParseResult Binc::expectDateTime(string &s_in) BincStream daystr; - if (day < 10) - daystr << '0'; + if (day < 10) daystr << '0'; daystr << day; s_in += daystr.str(); @@ -104,18 +102,30 @@ Operator::ParseResult Binc::expectDateTime(string &s_in) s_in += "-"; /* month */ - if ((res = expectThisString("Jan")) == Operator::ACCEPT) s_in += "Jan"; - else if ((res = expectThisString("Feb")) == Operator::ACCEPT) s_in += "Feb"; - else if ((res = expectThisString("Mar")) == Operator::ACCEPT) s_in += "Mar"; - else if ((res = expectThisString("Apr")) == Operator::ACCEPT) s_in += "Apr"; - else if ((res = expectThisString("May")) == Operator::ACCEPT) s_in += "May"; - else if ((res = expectThisString("Jun")) == Operator::ACCEPT) s_in += "Jun"; - else if ((res = expectThisString("Jul")) == Operator::ACCEPT) s_in += "Jul"; - else if ((res = expectThisString("Aug")) == Operator::ACCEPT) s_in += "Aug"; - else if ((res = expectThisString("Sep")) == Operator::ACCEPT) s_in += "Sep"; - else if ((res = expectThisString("Oct")) == Operator::ACCEPT) s_in += "Oct"; - else if ((res = expectThisString("Nov")) == Operator::ACCEPT) s_in += "Nov"; - else if ((res = expectThisString("Dec")) == Operator::ACCEPT) s_in += "Dec"; + if ((res = expectThisString("Jan")) == Operator::ACCEPT) + s_in += "Jan"; + else if ((res = expectThisString("Feb")) == Operator::ACCEPT) + s_in += "Feb"; + else if ((res = expectThisString("Mar")) == Operator::ACCEPT) + s_in += "Mar"; + else if ((res = expectThisString("Apr")) == Operator::ACCEPT) + s_in += "Apr"; + else if ((res = expectThisString("May")) == Operator::ACCEPT) + s_in += "May"; + else if ((res = expectThisString("Jun")) == Operator::ACCEPT) + s_in += "Jun"; + else if ((res = expectThisString("Jul")) == Operator::ACCEPT) + s_in += "Jul"; + else if ((res = expectThisString("Aug")) == Operator::ACCEPT) + s_in += "Aug"; + else if ((res = expectThisString("Sep")) == Operator::ACCEPT) + s_in += "Sep"; + else if ((res = expectThisString("Oct")) == Operator::ACCEPT) + s_in += "Oct"; + else if ((res = expectThisString("Nov")) == Operator::ACCEPT) + s_in += "Nov"; + else if ((res = expectThisString("Dec")) == Operator::ACCEPT) + s_in += "Dec"; else { session.setLastError("expected month"); return res; @@ -126,7 +136,7 @@ Operator::ParseResult Binc::expectDateTime(string &s_in) return res; } - s_in += "-"; + s_in += "-"; /* year */ unsigned int year, c; @@ -157,7 +167,7 @@ Operator::ParseResult Binc::expectDateTime(string &s_in) year = (year * 10) + c; BincStream yearstr; - + yearstr << year; s_in += yearstr.str(); @@ -201,8 +211,7 @@ Operator::ParseResult Binc::expectTime(string &s_in) unsigned int c, t; Operator::ParseResult res; - if ((res = expectDigit(t)) != Operator::ACCEPT) - return res; + if ((res = expectDigit(t)) != Operator::ACCEPT) return res; if ((res = expectDigit(c)) != Operator::ACCEPT) { session.setLastError("expected digit"); @@ -315,7 +324,7 @@ Operator::ParseResult Binc::expectZone(string &s_in) tstr << t; s_in += tstr.str(); - + return Operator::ACCEPT; } @@ -337,15 +346,14 @@ Operator::ParseResult Binc::expectListWildcards(int &c_in) Operator::ParseResult Binc::expectListMailbox(string &s_in) { Operator::ParseResult res; - if ((res = expectString(s_in)) == Operator::ACCEPT) - return Operator::ACCEPT; - + if ((res = expectString(s_in)) == Operator::ACCEPT) return Operator::ACCEPT; + int c; - if ((res = expectAtomChar(c)) == Operator::ACCEPT - || (res = expectListWildcards(c)) == Operator::ACCEPT - || (res = expectThisString("]")) == Operator::ACCEPT) { + if ((res = expectAtomChar(c)) == Operator::ACCEPT || (res = expectListWildcards(c)) == Operator::ACCEPT + || (res = expectThisString("]")) == Operator::ACCEPT) + { do { - s_in += (char) c; + s_in += (char)c; if ((res = expectAtomChar(c)) != Operator::ACCEPT && (res = expectListWildcards(c)) != Operator::ACCEPT && (res = expectThisString("]")) != Operator::ACCEPT) @@ -369,9 +377,9 @@ Operator::ParseResult Binc::expectFlag(vector<string> &v_in) v_in.push_back("\\Answered"); else if ((res = expectThisString("\\Flagged")) == Operator::ACCEPT) v_in.push_back("\\Flagged"); - else if ((res = expectThisString("\\Deleted")) == Operator::ACCEPT) + else if ((res = expectThisString("\\Deleted")) == Operator::ACCEPT) v_in.push_back("\\Deleted"); - else if ((res = expectThisString("\\Seen")) == Operator::ACCEPT) + else if ((res = expectThisString("\\Seen")) == Operator::ACCEPT) v_in.push_back("\\Seen"); else if ((res = expectThisString("\\Draft")) == Operator::ACCEPT) v_in.push_back("\\Draft"); @@ -402,15 +410,13 @@ Operator::ParseResult Binc::expectDate(string &s_in) Operator::ParseResult res; bool quoted = false; - if ((res = expectThisString("\"")) == Operator::ACCEPT) - quoted = true; + if ((res = expectThisString("\"")) == Operator::ACCEPT) quoted = true; /* day */ unsigned int day, c; if ((res = expectDigit(c)) == Operator::ACCEPT) { day = c; - if ((res = expectDigit(c)) == Operator::ACCEPT) - day = (day * 10) + c; + if ((res = expectDigit(c)) == Operator::ACCEPT) day = (day * 10) + c; BincStream daystr; @@ -431,23 +437,35 @@ Operator::ParseResult Binc::expectDate(string &s_in) s_in += '-'; /* month */ - if ((res = expectThisString("Jan")) == Operator::ACCEPT) s_in += "Jan"; - else if ((res = expectThisString("Feb")) == Operator::ACCEPT) s_in += "Feb"; - else if ((res = expectThisString("Mar")) == Operator::ACCEPT) s_in += "Mar"; - else if ((res = expectThisString("Apr")) == Operator::ACCEPT) s_in += "Apr"; - else if ((res = expectThisString("May")) == Operator::ACCEPT) s_in += "May"; - else if ((res = expectThisString("Jun")) == Operator::ACCEPT) s_in += "Jun"; - else if ((res = expectThisString("Jul")) == Operator::ACCEPT) s_in += "Jul"; - else if ((res = expectThisString("Aug")) == Operator::ACCEPT) s_in += "Aug"; - else if ((res = expectThisString("Sep")) == Operator::ACCEPT) s_in += "Sep"; - else if ((res = expectThisString("Oct")) == Operator::ACCEPT) s_in += "Oct"; - else if ((res = expectThisString("Nov")) == Operator::ACCEPT) s_in += "Nov"; - else if ((res = expectThisString("Dec")) == Operator::ACCEPT) s_in += "Dec"; + if ((res = expectThisString("Jan")) == Operator::ACCEPT) + s_in += "Jan"; + else if ((res = expectThisString("Feb")) == Operator::ACCEPT) + s_in += "Feb"; + else if ((res = expectThisString("Mar")) == Operator::ACCEPT) + s_in += "Mar"; + else if ((res = expectThisString("Apr")) == Operator::ACCEPT) + s_in += "Apr"; + else if ((res = expectThisString("May")) == Operator::ACCEPT) + s_in += "May"; + else if ((res = expectThisString("Jun")) == Operator::ACCEPT) + s_in += "Jun"; + else if ((res = expectThisString("Jul")) == Operator::ACCEPT) + s_in += "Jul"; + else if ((res = expectThisString("Aug")) == Operator::ACCEPT) + s_in += "Aug"; + else if ((res = expectThisString("Sep")) == Operator::ACCEPT) + s_in += "Sep"; + else if ((res = expectThisString("Oct")) == Operator::ACCEPT) + s_in += "Oct"; + else if ((res = expectThisString("Nov")) == Operator::ACCEPT) + s_in += "Nov"; + else if ((res = expectThisString("Dec")) == Operator::ACCEPT) + s_in += "Dec"; else { session.setLastError("expected month"); return res; } - + /* - */ if ((res = expectThisString("-")) != Operator::ACCEPT) { session.setLastError("expected -"); @@ -495,7 +513,7 @@ Operator::ParseResult Binc::expectDate(string &s_in) session.setLastError("expected \""); return res; } - + return Operator::ACCEPT; } @@ -503,8 +521,7 @@ Operator::ParseResult Binc::expectDate(string &s_in) Operator::ParseResult Binc::expectCRLF(void) { Operator::ParseResult res; - if ((res = expectCR()) == Operator::ACCEPT - && (res = expectLF()) == Operator::ACCEPT) + if ((res = expectCR()) == Operator::ACCEPT && (res = expectLF()) == Operator::ACCEPT) return Operator::ACCEPT; else return res; @@ -519,8 +536,7 @@ Operator::ParseResult Binc::expectCR(void) if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); - if (bincClient.getLastError() == IODevice::Timeout) - return Operator::TIMEOUT; + if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT; return Operator::ERROR; } @@ -541,8 +557,7 @@ Operator::ParseResult Binc::expectLF(void) if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); - if (bincClient.getLastError() == IODevice::Timeout) - return Operator::TIMEOUT; + if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT; return Operator::ERROR; } @@ -558,38 +573,108 @@ Operator::ParseResult Binc::expectLF(void) Operator::ParseResult Binc::expectTagChar(int &c_in) { Session &session = Session::getInstance(); - + char c; if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); - if (bincClient.getLastError() == IODevice::Timeout) - return Operator::TIMEOUT; + if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT; return Operator::ERROR; } switch (c) { - case 041: case 043: case 044: case 046: case 047: case 054: - case 055: case 056: case 057: case 060: case 061: case 062: - case 063: case 064: case 065: case 066: case 067: case 070: - case 071: case 072: case 073: case 074: case 075: case 076: - case 077: case 0100: case 0101: case 0102: case 0103: case 0104: - case 0105: case 0106: case 0107: case 0110: case 0111: case 0112: - case 0113: case 0114: case 0115: case 0116: case 0117: case 0120: - case 0121: case 0122: case 0123: case 0124: case 0125: case 0126: - case 0127: case 0130: case 0131: case 0132: case 0133: case 0135: - case 0136: case 0137: case 0140: case 0141: case 0142: case 0143: - case 0144: case 0145: case 0146: case 0147: case 0150: case 0151: - case 0152: case 0153: case 0154: case 0155: case 0156: case 0157: - case 0160: case 0161: case 0162: case 0163: case 0164: case 0165: - case 0166: case 0167: case 0170: case 0171: case 0172: case 0174: - case 0175: case 0176: + case 041: + case 043: + case 044: + case 046: + case 047: + case 054: + case 055: + case 056: + case 057: + case 060: + case 061: + case 062: + case 063: + case 064: + case 065: + case 066: + case 067: + case 070: + case 071: + case 072: + case 073: + case 074: + case 075: + case 076: + case 077: + case 0100: + case 0101: + case 0102: + case 0103: + case 0104: + case 0105: + case 0106: + case 0107: + case 0110: + case 0111: + case 0112: + case 0113: + case 0114: + case 0115: + case 0116: + case 0117: + case 0120: + case 0121: + case 0122: + case 0123: + case 0124: + case 0125: + case 0126: + case 0127: + case 0130: + case 0131: + case 0132: + case 0133: + case 0135: + case 0136: + case 0137: + case 0140: + case 0141: + case 0142: + case 0143: + case 0144: + case 0145: + case 0146: + case 0147: + case 0150: + case 0151: + case 0152: + case 0153: + case 0154: + case 0155: + case 0156: + case 0157: + case 0160: + case 0161: + case 0162: + case 0163: + case 0164: + case 0165: + case 0166: + case 0167: + case 0170: + case 0171: + case 0172: + case 0174: + case 0175: + case 0176: c_in = c; return Operator::ACCEPT; default: break; } - + bincClient.unreadChar(c); return Operator::REJECT; @@ -643,8 +728,7 @@ Operator::ParseResult Binc::expectSPACE(void) if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); - if (bincClient.getLastError() == IODevice::Timeout) - return Operator::TIMEOUT; + if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT; return Operator::ERROR; } @@ -667,11 +751,9 @@ Operator::ParseResult Binc::expectMailbox(string &s_in) Operator::ParseResult Binc::expectAstring(string &s_in) { Operator::ParseResult res; - if ((res = expectAtom(s_in)) == Operator::ACCEPT) - return Operator::ACCEPT; + if ((res = expectAtom(s_in)) == Operator::ACCEPT) return Operator::ACCEPT; - if ((res = expectString(s_in)) == Operator::ACCEPT) - return Operator::ACCEPT; + if ((res = expectString(s_in)) == Operator::ACCEPT) return Operator::ACCEPT; return res; } @@ -685,33 +767,104 @@ Operator::ParseResult Binc::expectAtomChar(int &c_in) if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); - if (bincClient.getLastError() == IODevice::Timeout) - return Operator::TIMEOUT; + if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT; return Operator::ERROR; } switch (c) { - case 041: case 043: case 044: case 046: case 047: case 053: - case 054: case 055: case 056: case 057: case 060: case 061: - case 062: case 063: case 064: case 065: case 066: case 067: - case 070: case 071: case 072: case 073: case 074: case 075: - case 076: case 077: case 0100: case 0101: case 0102: case 0103: - case 0104: case 0105: case 0106: case 0107: case 0110: case 0111: - case 0112: case 0113: case 0114: case 0115: case 0116: case 0117: - case 0120: case 0121: case 0122: case 0123: case 0124: case 0125: - case 0126: case 0127: case 0130: case 0131: case 0132: case 0133: - case 0135: case 0136: case 0137: case 0140: case 0141: case 0142: - case 0143: case 0144: case 0145: case 0146: case 0147: case 0150: - case 0151: case 0152: case 0153: case 0154: case 0155: case 0156: - case 0157: case 0160: case 0161: case 0162: case 0163: case 0164: - case 0165: case 0166: case 0167: case 0170: case 0171: case 0172: - case 0174: case 0175: case 0176: + case 041: + case 043: + case 044: + case 046: + case 047: + case 053: + case 054: + case 055: + case 056: + case 057: + case 060: + case 061: + case 062: + case 063: + case 064: + case 065: + case 066: + case 067: + case 070: + case 071: + case 072: + case 073: + case 074: + case 075: + case 076: + case 077: + case 0100: + case 0101: + case 0102: + case 0103: + case 0104: + case 0105: + case 0106: + case 0107: + case 0110: + case 0111: + case 0112: + case 0113: + case 0114: + case 0115: + case 0116: + case 0117: + case 0120: + case 0121: + case 0122: + case 0123: + case 0124: + case 0125: + case 0126: + case 0127: + case 0130: + case 0131: + case 0132: + case 0133: + case 0135: + case 0136: + case 0137: + case 0140: + case 0141: + case 0142: + case 0143: + case 0144: + case 0145: + case 0146: + case 0147: + case 0150: + case 0151: + case 0152: + case 0153: + case 0154: + case 0155: + case 0156: + case 0157: + case 0160: + case 0161: + case 0162: + case 0163: + case 0164: + case 0165: + case 0166: + case 0167: + case 0170: + case 0171: + case 0172: + case 0174: + case 0175: + case 0176: c_in = c; return Operator::ACCEPT; default: break; } - + bincClient.unreadChar(c); return Operator::REJECT; } @@ -739,11 +892,9 @@ Operator::ParseResult Binc::expectAtom(string &s_in) Operator::ParseResult Binc::expectString(string &s_in) { Operator::ParseResult res; - if ((res = expectQuoted(s_in)) == Operator::ACCEPT) - return Operator::ACCEPT; + if ((res = expectQuoted(s_in)) == Operator::ACCEPT) return Operator::ACCEPT; - if ((res = expectLiteral(s_in)) == Operator::ACCEPT) - return Operator::ACCEPT; + if ((res = expectLiteral(s_in)) == Operator::ACCEPT) return Operator::ACCEPT; return res; } @@ -755,9 +906,8 @@ Operator::ParseResult Binc::expectQuoted(string &s_in) int quotedchar; Operator::ParseResult res; - if ((res = expectThisString("\"")) != Operator::ACCEPT) - return res; - + if ((res = expectThisString("\"")) != Operator::ACCEPT) return res; + while ((res = expectQuotedChar(quotedchar)) == Operator::ACCEPT) quoted += quotedchar; @@ -779,28 +929,134 @@ Operator::ParseResult Binc::expectQuotedChar(int &c_in) if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); - if (bincClient.getLastError() == IODevice::Timeout) - return Operator::TIMEOUT; + if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT; return Operator::ERROR; } switch (c) { - case 01: case 02: case 03: case 04: case 05: case 06: case 07: - case 010: case 011: case 013: case 014: case 016: case 017: - case 020: case 021: case 022: case 023: case 024: case 025: case 026: case 027: - case 030: case 031: case 032: case 033: case 034: case 035: case 036: case 037: - case 040: case 041: case 043: case 044: case 045: case 046: case 047: - case 050: case 051: case 052: case 053: case 054: case 055: case 056: case 057: - case 060: case 061: case 062: case 063: case 064: case 065: case 066: case 067: - case 070: case 071: case 072: case 073: case 074: case 075: case 076: case 077: - case 0100: case 0101: case 0102: case 0103: case 0104: case 0105: case 0106: case 0107: - case 0110: case 0111: case 0112: case 0113: case 0114: case 0115: case 0116: case 0117: - case 0120: case 0121: case 0122: case 0123: case 0124: case 0125: case 0126: case 0127: - case 0130: case 0131: case 0132: case 0133: case 0135: case 0136: case 0137: - case 0140: case 0141: case 0142: case 0143: case 0144: case 0145: case 0146: case 0147: - case 0150: case 0151: case 0152: case 0153: case 0154: case 0155: case 0156: case 0157: - case 0160: case 0161: case 0162: case 0163: case 0164: case 0165: case 0166: case 0167: - case 0170: case 0171: case 0172: case 0173: case 0174: case 0175: case 0176: case 0177: + case 01: + case 02: + case 03: + case 04: + case 05: + case 06: + case 07: + case 010: + case 011: + case 013: + case 014: + case 016: + case 017: + case 020: + case 021: + case 022: + case 023: + case 024: + case 025: + case 026: + case 027: + case 030: + case 031: + case 032: + case 033: + case 034: + case 035: + case 036: + case 037: + case 040: + case 041: + case 043: + case 044: + case 045: + case 046: + case 047: + case 050: + case 051: + case 052: + case 053: + case 054: + case 055: + case 056: + case 057: + case 060: + case 061: + case 062: + case 063: + case 064: + case 065: + case 066: + case 067: + case 070: + case 071: + case 072: + case 073: + case 074: + case 075: + case 076: + case 077: + case 0100: + case 0101: + case 0102: + case 0103: + case 0104: + case 0105: + case 0106: + case 0107: + case 0110: + case 0111: + case 0112: + case 0113: + case 0114: + case 0115: + case 0116: + case 0117: + case 0120: + case 0121: + case 0122: + case 0123: + case 0124: + case 0125: + case 0126: + case 0127: + case 0130: + case 0131: + case 0132: + case 0133: + case 0135: + case 0136: + case 0137: + case 0140: + case 0141: + case 0142: + case 0143: + case 0144: + case 0145: + case 0146: + case 0147: + case 0150: + case 0151: + case 0152: + case 0153: + case 0154: + case 0155: + case 0156: + case 0157: + case 0160: + case 0161: + case 0162: + case 0163: + case 0164: + case 0165: + case 0166: + case 0167: + case 0170: + case 0171: + case 0172: + case 0173: + case 0174: + case 0175: + case 0176: + case 0177: c_in = c; return Operator::ACCEPT; case '\\': { @@ -824,7 +1080,7 @@ Operator::ParseResult Binc::expectQuotedChar(int &c_in) default: break; } - + bincClient.unreadChar(c); return Operator::REJECT; } @@ -850,8 +1106,7 @@ Operator::ParseResult Binc::expectLiteral(string &s_in) // sent by the client with an extra '+' appended after the octet // count. bool literalPlus = false; - if ((res = expectThisString("+")) == Operator::ACCEPT) - literalPlus = true; + if ((res = expectThisString("+")) == Operator::ACCEPT) literalPlus = true; if ((res = expectThisString("}")) != Operator::ACCEPT) { session.setLastError("expected }"); @@ -900,9 +1155,8 @@ Operator::ParseResult Binc::expectNumber(unsigned int &i_in) i_in = (i_in * 10) + n; } - if (res == Operator::TIMEOUT) - return res; - + if (res == Operator::TIMEOUT) return res; + return Operator::ACCEPT; } @@ -915,8 +1169,7 @@ Operator::ParseResult Binc::expectDigit(unsigned int &i_in) if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); - if (bincClient.getLastError() == IODevice::Timeout) - return Operator::TIMEOUT; + if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT; return Operator::ERROR; } @@ -926,8 +1179,7 @@ Operator::ParseResult Binc::expectDigit(unsigned int &i_in) } else bincClient.unreadChar(c); - if (expectDigitNZ(i_in) != Operator::ACCEPT) - return Operator::REJECT; + if (expectDigitNZ(i_in) != Operator::ACCEPT) return Operator::REJECT; return Operator::ACCEPT; } @@ -940,23 +1192,40 @@ Operator::ParseResult Binc::expectDigitNZ(unsigned int &i_in) char c; if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); - - if (bincClient.getLastError() == IODevice::Timeout) - return Operator::TIMEOUT; + + if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT; return Operator::ERROR; } switch (c) { - case '1': i_in = 1; break; - case '2': i_in = 2; break; - case '3': i_in = 3; break; - case '4': i_in = 4; break; - case '5': i_in = 5; break; - case '6': i_in = 6; break; - case '7': i_in = 7; break; - case '8': i_in = 8; break; - case '9': i_in = 9; break; - case -1: + case '1': + i_in = 1; + break; + case '2': + i_in = 2; + break; + case '3': + i_in = 3; + break; + case '4': + i_in = 4; + break; + case '5': + i_in = 5; + break; + case '6': + i_in = 6; + break; + case '7': + i_in = 7; + break; + case '8': + i_in = 8; + break; + case '9': + i_in = 9; + break; + case -1: session.setLastError(bincClient.getLastErrorString()); return Operator::ERROR; case -2: @@ -965,7 +1234,7 @@ Operator::ParseResult Binc::expectDigitNZ(unsigned int &i_in) bincClient.unreadChar(c); return Operator::REJECT; } - + return Operator::ACCEPT; } @@ -973,14 +1242,13 @@ Operator::ParseResult Binc::expectDigitNZ(unsigned int &i_in) Operator::ParseResult Binc::expectSet(SequenceSet &s_in) { Session &session = Session::getInstance(); - unsigned int seqnum = (unsigned int) -1; - + unsigned int seqnum = (unsigned int)-1; + Operator::ParseResult res; /* if a set does not start with a sequencenum, then it's not a * set. :-) seqnum == -1 means '*'. */ - if ((res = expectSequenceNum(seqnum)) != Operator::ACCEPT) - return res; + if ((res = expectSequenceNum(seqnum)) != Operator::ACCEPT) return res; /* the first number is always a part of the set */ s_in.addNumber(seqnum); @@ -989,7 +1257,7 @@ Operator::ParseResult Binc::expectSet(SequenceSet &s_in) * sequencenum after the colon. if not, it's a syntax error. a * colon delimits two numbers in a range. */ if ((res = expectThisString(":")) == Operator::ACCEPT) { - unsigned int seqnum2 = (unsigned int) -1; + unsigned int seqnum2 = (unsigned int)-1; if ((res = expectSequenceNum(seqnum2)) != Operator::ACCEPT) { session.setLastError("expected sequencenum"); return res; @@ -1018,13 +1286,12 @@ Operator::ParseResult Binc::expectSequenceNum(unsigned int &i_in) if (!bincClient.readChar(&c)) { session.setLastError(bincClient.getLastErrorString()); - if (bincClient.getLastError() == IODevice::Timeout) - return Operator::TIMEOUT; + if (bincClient.getLastError() == IODevice::Timeout) return Operator::TIMEOUT; return Operator::ERROR; } if (c == '*') { - i_in = (unsigned int) -1; + i_in = (unsigned int)-1; return Operator::ACCEPT; } else bincClient.unreadChar(c); @@ -1041,15 +1308,13 @@ Operator::ParseResult Binc::expectNZNumber(unsigned int &i_in) unsigned int c; Operator::ParseResult res; - if ((res = expectDigitNZ(c)) != Operator::ACCEPT) - return res; + if ((res = expectDigitNZ(c)) != Operator::ACCEPT) return res; i_in = c; while ((res = expectDigit(c)) == Operator::ACCEPT) i_in = (i_in * 10) + c; - if (res == Operator::TIMEOUT) - return res; + if (res == Operator::TIMEOUT) return res; return Operator::ACCEPT; } |