X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=31e607786c221cd5d68f591f9648b87a7822d881;hb=62fd62f25a6893d042c4c87f8c770929fd8cf95d;hp=f0416fef1d71ca27164c5738634480019b7ae30b;hpb=b7e0b586c47f8cc0c99f0195e0b554dc5f1af072;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index f0416fe..31e6077 100644 --- a/client/client.c +++ b/client/client.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: client.c,v 1.327 2007-01-24 23:10:01 adam Exp $ + * $Id: client.c,v 1.330 2007-03-19 22:17:41 adam Exp $ */ /** \file client.c * \brief yaz-client program @@ -938,8 +938,8 @@ static void display_record(Z_External *r) #endif ) { - char *result; - int rlen; + const char *result; + size_t rlen; yaz_iconv_t cd = 0; yaz_marc_t mt = yaz_marc_create(); const char *from = 0; @@ -972,7 +972,7 @@ static void display_record(Z_External *r) } } - if (yaz_marc_decode_buf(mt, octet_buf,r->u.octet_aligned->len, + if (yaz_marc_decode_buf(mt, octet_buf, r->u.octet_aligned->len, &result, &rlen)> 0) { fwrite (result, rlen, 1, stdout); @@ -1017,8 +1017,8 @@ static void display_record(Z_External *r) } w = wrbuf_alloc(); yaz_display_grs1(w, r->u.grs1, 0); - puts (wrbuf_buf(w)); - wrbuf_free(w, 1); + puts (wrbuf_cstr(w)); + wrbuf_destroy(w); } else if (ent && ent->value == VAL_OPAC) { @@ -1302,19 +1302,16 @@ static char *encode_SRW_term(ODR o, const char *q) cd = yaz_iconv_open("UTF-8", in_charset); if (!cd) { - wrbuf_free(w, 1); + wrbuf_destroy(w); return odr_strdup(o, q); } wrbuf_iconv_write(w, cd, q, strlen(q)); if (wrbuf_len(w)) - { - int len = wrbuf_len(w); - res = odr_strdupn(o, wrbuf_buf(w), len); - } + res = odr_strdup(o, wrbuf_cstr(w)); else res = odr_strdup(o, q); yaz_iconv_close(cd); - wrbuf_free(w, 1); + wrbuf_destroy(w); return res; } @@ -2134,20 +2131,22 @@ static int cmd_update_SRW(int action_no, const char *recid, static int cmd_update_common(const char *arg, int version) { - char action[20], recid[20]; + char action[20], recid_buf[20]; + const char *recid = 0; char *rec_buf; int rec_len; int action_no; int noread = 0; *action = 0; - *recid = 0; - sscanf (arg, "%19s %19s%n", action, recid, &noread); + *recid_buf = 0; + sscanf (arg, "%19s %19s%n", action, recid_buf, &noread); if (noread == 0) { - printf("Update must be followed by action and recid\n"); + printf("Use: update action recid [fname]\n"); printf(" where action is one of insert,replace,delete.update\n"); - printf(" recid is some record ID (any string)\n"); + printf(" recid is some record ID. Use none for no ID\n"); + printf(" fname is file of record to be updated\n"); return 0; } @@ -2166,6 +2165,9 @@ static int cmd_update_common(const char *arg, int version) return 0; } + if (strcmp(recid_buf, "none")) /* none means no record ID */ + recid = recid_buf; + arg += noread; if (parse_cmd_doc(&arg, out, &rec_buf, &rec_len, 1) == 0) return 0; @@ -2277,7 +2279,7 @@ static int cmd_update_Z3950(int version, int action_no, const char *recid, notToKeep->elements[0] = (Z_IU0SuppliedRecords_elem *) odr_malloc(out, sizeof(**notToKeep->elements)); notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque; - if (*recid && strcmp(recid, "none")) + if (recid) { notToKeep->elements[0]->u.opaque = (Odr_oct *) odr_malloc (out, sizeof(Odr_oct)); @@ -2319,7 +2321,7 @@ static int cmd_update_Z3950(int version, int action_no, const char *recid, notToKeep->elements[0] = (Z_IUSuppliedRecords_elem *) odr_malloc(out, sizeof(**notToKeep->elements)); notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque; - if (*recid) + if (recid) { notToKeep->elements[0]->u.opaque = (Odr_oct *) odr_malloc (out, sizeof(Odr_oct));