dav/davql.c

changeset 30
9a5a7a513a96
parent 28
4e46c65711ef
equal deleted inserted replaced
29:938957a4eea7 30:9a5a7a513a96
452 printf("no data on stack\n"); 452 printf("no data on stack\n");
453 return 0; 453 return 0;
454 } 454 }
455 int pos = stackpos-1; 455 int pos = stackpos-1;
456 if(stack[pos].type == DAVQOP_INTEGER) { 456 if(stack[pos].type == DAVQOP_INTEGER) {
457 printf("not %" PRId64 "\n", stack[pos].intval); 457 //printf("not %" PRId64 "\n", stack[pos].intval);
458 stack[pos].intval = !stack[pos].intval; 458 stack[pos].intval = !stack[pos].intval;
459 } else { 459 } else {
460 // error 460 // error
461 printf("wrong value for 'not' operator\n"); 461 printf("wrong value for 'not' operator\n");
462 return 0; 462 return 0;
488 } 488 }
489 case DAVQOP_STRING: 489 case DAVQOP_STRING:
490 case DAVQOP_INTEGER: 490 case DAVQOP_INTEGER:
491 case DAVQOP_TIME: { 491 case DAVQOP_TIME: {
492 if(op.type == DAVQOP_STRING) { 492 if(op.type == DAVQOP_STRING) {
493 printf("put on stack: '%s'\n", op.val); 493 //printf("put on stack: '%s'\n", op.val);
494 } else { 494 } else {
495 printf("put on stack[%d]: %" PRId64 "\n", stackpos, op.intval); 495 //printf("put on stack[%d]: %" PRId64 "\n", stackpos, op.intval);
496 } 496 }
497 stack[stackpos++] = op; 497 stack[stackpos++] = op;
498 break; 498 break;
499 } 499 }
500 case DAVQOP_PROPERTY: { 500 case DAVQOP_PROPERTY: {
503 char *property_value = dav_get_property(res, pname.ptr); 503 char *property_value = dav_get_property(res, pname.ptr);
504 free(pname.ptr); 504 free(pname.ptr);
505 DavQOp value; 505 DavQOp value;
506 value.type = DAVQOP_STRING; 506 value.type = DAVQOP_STRING;
507 if(property_value) { 507 if(property_value) {
508 printf("put on stack: \"%s\"\n", property_value); 508 //printf("put on stack: \"%s\"\n", property_value);
509 value.val = property_value; 509 value.val = property_value;
510 value.intval = strlen(property_value); 510 value.intval = strlen(property_value);
511 } else { 511 } else {
512 printf("put on stack: null string\n"); 512 //printf("put on stack: null string\n");
513 value.val = NULL; 513 value.val = NULL;
514 value.intval = 0; 514 value.intval = 0;
515 } 515 }
516 stack[stackpos++] = value; 516 stack[stackpos++] = value;
517 break; 517 break;
520 sstr_t name = sstrn(op.val, op.intval); 520 sstr_t name = sstrn(op.val, op.intval);
521 DavQOp value; 521 DavQOp value;
522 value.type = DAVQOP_INTEGER; 522 value.type = DAVQOP_INTEGER;
523 value.val = NULL; 523 value.val = NULL;
524 if(!sstrcmp(name, S("contentlength"))) { 524 if(!sstrcmp(name, S("contentlength"))) {
525 printf("put contentlength\n"); 525 //printf("put contentlength\n");
526 value.intval = res->contentlength; 526 value.intval = res->contentlength;
527 } else if(!sstrcmp(name, S("lastmodified"))) { 527 } else if(!sstrcmp(name, S("lastmodified"))) {
528 printf("put getlastmodified\n"); 528 //printf("put getlastmodified\n");
529 value.intval = res->lastmodified; 529 value.intval = res->lastmodified;
530 } else if(!sstrcmp(name, S("creationdate"))) { 530 } else if(!sstrcmp(name, S("creationdate"))) {
531 value.intval = res->creationdate; 531 value.intval = res->creationdate;
532 } else if(!sstrcmp(name, S("name"))) { 532 } else if(!sstrcmp(name, S("name"))) {
533 value.type = DAVQOP_STRING; 533 value.type = DAVQOP_STRING;
549 } 549 }
550 if(stackpos != 1) { 550 if(stackpos != 1) {
551 return 0; 551 return 0;
552 } 552 }
553 DavQOp result = stack[0]; 553 DavQOp result = stack[0];
554 printf("result: %" PRId64 "\n", result.intval); 554 //printf("result: %" PRId64 "\n", result.intval);
555 return (int)result.intval; 555 return (int)result.intval;
556 } 556 }
557 557
558 DavQOp compare_intint(int op, int64_t v1, int64_t v2) { 558 DavQOp compare_intint(int op, int64_t v1, int64_t v2) {
559 DavQOp res; 559 DavQOp res;
561 res.val = NULL; 561 res.val = NULL;
562 res.intval = 0; 562 res.intval = 0;
563 switch(op) { 563 switch(op) {
564 case 5: { 564 case 5: {
565 // < 565 // <
566 printf("compare: %" PRId64 " < %" PRId64 "\n", v1, v2); 566 //printf("compare: %" PRId64 " < %" PRId64 "\n", v1, v2);
567 res.intval = v1 < v2; 567 res.intval = v1 < v2;
568 break; 568 break;
569 } 569 }
570 case 6: { 570 case 6: {
571 // > 571 // >
572 printf("compare: %" PRId64 " > %" PRId64 "\n", v1, v2); 572 //printf("compare: %" PRId64 " > %" PRId64 "\n", v1, v2);
573 res.intval = v1 > v2; 573 res.intval = v1 > v2;
574 break; 574 break;
575 } 575 }
576 case 7: { 576 case 7: {
577 // == 577 // ==
578 printf("compare: %" PRId64 " == %" PRId64 "\n", v1, v2); 578 //printf("compare: %" PRId64 " == %" PRId64 "\n", v1, v2);
579 res.intval = v1 == v2; 579 res.intval = v1 == v2;
580 break; 580 break;
581 } 581 }
582 case 8: { 582 case 8: {
583 // != 583 // !=
584 printf("compare: %" PRId64 " != %" PRId64 "\n", v1, v2); 584 //printf("compare: %" PRId64 " != %" PRId64 "\n", v1, v2);
585 res.intval = v1 != v2; 585 res.intval = v1 != v2;
586 break; 586 break;
587 } 587 }
588 case 9: { 588 case 9: {
589 // <= 589 // <=
590 printf("compare: %" PRId64 " <= %" PRId64 "\n", v1, v2); 590 //printf("compare: %" PRId64 " <= %" PRId64 "\n", v1, v2);
591 res.intval = v1 <= v2; 591 res.intval = v1 <= v2;
592 break; 592 break;
593 } 593 }
594 case 10: { 594 case 10: {
595 // >= 595 // >=
596 printf("compare: %" PRId64 " >= %" PRId64 "\n", v1, v2); 596 //printf("compare: %" PRId64 " >= %" PRId64 "\n", v1, v2);
597 res.intval = v1 >= v2; 597 res.intval = v1 >= v2;
598 break; 598 break;
599 } 599 }
600 case 11: { 600 case 11: {
601 // and 601 // and
602 printf("compare: %" PRId64 " and %" PRId64 "\n", v1, v2); 602 //printf("compare: %" PRId64 " and %" PRId64 "\n", v1, v2);
603 res.intval = v1 && v2; 603 res.intval = v1 && v2;
604 break; 604 break;
605 } 605 }
606 case 12: { 606 case 12: {
607 // or 607 // or
608 printf("compare: %" PRId64 " or %" PRId64 "\n", v1, v2); 608 //printf("compare: %" PRId64 " or %" PRId64 "\n", v1, v2);
609 res.intval = v1 || v2; 609 res.intval = v1 || v2;
610 break; 610 break;
611 } 611 }
612 case 13: { 612 case 13: {
613 // xor 613 // xor
614 printf("compare: %" PRId64 " xor %" PRId64 "\n", v1, v2); 614 //printf("compare: %" PRId64 " xor %" PRId64 "\n", v1, v2);
615 res.intval = v1 ^ v2; 615 res.intval = v1 ^ v2;
616 break; 616 break;
617 } 617 }
618 } 618 }
619 return res; 619 return res;
635 sstr_t s1 = sstrn(v1.val, v1.intval); 635 sstr_t s1 = sstrn(v1.val, v1.intval);
636 sstr_t s2 = sstrn(v2.val, v2.intval); 636 sstr_t s2 = sstrn(v2.val, v2.intval);
637 switch(op) { 637 switch(op) {
638 case 5: { 638 case 5: {
639 // < 639 // <
640 printf("str compare: %.*s < %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr); 640 //printf("str compare: %.*s < %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr);
641 res.intval = s1.length < s2.length; 641 res.intval = s1.length < s2.length;
642 break; 642 break;
643 } 643 }
644 case 6: { 644 case 6: {
645 // > 645 // >
646 printf("str compare: %.*s > %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr); 646 //printf("str compare: %.*s > %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr);
647 res.intval = s1.length > s2.length; 647 res.intval = s1.length > s2.length;
648 break; 648 break;
649 } 649 }
650 case 7: { 650 case 7: {
651 // == 651 // ==
652 printf("str compare: %.*s == %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr); 652 //printf("str compare: %.*s == %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr);
653 res.intval = sstrcmp(s1, s2) == 0; 653 res.intval = sstrcmp(s1, s2) == 0;
654 break; 654 break;
655 } 655 }
656 case 8: { 656 case 8: {
657 // != 657 // !=
658 printf("str compare: %.*s != %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr); 658 //printf("str compare: %.*s != %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr);
659 res.intval = sstrcmp(s1, s2) != 0; 659 res.intval = sstrcmp(s1, s2) != 0;
660 break; 660 break;
661 } 661 }
662 case 9: { 662 case 9: {
663 // <= 663 // <=
664 printf("str compare: %.*s <= %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr); 664 //printf("str compare: %.*s <= %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr);
665 res.intval = s1.length <= s2.length; 665 res.intval = s1.length <= s2.length;
666 break; 666 break;
667 } 667 }
668 case 10: { 668 case 10: {
669 // >= 669 // >=
670 printf("str compare: %.*s >= %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr); 670 //printf("str compare: %.*s >= %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr);
671 res.intval = s1.length >= s2.length; 671 res.intval = s1.length >= s2.length;
672 break; 672 break;
673 } 673 }
674 case 11: { 674 case 11: {
675 // and 675 // and
676 printf("str compare: %.*s and %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr); 676 //printf("str compare: %.*s and %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr);
677 res.intval = s1.ptr && s2.ptr; 677 res.intval = s1.ptr && s2.ptr;
678 break; 678 break;
679 } 679 }
680 case 12: { 680 case 12: {
681 // or 681 // or
682 printf("str compare: %.*s or %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr); 682 //printf("str compare: %.*s or %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr);
683 res.intval = s1.ptr || s2.ptr; 683 res.intval = s1.ptr || s2.ptr;
684 break; 684 break;
685 } 685 }
686 case 13: { 686 case 13: {
687 // xor 687 // xor
688 printf("str compare: %.*s xor %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr); 688 //printf("str compare: %.*s xor %.*s\n", s1.length, s1.ptr, s2.length, s2.ptr);
689 res.intval = (intptr_t)s1.ptr ^ (intptr_t)s2.ptr; 689 res.intval = (intptr_t)s1.ptr ^ (intptr_t)s2.ptr;
690 break; 690 break;
691 } 691 }
692 } 692 }
693 return res; 693 return res;

mercurial