libidav/davqlparser.c

changeset 117
5ffc2f23803f
parent 116
44ffe073b5e3
child 118
1e2b1005004c
equal deleted inserted replaced
116:44ffe073b5e3 117:5ffc2f23803f
554 554
555 if (token) { 555 if (token) {
556 tokens = dav_parse_add_token(tokens, token); 556 tokens = dav_parse_add_token(tokens, token);
557 } 557 }
558 558
559 return tokens; 559 DavQLToken *endtoken = malloc(sizeof(DavQLToken));
560 endtoken->tokenclass = DAVQL_TOKEN_END;
561 endtoken->value = S("");
562 return ucx_list_append(tokens, endtoken);
560 } 563 }
561 564
562 static void dav_free_expression(DavQLExpression *expr) { 565 static void dav_free_expression(DavQLExpression *expr) {
563 if (expr) { 566 if (expr) {
564 if (expr->left) { 567 if (expr->left) {
1355 tokens = tokens->next; 1358 tokens = tokens->next;
1356 } else if (token_is(tokens, DAVQL_TOKEN_OPERATOR) 1359 } else if (token_is(tokens, DAVQL_TOKEN_OPERATOR)
1357 && tokenvalue_is(tokens, "/")) { 1360 && tokenvalue_is(tokens, "/")) {
1358 stmt->path.ptr = token_sstr(tokens).ptr; 1361 stmt->path.ptr = token_sstr(tokens).ptr;
1359 tokens = tokens->next; 1362 tokens = tokens->next;
1360 while (!token_is(tokens, DAVQL_TOKEN_KEYWORD)) { 1363 while (!token_is(tokens, DAVQL_TOKEN_KEYWORD) &&
1364 !token_is(tokens, DAVQL_TOKEN_END)) {
1361 sstr_t toksstr = token_sstr(tokens); 1365 sstr_t toksstr = token_sstr(tokens);
1362 stmt->path.length = toksstr.ptr-stmt->path.ptr+toksstr.length; 1366 stmt->path.length = toksstr.ptr-stmt->path.ptr+toksstr.length;
1363 tokens = tokens->next; 1367 tokens = tokens->next;
1364 } 1368 }
1365 } else if (token_is(tokens, DAVQL_TOKEN_FMTSPEC) && 1369 } else if (token_is(tokens, DAVQL_TOKEN_FMTSPEC) &&
1416 1420
1417 if (tokens) { 1421 if (tokens) {
1418 if (token_is(tokens, DAVQL_TOKEN_INVALID)) { 1422 if (token_is(tokens, DAVQL_TOKEN_INVALID)) {
1419 dav_error_in_context(DAVQL_ERROR_INVALID_TOKEN, 1423 dav_error_in_context(DAVQL_ERROR_INVALID_TOKEN,
1420 _error_invalid_token, stmt, tokens); 1424 _error_invalid_token, stmt, tokens);
1421 } else { 1425 } else if (!token_is(tokens, DAVQL_TOKEN_END)) {
1422 dav_error_in_context(DAVQL_ERROR_UNEXPECTED_TOKEN, 1426 dav_error_in_context(DAVQL_ERROR_UNEXPECTED_TOKEN,
1423 _error_unexpected_token, stmt, tokens); 1427 _error_unexpected_token, stmt, tokens);
1424 } 1428 }
1425 } 1429 }
1426 } 1430 }

mercurial