diff options
author | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2008-01-05 00:44:49 +0100 |
---|---|---|
committer | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2008-01-05 00:44:49 +0100 |
commit | c81c9deccc79646bd7ac3f1759a4a3e4fb8a88af (patch) | |
tree | b39027bf19757a904f9d306085d8744046f24a1f /src/xine-utils/xmllexer.c | |
parent | 119076c9300e2e2a816dc1a6ca32ba77f338b20c (diff) | |
parent | a2a95425350da93551388acdca8a00818a34c317 (diff) | |
download | xine-lib-c81c9deccc79646bd7ac3f1759a4a3e4fb8a88af.tar.gz xine-lib-c81c9deccc79646bd7ac3f1759a4a3e4fb8a88af.tar.bz2 |
Merge from 1.2.
Diffstat (limited to 'src/xine-utils/xmllexer.c')
-rw-r--r-- | src/xine-utils/xmllexer.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/xine-utils/xmllexer.c b/src/xine-utils/xmllexer.c index e276beef0..579007e52 100644 --- a/src/xine-utils/xmllexer.c +++ b/src/xine-utils/xmllexer.c @@ -144,7 +144,9 @@ typedef enum { STATE_IDENT /* must be last */ } lexer_state_t; -int lexer_get_token(char * tok, int tok_size) { +int lexer_get_token_d(char ** _tok, int * _tok_size, int fixed) { + char *tok = *_tok; + int tok_size = *_tok_size; int tok_pos = 0; lexer_state_t state = STATE_IDLE; char c; @@ -513,7 +515,17 @@ int lexer_get_token(char * tok, int tok_size) { /* pb */ if (tok_pos >= tok_size) { - lprintf("token buffer is too little\n"); + if (fixed) + return T_ERROR; + *_tok_size *= 2; + *_tok = realloc (*_tok, *_tok_size); + lprintf("token buffer is too small\n"); + lprintf("increasing buffer size to %d bytes\n", *_tok_size); + if (*_tok) { + return lexer_get_token_d (_tok, _tok_size, 0); + } else { + return T_ERROR; + } } else { if (lexbuf_pos >= lexbuf_size) { /* Terminate the current token */ @@ -556,6 +568,12 @@ int lexer_get_token(char * tok, int tok_size) { return T_ERROR; } +/* for ABI compatibility */ +int lexer_get_token (char *tok, int tok_size) +{ + return lexer_get_token_d (&tok, &tok_size, 1); +} + static struct { char code; unsigned char namelen; |