From: Adam Dickmeiss Date: Tue, 21 Dec 2004 22:00:57 +0000 (+0000) Subject: Added zebra_octet_term_encoding that specifies encoding for search X-Git-Tag: snippet.version.1~206 X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=commitdiff_plain;h=be946e8fca9b807679467d508ccfe0f4b450f2d0 Added zebra_octet_term_encoding that specifies encoding for search octet string search terms. Default record encoding is NULL - not ISO-8859-1. This potentially breaks some applications, but it allows for _no_ character set conversion for MARC records and others. --- diff --git a/include/idzebra/api.h b/include/idzebra/api.h index 53ae58d..3cbb498 100644 --- a/include/idzebra/api.h +++ b/include/idzebra/api.h @@ -1,4 +1,4 @@ -/* $Id: api.h,v 1.4 2004-12-02 17:27:03 adam Exp $ +/* $Id: api.h,v 1.5 2004-12-21 22:00:57 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -255,6 +255,12 @@ int zebra_register_statistics (ZebraHandle zh, int dumpdict); YAZ_EXPORT int zebra_record_encoding (ZebraHandle zh, const char *encoding); +YAZ_EXPORT +int zebra_record_encoding (ZebraHandle zh, const char *encoding); + +YAZ_EXPORT +int zebra_octet_term_encoding(ZebraHandle zh, const char *encoding); + /* Resources */ YAZ_EXPORT int zebra_set_resource(ZebraHandle zh, const char *name, const char *value); diff --git a/index/zebraapi.c b/index/zebraapi.c index 3389125..94964fd 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -1,4 +1,4 @@ -/* $Id: zebraapi.c,v 1.144 2004-12-10 12:37:07 heikki Exp $ +/* $Id: zebraapi.c,v 1.145 2004-12-21 22:00:57 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -49,7 +49,6 @@ static int log_level_initialized=0; static Res zebra_open_res (ZebraHandle zh); static void zebra_close_res (ZebraHandle zh); - static void zebra_chdir (ZebraService zs) { const char *dir ; @@ -125,7 +124,6 @@ ZebraHandle zebra_open (ZebraService zs) zh->shadow_enable = 1; default_encoding = res_get_def(zs->global_res, "encoding", "ISO-8859-1"); - zh->record_encoding = xstrdup (default_encoding); zh->iconv_to_utf8 = yaz_iconv_open ("UTF-8", default_encoding); @@ -138,6 +136,8 @@ ZebraHandle zebra_open (ZebraService zs) yaz_log (YLOG_WARN, "iconv: UTF-8 to %s unsupported", default_encoding); + zh->record_encoding = 0; + zebra_mutex_cond_lock (&zs->session_lock); zh->next = zs->sessions; @@ -1870,28 +1870,18 @@ int zebra_shadow_enable (ZebraHandle zh, int value) return 0; } -int zebra_record_encoding (ZebraHandle zh, const char *encoding) +int zebra_octet_term_encoding(ZebraHandle zh, const char *encoding) { ASSERTZH; assert(encoding); - yaz_log(log_level,"zebra_record_encoding"); - zh->errCode=0; - xfree (zh->record_encoding); - - /* - * Fixme! - * Something about charset aliases. Oleg??? - */ + yaz_log(log_level,"zebra_octet_term_encoding"); + zh->errCode = 0; if (zh->iconv_to_utf8 != 0) yaz_iconv_close(zh->iconv_to_utf8); if (zh->iconv_from_utf8 != 0) yaz_iconv_close(zh->iconv_from_utf8); - zh->record_encoding = xstrdup (encoding); - - yaz_log(YLOG_DEBUG, "Reset record encoding: %s", encoding); - zh->iconv_to_utf8 = yaz_iconv_open ("UTF-8", encoding); if (zh->iconv_to_utf8 == 0) @@ -1904,6 +1894,18 @@ int zebra_record_encoding (ZebraHandle zh, const char *encoding) return 0; } +int zebra_record_encoding (ZebraHandle zh, const char *encoding) +{ + ASSERTZH; + yaz_log(log_level,"zebra_record_encoding"); + zh->errCode = 0; + xfree (zh->record_encoding); + zh->record_encoding = 0; + if (encoding) + zh->record_encoding = xstrdup (encoding); + return 0; +} + int zebra_set_resource(ZebraHandle zh, const char *name, const char *value) { ASSERTZH; diff --git a/index/zserver.c b/index/zserver.c index ad2aa5a..3077ed1 100644 --- a/index/zserver.c +++ b/index/zserver.c @@ -1,4 +1,4 @@ -/* $Id: zserver.c,v 1.125 2004-12-13 20:51:30 adam Exp $ +/* $Id: zserver.c,v 1.126 2004-12-21 22:00:57 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -153,7 +153,8 @@ bend_initresult *bend_init (bend_initrequest *q) charsets[i], right_name); odr_set_charset (q->stream, right_name, "UTF-8"); if (selected) - zebra_record_encoding (zh, right_name); + zebra_record_encoding(zh, right_name); + zebra_octet_term_encoding(zh, right_name); q->charneg_response = yaz_set_response_charneg (q->stream, charsets[i], 0, selected);