summaryrefslogtreecommitdiff
path: root/src/xine-utils/xmllexer.c
diff options
context:
space:
mode:
authorDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2008-01-05 00:44:49 +0100
committerDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>2008-01-05 00:44:49 +0100
commitc81c9deccc79646bd7ac3f1759a4a3e4fb8a88af (patch)
treeb39027bf19757a904f9d306085d8744046f24a1f /src/xine-utils/xmllexer.c
parent119076c9300e2e2a816dc1a6ca32ba77f338b20c (diff)
parenta2a95425350da93551388acdca8a00818a34c317 (diff)
downloadxine-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.c22
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;