X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=judge%2Ftoken.c;h=795cc084e28f142a86e838f88129ac0746258ac6;hb=d9767ff852b6bae9fa3319d1da812f86a4d54b91;hp=69b9398395b89fb0e3c1a6ae1fd37dfd068fec6c;hpb=cc2f58454e17a6212a23c27e70e6afcf1e054346;p=eval.git diff --git a/judge/token.c b/judge/token.c index 69b9398..795cc08 100644 --- a/judge/token.c +++ b/judge/token.c @@ -19,7 +19,7 @@ void tok_init(struct tokenizer *t, struct stream *s) { memset(t, 0, sizeof(*t)); t->stream = s; - t->bufsize = 256; + t->bufsize = 1; t->token = xmalloc(t->bufsize); t->maxsize = DEFAULT_MAX_TOKEN; t->line = 1; @@ -76,11 +76,11 @@ char *get_token(struct tokenizer *t) t->token[len++] = c; if (len >= t->bufsize) { - if (len >= t->maxsize) + if (len > t->maxsize) tok_err(t, "Token too long"); t->bufsize *= 2; if (t->bufsize > t->maxsize) - t->bufsize = t->maxsize; + t->bufsize = t->maxsize+1; t->token = xrealloc(t->token, t->bufsize); } c = sgetc(t->stream); @@ -101,6 +101,8 @@ char *get_token(struct tokenizer *t) #define PARSE(f, ...) \ char *end; \ errno = 0; \ + if (!t->toksize) \ + return 0; \ *x = f(t->token, &end, ##__VA_ARGS__); \ return !(errno || (unsigned char *) end != t->token + t->toksize)