From 7f3acf977054eebf6cf3aea4cb43b184561e0308 Mon Sep 17 00:00:00 2001 From: Mathias Laurenz Baumann Date: Sat, 20 Feb 2010 19:50:10 +0100 Subject: [PATCH] added parsing of empty variables --- src/parser.c | 58 +++++++++++++++++-------------- src/tests/enter_leave_context.txt | 1 + 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/parser.c b/src/parser.c index 3114a58..d0db45e 100644 --- a/src/parser.c +++ b/src/parser.c @@ -245,8 +245,9 @@ inline int PSYC_parseElement( * so checking for \n too here * We dont check if cursor inside length, because - * the last loop iteration did that already. */ - if(data[*cursor] == '\t' || (data[*cursor] == '\n' && method==1)) + * the last loop iteration did that already. + */ + if(data[*cursor] == '\t' || data[*cursor] == '\n') // && method==1)) { /* after the \t the arg-data follows, which is * anything but \n. arg-data can be of length 0 @@ -259,38 +260,43 @@ inline int PSYC_parseElement( * to the first potential arg-data byte. * If there is no arg-data, we still have * the length attribute on 0. */ - *value=data+*cursor+1; - *vlength=0; - - while(1) + if(method == 0 && data[*cursor] == '\n') // emptyvar { - if(dlength<=++(*cursor)) // incremented cursor inside lenght? + *value=data+*cursor; + *vlength=0; + }else + { + *value=data+*cursor+1; + *vlength=0; + while(1) { - *cursor=startc; // set to start value - return 1; // return insufficient - } - - if(1 != method && data[*cursor] == '\n') - break; - - if(1 == method && data[*cursor] == '|') - { - if(dlength<++(*cursor)) // incremented cursor inside lenght? + if(dlength<=++(*cursor)) // incremented cursor inside lenght? { *cursor=startc; // set to start value return 1; // return insufficient } - /* packet finishes here */ - if(data[*cursor] == '\n') - { - *cursor+=1; - return 3; - } - } - ++(*vlength); - } + if(0 == method && data[*cursor] == '\n') + break; + if(1 == method && data[*cursor] == '|') + { + if(dlength<++(*cursor)) // incremented cursor inside lenght? + { + *cursor=startc; // set to start value + return 1; // return insufficient + } + + /* packet finishes here */ + if(data[*cursor] == '\n') + { + *cursor+=1; + return 3; + } + } + ++(*vlength); + } + } } diff --git a/src/tests/enter_leave_context.txt b/src/tests/enter_leave_context.txt index a323158..d929edd 100644 --- a/src/tests/enter_leave_context.txt +++ b/src/tests/enter_leave_context.txt @@ -7,6 +7,7 @@ _request_context_enter :_target psyc://p5B084547.dip.t-dialin.net/@test :_more vars +:_nocontent :_entity variablevalue _notice_context_leave |