diff -r 8c9b84f37af5 -r 8c37028f5024 libidav/davqlexec.c --- a/libidav/davqlexec.c Fri Jun 05 10:44:21 2015 +0200 +++ b/libidav/davqlexec.c Sat Jun 06 10:46:29 2015 +0200 @@ -561,9 +561,18 @@ stack = realloc(stack, stsize * sizeof(DavQLStackObj)); \ } \ stack[stpos++] = obj; +#define DAVQL_PUSH_INT(intval) \ + { \ + DavQLStackObj intobj; \ + intobj.type = 0; \ + intobj.length = 0; \ + intobj.data.integer = intval; \ + DAVQL_PUSH(intobj); \ + } #define DAVQL_POP() stack[--stpos] DavQLStackObj obj; + int ret = 0; for(size_t i=0;i obj2.data.integer); } else { - isint = util_strtoint(obj1.data.string, &int1); + // TODO: string compare } - if(isint) { - if(obj2.type == 0) { - int2 = obj2.data.integer; - } else { - isint = util_strtoint(obj2.data.string, &int2); - } - if(isint) { - obj.data.integer = int1 > int2; - } - } - - // string compare - // TODO - DAVQL_PUSH(obj); break; } case DAVQL_CMD_OP_LE: { printf("le\n"); + DavQLStackObj obj2 = DAVQL_POP(); + DavQLStackObj obj1 = DAVQL_POP(); + if(obj1.type == 0 && obj2.type == 0) { + DAVQL_PUSH_INT(obj1.data.integer <= obj2.data.integer); + } else { + // TODO: string compare + } break; } case DAVQL_CMD_OP_GE: { printf("ge\n"); + DavQLStackObj obj2 = DAVQL_POP(); + DavQLStackObj obj1 = DAVQL_POP(); + if(obj1.type == 0 && obj2.type == 0) { + DAVQL_PUSH_INT(obj1.data.integer >= obj2.data.integer); + } else { + // TODO: string compare + } break; } case DAVQL_CMD_OP_LIKE: { @@ -783,7 +883,6 @@ } } - int ret = 0; if(stpos == 1) { *result = stack[0]; } else {