cvs: php4 /ext/ircg ircg.c ircg_scanner.c ircg_scanner.re
| From: | Sascha Schumann | Date: | Wed, 25 Jul 2001 16:23:14 +0000 |
| Subject: | cvs: php4 /ext/ircg ircg.c ircg_scanner.c ircg_scanner.re | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-6345@lists.php.net to get a copy of this message | ||
sas Wed Jul 25 12:23:14 2001 EDT
Modified files:
/php4/ext/ircg ircg.c ircg_scanner.c ircg_scanner.re
Log:
Replace strchr in inner tokener loop for format strings
Fix the message scanner once again.. the rules matched too much.
Index: php4/ext/ircg/ircg.c diff -u php4/ext/ircg/ircg.c:1.85 php4/ext/ircg/ircg.c:1.86 --- php4/ext/ircg/ircg.c:1.85 Thu Jul 19 22:26:09 2001 +++ php4/ext/ircg/ircg.c Wed Jul 25 12:23:03 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg.c,v 1.85 2001/07/20 02:26:09 sas Exp $ */ +/* $Id: ircg.c,v 1.86 2001/07/25 16:23:03 sas Exp $ */ #include <time.h> @@ -258,9 +258,6 @@ } conn->fd = -2; zend_hash_index_del(&h_irconn, conn->irconn_id); -#if IRCG_API_VERSION >= 20010601 - c->magic = NULL; -#endif zend_hash_destroy(&conn->ctcp_msgs); if (conn->buffer.c) smart_str_free_ex(&conn->buffer, 1); @@ -377,21 +374,19 @@ if (cache_entries[hash].src.len == src->len && memcmp(cache_entries[hash].src.c, src->c, src->len) == 0) { cache_hits++; - - smart_str_append_ex(result, &cache_entries[hash].result, 1); } else { cache_misses++; - if (cache_entries[hash].src.len != 0) + if (cache_entries[hash].src.len != 0) { cache_collisions++; - - cache_entries[hash].src.len = 0; + cache_entries[hash].src.len = 0; + } cache_entries[hash].result.len = 0; ircg_mirc_color(src->c, &cache_entries[hash].result, src->len); - + smart_str_append_ex(&cache_entries[hash].src, src, 1); - smart_str_append_ex(result, &cache_entries[hash].result, 1); } + smart_str_append_ex(result, &cache_entries[hash].result, 1); } else { /* No channel message, no caching */ ircg_mirc_color(src->c, result, src->len); @@ -404,7 +399,7 @@ static void token_compiler(const char *fmt, format_msg_t *f) { - const char *p; + const char *p, *pe; char *q; token_t *t = NULL; int n = 0; @@ -420,8 +415,11 @@ } p = fmt; + pe = fmt + strlen(p); - while ((q = strchr(p, '%'))) { + do { + q = p; + while (*q != '%') if (++q >= pe) break; len = q - p; if (len > 0) { @@ -433,11 +431,12 @@ mode = 0; next: - c = q[1]; + c = *++q; /* skip '%' and look at next char */ switch (c) { - case '1': mode |= 1; q++; goto next; - case '2': mode |= 2; q++; goto next; + case '1': mode |= 1; goto next; + case '2': mode |= 2; goto next; + /* associate mode bits with each command where applicable */ case 'c': NEW_TOKEN(C_CHANNEL, v) = mode; break; case 't': NEW_TOKEN(C_TO, v) = mode; break; case 'f': NEW_TOKEN(C_FROM, v) = mode; break; @@ -445,17 +444,17 @@ case 'm': NEW_TOKEN(C_MESSAGE, v) = mode | P_MIRC; break; case 'j': NEW_TOKEN(C_MESSAGE, v) = mode | P_MIRC | P_JS; break; - case '%': NEW_TOKEN(C_PERCENT, v); break; + case '%': NEW_TOKEN(C_PERCENT, v) = 0; break; default: /* ignore invalid combinations */ } - p = q + 2; - } + p = q + 1; /* skip last format character */ + } while (p < pe); - if (*p) { + if (p < pe) { s = malloc(sizeof *s); s->c = 0; - smart_str_appends_ex(s, p, 1); + smart_str_appendl_ex(s, p, pe - p, 1); NEW_TOKEN(C_STRING, ptr) = s; } Index: php4/ext/ircg/ircg_scanner.c diff -u php4/ext/ircg/ircg_scanner.c:1.12 php4/ext/ircg/ircg_scanner.c:1.13 --- php4/ext/ircg/ircg_scanner.c:1.12 Mon Jul 9 13:50:25 2001 +++ php4/ext/ircg/ircg_scanner.c Wed Jul 25 12:23:03 2001 @@ -1,5 +1,5 @@ -/* Generated by re2c 0.5 on Mon Jul 9 19:47:08 2001 */ -#line 1 "ircg_scanner.re" +/* Generated by re2c 0.5 on Wed Jul 25 18:18:59 2001 */ +#line 1 "/home/sas/src/php4/ext/ircg/ircg_scanner.re" /* +----------------------------------------------------------------------+ | PHP version 4.0 | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg_scanner.c,v 1.12 2001/07/09 17:50:25 sas Exp $ */ +/* $Id: ircg_scanner.c,v 1.13 2001/07/25 16:23:03 sas Exp $ */ #include <ext/standard/php_smart_str.h> #include <stdio.h> @@ -67,7 +67,7 @@ #line 77 -#define YYFILL(n) { } +#define YYFILL(n) do { } while (0) #define YYCTYPE unsigned char #define YYCURSOR xp #define YYLIMIT end @@ -209,286 +209,142 @@ YYCTYPE yych; unsigned int yyaccept; static unsigned char yybm[] = { - 32, 64, 0, 0, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 0, 64, - 64, 64, 64, 64, 64, 64, 64, 0, - 64, 64, 64, 64, 64, 64, 0, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 0, 64, 0, 64, 0, 64, - 64, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 64, 64, 64, 64, 64, - 64, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, }; goto yy0; yy1: ++YYCURSOR; yy0: if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; - if(yych <= '&'){ - if(yych <= '\025'){ - if(yych <= '\001'){ - if(yych <= '\000') goto yy20; - goto yy18; - } else { - if(yych <= '\002') goto yy12; - if(yych <= '\003') goto yy4; - goto yy18; - } - } else { - if(yych <= '\036'){ - if(yych <= '\026') goto yy16; - goto yy18; + if(yych <= '%'){ + if(yych <= '\003'){ + if(yych <= '\000') goto yy2; + if(yych <= '\001') goto yy19; + if(yych <= '\002') goto yy13; + goto yy5; + } else { + if(yych <= '\026'){ + if(yych <= '\025') goto yy19; + goto yy17; } else { - if(yych <= '\037') goto yy14; - if(yych <= '%') goto yy18; - goto yy10; + if(yych == '\037') goto yy15; + goto yy19; } } } else { - if(yych <= '='){ - if(yych <= ':'){ - if(yych <= '9') goto yy18; + if(yych <= '>'){ + if(yych <= ';'){ + if(yych <= '&') goto yy11; goto yy19; } else { - if(yych == '<') goto yy6; - goto yy18; + if(yych <= '<') goto yy7; + if(yych <= '=') goto yy19; + goto yy9; } } else { if(yych <= 'Z'){ - if(yych <= '>') goto yy8; - if(yych <= '@') goto yy18; + if(yych <= '@') goto yy19; + goto yy3; } else { - if(yych <= '`') goto yy18; - if(yych >= '{') goto yy18; + if(yych <= '`') goto yy19; + if(yych <= 'z') goto yy3; + goto yy19; } } } -yy2: yyaccept = 0; +yy2: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy4; + } +yy3: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 128) goto yy28; - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy23; - if(yych >= '\004') goto yy23; - } else { - if(yych <= '\026') goto yy3; - if(yych != '\037') goto yy23; - } + if(yych <= '@'){ + if(yych <= '/') goto yy4; + if(yych <= ':') goto yy21; } else { - if(yych <= ';'){ - if(yych <= '&') goto yy3; - if(yych == ':') goto yy30; - goto yy23; - } else { - if(yych == '=') goto yy23; - if(yych >= '?') goto yy23; - } + if(yych <= 'Z') goto yy21; + if(yych <= '`') goto yy4; + if(yych <= 'z') goto yy21; } -yy3: +yy4: #line 226 { passthru(STD_ARGS); goto state_plain; } -yy4: yych = *++YYCURSOR; -yy5: +yy5: yych = *++YYCURSOR; +yy6: #line 219 { mctx.fg_code = mctx.bg_code = -1; goto state_color_fg; } -yy6: yych = *++YYCURSOR; -yy7: +yy7: yych = *++YYCURSOR; +yy8: #line 220 { add_entity(STD_ARGS, "<"); goto state_plain; } -yy8: yych = *++YYCURSOR; -yy9: +yy9: yych = *++YYCURSOR; +yy10: #line 221 { add_entity(STD_ARGS, ">"); goto state_plain; } -yy10: yych = *++YYCURSOR; -yy11: +yy11: yych = *++YYCURSOR; +yy12: #line 222 { add_entity(STD_ARGS, "&"); goto state_plain; } -yy12: yych = *++YYCURSOR; -yy13: +yy13: yych = *++YYCURSOR; +yy14: #line 223 { handle_bold(STD_ARGS, 0); goto state_plain; } -yy14: yych = *++YYCURSOR; -yy15: +yy15: yych = *++YYCURSOR; +yy16: #line 224 { handle_underline(STD_ARGS, 0); goto state_plain; } -yy16: yych = *++YYCURSOR; -yy17: +yy17: yych = *++YYCURSOR; +yy18: #line 225 { handle_italic(STD_ARGS, 0); goto state_plain; } -yy18: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy23; - if(yych <= '\003') goto yy3; - goto yy23; - } else { - if(yych <= '\026') goto yy3; - if(yych == '\037') goto yy3; - goto yy23; - } - } else { - if(yych <= ';'){ - if(yych <= '&') goto yy3; - if(yych == ':') goto yy3; - goto yy23; - } else { - if(yych == '=') goto yy23; - if(yych <= '>') goto yy3; - goto yy23; - } - } yy19: yych = *++YYCURSOR; - goto yy3; -yy20: yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy23; - if(yych >= '\004') goto yy23; - } else { - if(yych <= '\026') goto yy21; - if(yych != '\037') goto yy23; - } - } else { - if(yych <= ';'){ - if(yych <= '&') goto yy21; - if(yych != ':') goto yy23; - } else { - if(yych == '=') goto yy23; - if(yych >= '?') goto yy23; - } - } -yy21: -#line 228 - { goto stop; } -yy22: yyaccept = 2; - YYMARKER = ++YYCURSOR; + goto yy4; +yy20: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy23: if(yybm[0+yych] & 32) goto yy22; - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy25; - if(yych >= '\004') goto yy25; - } else { - if(yych <= '\026') goto yy24; - if(yych != '\037') goto yy25; - } - } else { - if(yych <= ';'){ - if(yych <= '&') goto yy24; - if(yych != ':') goto yy25; - } else { - if(yych == '=') goto yy25; - if(yych >= '?') goto yy25; - } - } -yy24: -#line 227 - { --YYCURSOR; passthru(STD_ARGS); goto stop; } -yy25: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy26: if(yybm[0+yych] & 32) goto yy22; - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy25; - if(yych >= '\004') goto yy25; - } else { - if(yych <= '\026') goto yy27; - if(yych != '\037') goto yy25; - } - } else { - if(yych <= ';'){ - if(yych <= '&') goto yy27; - if(yych != ':') goto yy25; - } else { - if(yych == '=') goto yy25; - if(yych >= '?') goto yy25; - } - } -yy27: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; - case 2: goto yy24; - case 1: goto yy21; - } -yy28: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy29: if(yybm[0+yych] & 32) goto yy22; - if(yych <= '9'){ - if(yych <= '\036'){ - if(yych <= '\003'){ - if(yych <= '\001') goto yy25; - goto yy27; - } else { - if(yych == '\026') goto yy27; - goto yy25; - } - } else { - if(yych <= '%'){ - if(yych <= '\037') goto yy27; - goto yy25; - } else { - if(yych <= '&') goto yy27; - if(yych <= '/') goto yy25; - goto yy28; - } - } - } else { - if(yych <= '>'){ - if(yych <= ';'){ - if(yych >= ';') goto yy25; - } else { - if(yych == '=') goto yy25; - goto yy27; - } - } else { - if(yych <= 'Z'){ - if(yych <= '@') goto yy25; - goto yy28; - } else { - if(yych <= '`') goto yy25; - if(yych <= 'z') goto yy28; - goto yy25; - } - } - } -yy30: yych = *++YYCURSOR; - if(yych != '/') goto yy27; -yy31: yych = *++YYCURSOR; - if(yych != '/') goto yy27; -yy32: yych = *++YYCURSOR; -yy33: +yy21: if(yybm[0+yych] & 128) goto yy20; + if(yych != ':') goto yy2; +yy22: yych = *++YYCURSOR; + if(yych != '/') goto yy2; +yy23: yych = *++YYCURSOR; + if(yych != '/') goto yy2; +yy24: yych = *++YYCURSOR; +yy25: #line 218 { handle_scheme(STD_ARGS); goto state_url; } } -#line 229 +#line 227 state_url: @@ -530,43 +386,43 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - goto yy34; -yy35: ++YYCURSOR; -yy34: + goto yy26; +yy27: ++YYCURSOR; +yy26: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= '>'){ if(yych <= '"'){ - if(yych != '!') goto yy38; + if(yych != '!') goto yy30; } else { - if(yych == '<') goto yy38; - if(yych >= '>') goto yy38; + if(yych == '<') goto yy30; + if(yych >= '>') goto yy30; } } else { if(yych <= '`'){ - if(yych <= 'Z') goto yy36; - if(yych != '_') goto yy38; + if(yych <= 'Z') goto yy28; + if(yych != '_') goto yy30; } else { - if(yych <= 'z') goto yy36; - if(yych != '~') goto yy38; + if(yych <= 'z') goto yy28; + if(yych != '~') goto yy30; } } -yy36: yych = *++YYCURSOR; - goto yy41; -yy37: -#line 234 +yy28: yych = *++YYCURSOR; + goto yy33; +yy29: +#line 232 { handle_url(STD_ARGS); goto state_plain; } -yy38: yych = *++YYCURSOR; -yy39: -#line 235 +yy30: yych = *++YYCURSOR; +yy31: +#line 233 { passthru(STD_ARGS); goto state_plain; } -yy40: ++YYCURSOR; +yy32: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy41: if(yybm[0+yych] & 128) goto yy40; - goto yy37; +yy33: if(yybm[0+yych] & 128) goto yy32; + goto yy29; } -#line 236 +#line 234 @@ -575,27 +431,27 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy42; -yy43: ++YYCURSOR; -yy42: + goto yy34; +yy35: ++YYCURSOR; +yy34: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych <= '/') goto yy46; - if(yych >= ':') goto yy46; -yy44: yych = *++YYCURSOR; - if(yych <= '/') goto yy45; - if(yych <= '9') goto yy48; -yy45: -#line 242 + if(yych <= '/') goto yy38; + if(yych >= ':') goto yy38; +yy36: yych = *++YYCURSOR; + if(yych <= '/') goto yy37; + if(yych <= '9') goto yy40; +yy37: +#line 240 { handle_color_digit(STD_ARGS, 0); goto state_color_comma; } -yy46: yych = *++YYCURSOR; -yy47: -#line 243 +yy38: yych = *++YYCURSOR; +yy39: +#line 241 { finish_color_stuff(STD_ARGS); passthru(STD_ARGS); goto state_plain; } -yy48: yych = *++YYCURSOR; - goto yy45; +yy40: yych = *++YYCURSOR; + goto yy37; } -#line 244 +#line 242 @@ -604,22 +460,22 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy49; -yy50: ++YYCURSOR; -yy49: + goto yy41; +yy42: ++YYCURSOR; +yy41: if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych != ',') goto yy53; -yy51: yych = *++YYCURSOR; -yy52: -#line 250 + if(yych != ',') goto yy45; +yy43: yych = *++YYCURSOR; +yy44: +#line 248 { goto state_color_bg; } -yy53: yych = *++YYCURSOR; -yy54: -#line 251 +yy45: yych = *++YYCURSOR; +yy46: +#line 249 { YYCURSOR--; commit_color_stuff(STD_ARGS); goto state_plain; } } -#line 252 +#line 250 @@ -628,27 +484,27 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy55; -yy56: ++YYCURSOR; -yy55: + goto yy47; +yy48: ++YYCURSOR; +yy47: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych <= '/') goto yy59; - if(yych >= ':') goto yy59; -yy57: yych = *++YYCURSOR; - if(yych <= '/') goto yy58; - if(yych <= '9') goto yy61; -yy58: -#line 258 + if(yych <= '/') goto yy51; + if(yych >= ':') goto yy51; +yy49: yych = *++YYCURSOR; + if(yych <= '/') goto yy50; + if(yych <= '9') goto yy53; +yy50: +#line 256 { handle_color_digit(STD_ARGS, 1); commit_color_stuff(STD_ARGS); goto state_plain; } -yy59: yych = *++YYCURSOR; -yy60: -#line 259 +yy51: yych = *++YYCURSOR; +yy52: +#line 257 { commit_color_stuff(STD_ARGS); goto state_plain; } -yy61: yych = *++YYCURSOR; - goto yy58; +yy53: yych = *++YYCURSOR; + goto yy50; } -#line 260 +#line 258 stop: Index: php4/ext/ircg/ircg_scanner.re diff -u php4/ext/ircg/ircg_scanner.re:1.12 php4/ext/ircg/ircg_scanner.re:1.13 --- php4/ext/ircg/ircg_scanner.re:1.12 Mon Jul 9 13:50:25 2001 +++ php4/ext/ircg/ircg_scanner.re Wed Jul 25 12:23:05 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg_scanner.re,v 1.12 2001/07/09 17:50:25 sas Exp $ */ +/* $Id: ircg_scanner.re,v 1.13 2001/07/25 16:23:05 sas Exp $ */ #include <ext/standard/php_smart_str.h> #include <stdio.h> @@ -76,7 +76,7 @@ italic = ""; */ -#define YYFILL(n) { } +#define YYFILL(n) do { } while (0) #define YYCTYPE unsigned char #define YYCURSOR xp #define YYLIMIT end @@ -224,8 +224,6 @@ underline { handle_underline(STD_ARGS, 0); goto state_plain; } italic { handle_italic(STD_ARGS, 0); goto state_plain; } anynoneof { passthru(STD_ARGS); goto state_plain; } - (any\[<>\037&:])+ eof { --YYCURSOR; passthru(STD_ARGS); goto stop; } - eof { goto stop; } */ state_url:
Index: php4/ext/ircg/ircg.c diff -u php4/ext/ircg/ircg.c:1.85 php4/ext/ircg/ircg.c:1.86 --- php4/ext/ircg/ircg.c:1.85 Thu Jul 19 22:26:09 2001 +++ php4/ext/ircg/ircg.c Wed Jul 25 12:23:03 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg.c,v 1.85 2001/07/20 02:26:09 sas Exp $ */ +/* $Id: ircg.c,v 1.86 2001/07/25 16:23:03 sas Exp $ */ #include <time.h> @@ -258,9 +258,6 @@ } conn->fd = -2; zend_hash_index_del(&h_irconn, conn->irconn_id); -#if IRCG_API_VERSION >= 20010601 - c->magic = NULL; -#endif zend_hash_destroy(&conn->ctcp_msgs); if (conn->buffer.c) smart_str_free_ex(&conn->buffer, 1); @@ -377,21 +374,19 @@ if (cache_entries[hash].src.len == src->len && memcmp(cache_entries[hash].src.c, src->c, src->len) == 0) { cache_hits++; - - smart_str_append_ex(result, &cache_entries[hash].result, 1); } else { cache_misses++; - if (cache_entries[hash].src.len != 0) + if (cache_entries[hash].src.len != 0) { cache_collisions++; - - cache_entries[hash].src.len = 0; + cache_entries[hash].src.len = 0; + } cache_entries[hash].result.len = 0; ircg_mirc_color(src->c, &cache_entries[hash].result, src->len); - + smart_str_append_ex(&cache_entries[hash].src, src, 1); - smart_str_append_ex(result, &cache_entries[hash].result, 1); } + smart_str_append_ex(result, &cache_entries[hash].result, 1); } else { /* No channel message, no caching */ ircg_mirc_color(src->c, result, src->len); @@ -404,7 +399,7 @@ static void token_compiler(const char *fmt, format_msg_t *f) { - const char *p; + const char *p, *pe; char *q; token_t *t = NULL; int n = 0; @@ -420,8 +415,11 @@ } p = fmt; + pe = fmt + strlen(p); - while ((q = strchr(p, '%'))) { + do { + q = p; + while (*q != '%') if (++q >= pe) break; len = q - p; if (len > 0) { @@ -433,11 +431,12 @@ mode = 0; next: - c = q[1]; + c = *++q; /* skip '%' and look at next char */ switch (c) { - case '1': mode |= 1; q++; goto next; - case '2': mode |= 2; q++; goto next; + case '1': mode |= 1; goto next; + case '2': mode |= 2; goto next; + /* associate mode bits with each command where applicable */ case 'c': NEW_TOKEN(C_CHANNEL, v) = mode; break; case 't': NEW_TOKEN(C_TO, v) = mode; break; case 'f': NEW_TOKEN(C_FROM, v) = mode; break; @@ -445,17 +444,17 @@ case 'm': NEW_TOKEN(C_MESSAGE, v) = mode | P_MIRC; break; case 'j': NEW_TOKEN(C_MESSAGE, v) = mode | P_MIRC | P_JS; break; - case '%': NEW_TOKEN(C_PERCENT, v); break; + case '%': NEW_TOKEN(C_PERCENT, v) = 0; break; default: /* ignore invalid combinations */ } - p = q + 2; - } + p = q + 1; /* skip last format character */ + } while (p < pe); - if (*p) { + if (p < pe) { s = malloc(sizeof *s); s->c = 0; - smart_str_appends_ex(s, p, 1); + smart_str_appendl_ex(s, p, pe - p, 1); NEW_TOKEN(C_STRING, ptr) = s; } Index: php4/ext/ircg/ircg_scanner.c diff -u php4/ext/ircg/ircg_scanner.c:1.12 php4/ext/ircg/ircg_scanner.c:1.13 --- php4/ext/ircg/ircg_scanner.c:1.12 Mon Jul 9 13:50:25 2001 +++ php4/ext/ircg/ircg_scanner.c Wed Jul 25 12:23:03 2001 @@ -1,5 +1,5 @@ -/* Generated by re2c 0.5 on Mon Jul 9 19:47:08 2001 */ -#line 1 "ircg_scanner.re" +/* Generated by re2c 0.5 on Wed Jul 25 18:18:59 2001 */ +#line 1 "/home/sas/src/php4/ext/ircg/ircg_scanner.re" /* +----------------------------------------------------------------------+ | PHP version 4.0 | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg_scanner.c,v 1.12 2001/07/09 17:50:25 sas Exp $ */ +/* $Id: ircg_scanner.c,v 1.13 2001/07/25 16:23:03 sas Exp $ */ #include <ext/standard/php_smart_str.h> #include <stdio.h> @@ -67,7 +67,7 @@ #line 77 -#define YYFILL(n) { } +#define YYFILL(n) do { } while (0) #define YYCTYPE unsigned char #define YYCURSOR xp #define YYLIMIT end @@ -209,286 +209,142 @@ YYCTYPE yych; unsigned int yyaccept; static unsigned char yybm[] = { - 32, 64, 0, 0, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 0, 64, - 64, 64, 64, 64, 64, 64, 64, 0, - 64, 64, 64, 64, 64, 64, 0, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 0, 64, 0, 64, 0, 64, - 64, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 64, 64, 64, 64, 64, - 64, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 0, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, }; goto yy0; yy1: ++YYCURSOR; yy0: if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; - if(yych <= '&'){ - if(yych <= '\025'){ - if(yych <= '\001'){ - if(yych <= '\000') goto yy20; - goto yy18; - } else { - if(yych <= '\002') goto yy12; - if(yych <= '\003') goto yy4; - goto yy18; - } - } else { - if(yych <= '\036'){ - if(yych <= '\026') goto yy16; - goto yy18; + if(yych <= '%'){ + if(yych <= '\003'){ + if(yych <= '\000') goto yy2; + if(yych <= '\001') goto yy19; + if(yych <= '\002') goto yy13; + goto yy5; + } else { + if(yych <= '\026'){ + if(yych <= '\025') goto yy19; + goto yy17; } else { - if(yych <= '\037') goto yy14; - if(yych <= '%') goto yy18; - goto yy10; + if(yych == '\037') goto yy15; + goto yy19; } } } else { - if(yych <= '='){ - if(yych <= ':'){ - if(yych <= '9') goto yy18; + if(yych <= '>'){ + if(yych <= ';'){ + if(yych <= '&') goto yy11; goto yy19; } else { - if(yych == '<') goto yy6; - goto yy18; + if(yych <= '<') goto yy7; + if(yych <= '=') goto yy19; + goto yy9; } } else { if(yych <= 'Z'){ - if(yych <= '>') goto yy8; - if(yych <= '@') goto yy18; + if(yych <= '@') goto yy19; + goto yy3; } else { - if(yych <= '`') goto yy18; - if(yych >= '{') goto yy18; + if(yych <= '`') goto yy19; + if(yych <= 'z') goto yy3; + goto yy19; } } } -yy2: yyaccept = 0; +yy2: YYCURSOR = YYMARKER; + switch(yyaccept){ + case 0: goto yy4; + } +yy3: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 128) goto yy28; - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy23; - if(yych >= '\004') goto yy23; - } else { - if(yych <= '\026') goto yy3; - if(yych != '\037') goto yy23; - } + if(yych <= '@'){ + if(yych <= '/') goto yy4; + if(yych <= ':') goto yy21; } else { - if(yych <= ';'){ - if(yych <= '&') goto yy3; - if(yych == ':') goto yy30; - goto yy23; - } else { - if(yych == '=') goto yy23; - if(yych >= '?') goto yy23; - } + if(yych <= 'Z') goto yy21; + if(yych <= '`') goto yy4; + if(yych <= 'z') goto yy21; } -yy3: +yy4: #line 226 { passthru(STD_ARGS); goto state_plain; } -yy4: yych = *++YYCURSOR; -yy5: +yy5: yych = *++YYCURSOR; +yy6: #line 219 { mctx.fg_code = mctx.bg_code = -1; goto state_color_fg; } -yy6: yych = *++YYCURSOR; -yy7: +yy7: yych = *++YYCURSOR; +yy8: #line 220 { add_entity(STD_ARGS, "<"); goto state_plain; } -yy8: yych = *++YYCURSOR; -yy9: +yy9: yych = *++YYCURSOR; +yy10: #line 221 { add_entity(STD_ARGS, ">"); goto state_plain; } -yy10: yych = *++YYCURSOR; -yy11: +yy11: yych = *++YYCURSOR; +yy12: #line 222 { add_entity(STD_ARGS, "&"); goto state_plain; } -yy12: yych = *++YYCURSOR; -yy13: +yy13: yych = *++YYCURSOR; +yy14: #line 223 { handle_bold(STD_ARGS, 0); goto state_plain; } -yy14: yych = *++YYCURSOR; -yy15: +yy15: yych = *++YYCURSOR; +yy16: #line 224 { handle_underline(STD_ARGS, 0); goto state_plain; } -yy16: yych = *++YYCURSOR; -yy17: +yy17: yych = *++YYCURSOR; +yy18: #line 225 { handle_italic(STD_ARGS, 0); goto state_plain; } -yy18: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy23; - if(yych <= '\003') goto yy3; - goto yy23; - } else { - if(yych <= '\026') goto yy3; - if(yych == '\037') goto yy3; - goto yy23; - } - } else { - if(yych <= ';'){ - if(yych <= '&') goto yy3; - if(yych == ':') goto yy3; - goto yy23; - } else { - if(yych == '=') goto yy23; - if(yych <= '>') goto yy3; - goto yy23; - } - } yy19: yych = *++YYCURSOR; - goto yy3; -yy20: yyaccept = 1; - yych = *(YYMARKER = ++YYCURSOR); - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy23; - if(yych >= '\004') goto yy23; - } else { - if(yych <= '\026') goto yy21; - if(yych != '\037') goto yy23; - } - } else { - if(yych <= ';'){ - if(yych <= '&') goto yy21; - if(yych != ':') goto yy23; - } else { - if(yych == '=') goto yy23; - if(yych >= '?') goto yy23; - } - } -yy21: -#line 228 - { goto stop; } -yy22: yyaccept = 2; - YYMARKER = ++YYCURSOR; + goto yy4; +yy20: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy23: if(yybm[0+yych] & 32) goto yy22; - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy25; - if(yych >= '\004') goto yy25; - } else { - if(yych <= '\026') goto yy24; - if(yych != '\037') goto yy25; - } - } else { - if(yych <= ';'){ - if(yych <= '&') goto yy24; - if(yych != ':') goto yy25; - } else { - if(yych == '=') goto yy25; - if(yych >= '?') goto yy25; - } - } -yy24: -#line 227 - { --YYCURSOR; passthru(STD_ARGS); goto stop; } -yy25: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy26: if(yybm[0+yych] & 32) goto yy22; - if(yych <= '%'){ - if(yych <= '\025'){ - if(yych <= '\001') goto yy25; - if(yych >= '\004') goto yy25; - } else { - if(yych <= '\026') goto yy27; - if(yych != '\037') goto yy25; - } - } else { - if(yych <= ';'){ - if(yych <= '&') goto yy27; - if(yych != ':') goto yy25; - } else { - if(yych == '=') goto yy25; - if(yych >= '?') goto yy25; - } - } -yy27: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 0: goto yy3; - case 2: goto yy24; - case 1: goto yy21; - } -yy28: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; -yy29: if(yybm[0+yych] & 32) goto yy22; - if(yych <= '9'){ - if(yych <= '\036'){ - if(yych <= '\003'){ - if(yych <= '\001') goto yy25; - goto yy27; - } else { - if(yych == '\026') goto yy27; - goto yy25; - } - } else { - if(yych <= '%'){ - if(yych <= '\037') goto yy27; - goto yy25; - } else { - if(yych <= '&') goto yy27; - if(yych <= '/') goto yy25; - goto yy28; - } - } - } else { - if(yych <= '>'){ - if(yych <= ';'){ - if(yych >= ';') goto yy25; - } else { - if(yych == '=') goto yy25; - goto yy27; - } - } else { - if(yych <= 'Z'){ - if(yych <= '@') goto yy25; - goto yy28; - } else { - if(yych <= '`') goto yy25; - if(yych <= 'z') goto yy28; - goto yy25; - } - } - } -yy30: yych = *++YYCURSOR; - if(yych != '/') goto yy27; -yy31: yych = *++YYCURSOR; - if(yych != '/') goto yy27; -yy32: yych = *++YYCURSOR; -yy33: +yy21: if(yybm[0+yych] & 128) goto yy20; + if(yych != ':') goto yy2; +yy22: yych = *++YYCURSOR; + if(yych != '/') goto yy2; +yy23: yych = *++YYCURSOR; + if(yych != '/') goto yy2; +yy24: yych = *++YYCURSOR; +yy25: #line 218 { handle_scheme(STD_ARGS); goto state_url; } } -#line 229 +#line 227 state_url: @@ -530,43 +386,43 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - goto yy34; -yy35: ++YYCURSOR; -yy34: + goto yy26; +yy27: ++YYCURSOR; +yy26: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= '>'){ if(yych <= '"'){ - if(yych != '!') goto yy38; + if(yych != '!') goto yy30; } else { - if(yych == '<') goto yy38; - if(yych >= '>') goto yy38; + if(yych == '<') goto yy30; + if(yych >= '>') goto yy30; } } else { if(yych <= '`'){ - if(yych <= 'Z') goto yy36; - if(yych != '_') goto yy38; + if(yych <= 'Z') goto yy28; + if(yych != '_') goto yy30; } else { - if(yych <= 'z') goto yy36; - if(yych != '~') goto yy38; + if(yych <= 'z') goto yy28; + if(yych != '~') goto yy30; } } -yy36: yych = *++YYCURSOR; - goto yy41; -yy37: -#line 234 +yy28: yych = *++YYCURSOR; + goto yy33; +yy29: +#line 232 { handle_url(STD_ARGS); goto state_plain; } -yy38: yych = *++YYCURSOR; -yy39: -#line 235 +yy30: yych = *++YYCURSOR; +yy31: +#line 233 { passthru(STD_ARGS); goto state_plain; } -yy40: ++YYCURSOR; +yy32: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy41: if(yybm[0+yych] & 128) goto yy40; - goto yy37; +yy33: if(yybm[0+yych] & 128) goto yy32; + goto yy29; } -#line 236 +#line 234 @@ -575,27 +431,27 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy42; -yy43: ++YYCURSOR; -yy42: + goto yy34; +yy35: ++YYCURSOR; +yy34: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych <= '/') goto yy46; - if(yych >= ':') goto yy46; -yy44: yych = *++YYCURSOR; - if(yych <= '/') goto yy45; - if(yych <= '9') goto yy48; -yy45: -#line 242 + if(yych <= '/') goto yy38; + if(yych >= ':') goto yy38; +yy36: yych = *++YYCURSOR; + if(yych <= '/') goto yy37; + if(yych <= '9') goto yy40; +yy37: +#line 240 { handle_color_digit(STD_ARGS, 0); goto state_color_comma; } -yy46: yych = *++YYCURSOR; -yy47: -#line 243 +yy38: yych = *++YYCURSOR; +yy39: +#line 241 { finish_color_stuff(STD_ARGS); passthru(STD_ARGS); goto state_plain; } -yy48: yych = *++YYCURSOR; - goto yy45; +yy40: yych = *++YYCURSOR; + goto yy37; } -#line 244 +#line 242 @@ -604,22 +460,22 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy49; -yy50: ++YYCURSOR; -yy49: + goto yy41; +yy42: ++YYCURSOR; +yy41: if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych != ',') goto yy53; -yy51: yych = *++YYCURSOR; -yy52: -#line 250 + if(yych != ',') goto yy45; +yy43: yych = *++YYCURSOR; +yy44: +#line 248 { goto state_color_bg; } -yy53: yych = *++YYCURSOR; -yy54: -#line 251 +yy45: yych = *++YYCURSOR; +yy46: +#line 249 { YYCURSOR--; commit_color_stuff(STD_ARGS); goto state_plain; } } -#line 252 +#line 250 @@ -628,27 +484,27 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy55; -yy56: ++YYCURSOR; -yy55: + goto yy47; +yy48: ++YYCURSOR; +yy47: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych <= '/') goto yy59; - if(yych >= ':') goto yy59; -yy57: yych = *++YYCURSOR; - if(yych <= '/') goto yy58; - if(yych <= '9') goto yy61; -yy58: -#line 258 + if(yych <= '/') goto yy51; + if(yych >= ':') goto yy51; +yy49: yych = *++YYCURSOR; + if(yych <= '/') goto yy50; + if(yych <= '9') goto yy53; +yy50: +#line 256 { handle_color_digit(STD_ARGS, 1); commit_color_stuff(STD_ARGS); goto state_plain; } -yy59: yych = *++YYCURSOR; -yy60: -#line 259 +yy51: yych = *++YYCURSOR; +yy52: +#line 257 { commit_color_stuff(STD_ARGS); goto state_plain; } -yy61: yych = *++YYCURSOR; - goto yy58; +yy53: yych = *++YYCURSOR; + goto yy50; } -#line 260 +#line 258 stop: Index: php4/ext/ircg/ircg_scanner.re diff -u php4/ext/ircg/ircg_scanner.re:1.12 php4/ext/ircg/ircg_scanner.re:1.13 --- php4/ext/ircg/ircg_scanner.re:1.12 Mon Jul 9 13:50:25 2001 +++ php4/ext/ircg/ircg_scanner.re Wed Jul 25 12:23:05 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg_scanner.re,v 1.12 2001/07/09 17:50:25 sas Exp $ */ +/* $Id: ircg_scanner.re,v 1.13 2001/07/25 16:23:05 sas Exp $ */ #include <ext/standard/php_smart_str.h> #include <stdio.h> @@ -76,7 +76,7 @@ italic = ""; */ -#define YYFILL(n) { } +#define YYFILL(n) do { } while (0) #define YYCTYPE unsigned char #define YYCURSOR xp #define YYLIMIT end @@ -224,8 +224,6 @@ underline { handle_underline(STD_ARGS, 0); goto state_plain; } italic { handle_italic(STD_ARGS, 0); goto state_plain; } anynoneof { passthru(STD_ARGS); goto state_plain; } - (any\[<>\037&:])+ eof { --YYCURSOR; passthru(STD_ARGS); goto stop; } - eof { goto stop; } */ state_url: