diff options
author | Mike Buland <eichlan@xagasoft.com> | 2008-02-07 14:59:11 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2008-02-07 14:59:11 +0000 |
commit | 5574841cc88412854b2cb94253152b3606803e2a (patch) | |
tree | 444381af56492c049e00b9b717a225333de614a5 /src/minimacro.cpp | |
parent | 3e581ae682dc6050b8b8c41c917ae62a040719d8 (diff) | |
download | libbu++-5574841cc88412854b2cb94253152b3606803e2a.tar.gz libbu++-5574841cc88412854b2cb94253152b3606803e2a.tar.bz2 libbu++-5574841cc88412854b2cb94253152b3606803e2a.tar.xz libbu++-5574841cc88412854b2cb94253152b3606803e2a.zip |
Corrected a very rare race condition in Bu::ItoServer where there was a chance
that the client would disconnect so quickly that it would be cleaned up before
it was properly accounted for. I apparently added something to MiniMacro a
while ago...probably the end tags I think...
Diffstat (limited to '')
-rw-r--r-- | src/minimacro.cpp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/minimacro.cpp b/src/minimacro.cpp index 2bd156c..1d2abf8 100644 --- a/src/minimacro.cpp +++ b/src/minimacro.cpp | |||
@@ -20,8 +20,9 @@ Bu::MiniMacro::~MiniMacro() | |||
20 | 20 | ||
21 | Bu::FString Bu::MiniMacro::parse( const Bu::FString &sIn ) | 21 | Bu::FString Bu::MiniMacro::parse( const Bu::FString &sIn ) |
22 | { | 22 | { |
23 | bContinue = true; | ||
23 | Bu::FString sOut; | 24 | Bu::FString sOut; |
24 | for( sCur = sIn.getStr(); *sCur; sCur++ ) | 25 | for( sCur = sIn.getStr(); *sCur && bContinue; sCur++ ) |
25 | { | 26 | { |
26 | if( *sCur == '{' ) | 27 | if( *sCur == '{' ) |
27 | { | 28 | { |
@@ -53,6 +54,8 @@ Bu::FString Bu::MiniMacro::parse( const Bu::FString &sIn ) | |||
53 | } | 54 | } |
54 | } | 55 | } |
55 | 56 | ||
57 | iLastPos = (int)sCur - (int)sIn.getStr(); | ||
58 | |||
56 | return sOut; | 59 | return sOut; |
57 | } | 60 | } |
58 | 61 | ||
@@ -101,6 +104,29 @@ Bu::FString Bu::MiniMacro::parseCond() | |||
101 | Bu::FString Bu::MiniMacro::parseCmd() | 104 | Bu::FString Bu::MiniMacro::parseCmd() |
102 | { | 105 | { |
103 | Bu::FString sOut; | 106 | Bu::FString sOut; |
107 | const char *sNext = sCur; | ||
108 | for(; *sNext != ':' && *sNext != '}' && *sNext != '\0'; sNext++ ); | ||
109 | if( *sNext != '\0' ) | ||
110 | { | ||
111 | Bu::FString sName( sCur, (int)sNext-(int)sCur ); | ||
112 | if( sName == "end" ) | ||
113 | { | ||
114 | sCur = sNext; | ||
115 | bContinue = false; | ||
116 | return sOut; | ||
117 | } | ||
118 | else | ||
119 | { | ||
120 | throw Bu::ExceptionBase("Unknown command '%s'.", | ||
121 | sName.getStr() | ||
122 | ); | ||
123 | } | ||
124 | } | ||
125 | else | ||
126 | { | ||
127 | printf("Uh...?\n"); | ||
128 | } | ||
129 | |||
104 | printf("%20s\n", sCur ); | 130 | printf("%20s\n", sCur ); |
105 | return sOut; | 131 | return sOut; |
106 | } | 132 | } |
@@ -142,3 +168,8 @@ const Bu::FString &Bu::MiniMacro::getvar( const Bu::FString &sName ) | |||
142 | return hVars.get( sName ); | 168 | return hVars.get( sName ); |
143 | } | 169 | } |
144 | 170 | ||
171 | int Bu::MiniMacro::getPosition() | ||
172 | { | ||
173 | return iLastPos; | ||
174 | } | ||
175 | |||