From 65120d727892457382342a9efc7bee7da1e27d07 Mon Sep 17 00:00:00 2001 From: oleg Date: Mon, 13 Jan 2003 10:56:09 +0000 Subject: [PATCH] Add a few fixs: correct use yaz_iconv(), correct delete of zebrasrv.pid file. Add support short names for character set. It is inheritance the oldest names, which will be deleted later. --- index/zebraapi.c | 24 ++++++++++++++++++++++- index/zserver.c | 57 ++++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 70 insertions(+), 11 deletions(-) diff --git a/index/zebraapi.c b/index/zebraapi.c index 8dbfe58..79a90b7 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -1,4 +1,4 @@ -/* $Id: zebraapi.c,v 1.79 2002-11-26 22:18:34 adam Exp $ +/* $Id: zebraapi.c,v 1.80 2003-01-13 10:56:09 oleg Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -1396,7 +1396,29 @@ void zebra_shadow_enable (ZebraHandle zh, int value) int zebra_record_encoding (ZebraHandle zh, const char *encoding) { xfree (zh->record_encoding); + + /* + * Fixme! + */ + + 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); + + logf(LOG_DEBUG, "Reset record encoding: %s", encoding); + + zh->iconv_to_utf8 = + yaz_iconv_open ("UTF-8", encoding); + if (zh->iconv_to_utf8 == 0) + yaz_log (LOG_WARN, "iconv: %s to UTF-8 unsupported", encoding); + zh->iconv_from_utf8 = + yaz_iconv_open (encoding, "UTF-8"); + if (zh->iconv_to_utf8 == 0) + yaz_log (LOG_WARN, "iconv: UTF-8 to %s unsupported", encoding); + return 0; } diff --git a/index/zserver.c b/index/zserver.c index cfdd3dd..7d992ae 100644 --- a/index/zserver.c +++ b/index/zserver.c @@ -1,4 +1,4 @@ -/* $Id: zserver.c,v 1.100 2002-10-22 12:51:08 adam Exp $ +/* $Id: zserver.c,v 1.101 2003-01-13 10:56:09 oleg Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -107,6 +107,7 @@ bend_initresult *bend_init (bend_initrequest *q) int num_langs = 0; int selected = 0; int i; + char *right_name; NMEM nmem = nmem_create (); yaz_log (LOG_LOG, "character set and language negotiation"); @@ -114,19 +115,49 @@ bend_initresult *bend_init (bend_initrequest *q) yaz_get_proposal_charneg (nmem, q->charneg_request, &charsets, &num_charsets, &langs, &num_langs, &selected); + + right_name = (char *)nmem_malloc(nmem, 32); + for (i = 0; i < num_charsets; i++) { - yaz_log (LOG_LOG, "charset %d %s", i, charsets[i]); + *right_name = '\0'; + + /* + * FIXME! It is like rudiment :-)) + * We have to support this short names of character sets, + * because a lot servers in Russia to use own in during + * character set and language negotiation still. + */ + + if (!yaz_matchstr(charsets[i], "win")) { + strcpy(right_name, "WINDOWS-1251"); + } else if (!yaz_matchstr(charsets[i], "koi")) { + strcpy(right_name, "KOI8-R"); + } else if (!yaz_matchstr(charsets[i], "iso")) { + strcpy(right_name, "ISO-8859-5"); + } else if (!yaz_matchstr(charsets[i], "dos")) { + strcpy(right_name, "CP866"); + } else if (!yaz_matchstr(charsets[i], "uni")) { + strcpy(right_name, "UTF-8"); + } else { + strcpy(right_name, charsets[i]); + } + + logf (LOG_LOG, "charset %d %s (right name is %s)", i, + charsets[i], right_name); - if (odr_set_charset (q->decode, "UTF-8", charsets[i]) == 0) - { - odr_set_charset (q->stream, charsets[i], "UTF-8"); - if (selected) - zebra_record_encoding (zh, charsets[i]); - q->charneg_response = - yaz_set_response_charneg (q->stream, charsets[i], + if (odr_set_charset (q->decode, "UTF-8", right_name) == 0) + { + odr_set_charset (q->stream, right_name, "UTF-8"); + if (selected) + zebra_record_encoding (zh, right_name); + q->charneg_response = + yaz_set_response_charneg (q->stream, right_name, 0, selected); - break; + break; + } else { + yaz_log(LOG_LOG, "odr_set_charset(): charset name %s unsupported", + right_name); } } nmem_destroy (nmem); @@ -649,8 +680,14 @@ static void bend_stop(struct statserv_options_block *sob) #ifdef WIN32 #else + /* + * Fixme! Why commets?, because the first chaild process to invoke bend_stop(). + * + if (!sob->inetd) unlink ("zebrasrv.pid"); + */ + #endif if (sob->handle) { -- 1.7.10.4