Attempt to fix bug #305. More scan tests.
authorAdam Dickmeiss <adam@indexdata.dk>
Mon, 2 May 2005 09:25:12 +0000 (09:25 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Mon, 2 May 2005 09:25:12 +0000 (09:25 +0000)
index/zrpn.c
test/api/t11.c

index f53a471..843d68a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zrpn.c,v 1.184 2005-04-29 18:56:22 adam Exp $
+/* $Id: zrpn.c,v 1.185 2005-05-02 09:25:12 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -2954,6 +2954,11 @@ ZEBRA_RES rpn_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt,
     {
        *num_entries -= (after-i);
        *is_partial = 1;
+       if (*num_entries < 0)
+       {
+           *num_entries = 0;
+           return ZEBRA_OK;
+       }
     }
     /* consider terms before main term */
     for (i = 0; i<ord_no; i++)
@@ -3031,6 +3036,11 @@ ZEBRA_RES rpn_scan(ZebraHandle zh, ODR stream, Z_AttributesPlusTerm *zapt,
         *is_partial = 1;
         *position -= i;
         *num_entries -= i;
+       if (*num_entries <= 0)
+       {
+           *num_entries = 0;
+           return ZEBRA_OK;
+       }
     }
     
     nmem_destroy(rset_nmem);
index 0ce4e89..ab59f20 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t11.c,v 1.1 2005-05-02 09:05:22 adam Exp $
+/* $Id: t11.c,v 1.2 2005-05-02 09:25:12 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -79,6 +79,16 @@ int main(int argc, char **argv)
     }
     if (1)
     {
+       const char *ent[] = { "f", 0 };
+       do_scan(__LINE__, zh, "@attr 1=4 a", -4, 1, -4, 1, 0, ent);
+    }
+    if (1)
+    {
+       const char *ent[] = { "f", 0 };
+       do_scan(__LINE__, zh, "@attr 1=4 a", -5, 1, -5, 0, 1, ent);
+    }
+    if (1)
+    {
        const char *ent[] = { "d", "e", "f", 0 };
        do_scan(__LINE__, zh, "@attr 1=4 a", -2, 3, -2, 3, 0, ent);
     }
@@ -105,11 +115,11 @@ int main(int argc, char **argv)
     if (1)
     {
        const char *ent[] = { "a", "b", "c", "d", "e", "f", 0 };
-       do_scan(__LINE__, zh, "@attr 1=4 0", 100, 10, 1, 6, 1, ent);
+       do_scan(__LINE__, zh, "@attr 1=4 0", 22, 10, 1, 0, 1, ent);
     }
     if (1)
     {
-       do_scan(__LINE__, zh, "@attr 1=4 z", -100, 10, 1, 6, 1, 0);
+       do_scan(__LINE__, zh, "@attr 1=4 z", -22, 10, -22, 0, 1, 0);
     }
     return close_down(zh, zs, 0);
 }