yaz_encode_sru_extra: keep existing extra args
[yaz-moved-to-github.git] / src / srwutil.c
index f7c8a2f..178d886 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2012 Index Data
+ * Copyright (C) 1995-2013 Index Data
  * See the file LICENSE for details.
  */
 /**
@@ -466,8 +466,11 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu,
                     (*l)->next = 0;
                 }
                 else
-                    yaz_add_srw_diagnostic(decode, diag, num_diag,
-                                           YAZ_SRW_UNSUPP_PARAMETER, n);
+                {
+                    if (*num_diag < 10)
+                        yaz_add_srw_diagnostic(decode, diag, num_diag,
+                                               YAZ_SRW_UNSUPP_PARAMETER, n);
+                }
             }
         }
         if (!version)
@@ -669,8 +672,9 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu,
                                    YAZ_SRW_UNSUPP_OPERATION, operation);
             return 0;
         }
-#endif
+#else
         return 1;
+#endif
     }
     return 2;
 }
@@ -1097,6 +1101,9 @@ void yaz_encode_sru_extra(Z_SRW_PDU *sr, ODR odr, const char *extra_args)
         Z_SRW_extra_arg **ea = &sr->extra_args;
         yaz_uri_to_array(extra_args, odr, &name, &val);
 
+        /** append rather than override */
+        while (*ea)
+            ea = &(*ea)->next;
         while (*name)
         {
             *ea = (Z_SRW_extra_arg *) odr_malloc(odr, sizeof(**ea));