yaz-client: rework facet command; fix leak
[yaz-moved-to-github.git] / client / client.c
index 71432b4..ed7a0c7 100644 (file)
@@ -13,7 +13,6 @@
 #include <stdlib.h>
 #include <assert.h>
 #include <time.h>
-#include <ctype.h>
 #ifndef WIN32
 #include <signal.h>
 #endif
@@ -109,6 +108,7 @@ static int largeSetLowerBound = 1;
 static int mediumSetPresentNumber = 0;
 static Z_ElementSetNames *elementSetNames = 0;
 static Z_FacetList *facet_list = 0;
+static ODR facet_odr = 0;
 static Odr_int setno = 1;                   /* current set offset */
 static enum oid_proto protocol = PROTO_Z3950;      /* current app protocol */
 #define RECORDSYNTAX_MAX 20
@@ -764,10 +764,6 @@ static int cmd_open(const char *arg)
         strncpy(cur_host, arg, sizeof(cur_host)-1);
         cur_host[sizeof(cur_host)-1] = 0;
     }
-    /* TODO Make facet definition survive the open command without crashing */
-    /* TODO Fix deallocation */
-    facet_list = 0;
-
     set_base("");
     r = session_connect(cur_host);
     if (conn && conn->protocol == PROTO_HTTP)
@@ -2311,22 +2307,6 @@ static int only_z3950(void)
     return 0;
 }
 
-static int is_SRW(void)
-{
-    if (!conn)
-    {
-        printf("Not connected yet\n");
-        return 1;
-    }
-    if (protocol == PROTO_HTTP && yaz_matchstr(sru_method, "solr"))
-    {
-        printf("Not supported by SRW\n");
-        return 1;
-    }
-    return 0;
-}
-
-
 static int cmd_update_common(const char *arg, int version);
 
 static int cmd_update(const char *arg)
@@ -2934,21 +2914,17 @@ static int cmd_find(const char *arg)
 
 static int cmd_facets(const char *arg)
 {
-    /* TODO Wrong odr. Loosing memory */
-    ODR odr = odr_createmem(ODR_ENCODE);
-    int size = 0;
+    if (!facet_odr)
+        facet_odr = odr_createmem(ODR_ENCODE);
+    odr_reset(facet_odr);
+
     if (!*arg)
     {
         facet_list = 0;
         printf("Facets cleared.\n");
         return 0;
     }
-    size = strlen(arg);
-    if (is_SRW()) {
-        printf("WARN: No supported for SRW/SRU.\n");
-    }
-    facet_list = yaz_pqf_parse_facet_list(odr, arg);
-
+    facet_list = yaz_pqf_parse_facet_list(facet_odr, arg);
     if (!facet_list)
     {
         printf("Invalid facet list: %s", arg);
@@ -2957,7 +2933,6 @@ static int cmd_facets(const char *arg)
     return 1;
 }
 
-
 static int cmd_delete(const char *arg)
 {
     if (only_z3950())
@@ -3067,7 +3042,7 @@ static int parse_show_args(const char *arg_c, char *setstring,
     *start = start_position;
     if (*end_ptr == '\0')
         return 1;
-    while (isspace(*(unsigned char *)end_ptr))
+    while (yaz_isspace(*end_ptr))
         end_ptr++;
     if (*end_ptr != '+')
     {
@@ -3084,7 +3059,7 @@ static int parse_show_args(const char *arg_c, char *setstring,
     }
     if (*end_ptr == '\0')
         return 1;
-    while (isspace(*(unsigned char *)end_ptr))
+    while (yaz_isspace(*end_ptr))
         end_ptr++;
     if (*end_ptr != '+')
     {
@@ -5180,7 +5155,7 @@ static void process_cmd_line(char* line)
 
         for (; *p; ++p)
         {
-            if (!isspace(*(unsigned char *) p))
+            if (!yaz_isspace(*p))
                 lastnonspace = p;
         }
         if (lastnonspace)