Russian Apache Switch to English
Switch to Russian koi8-r
windows=1251
cp-866
iso8859-5
Russian Apache Как это работает Рекоммендации Где взять Как установить Как настроить Статус и поддержка
Краткий обзор FAQ Список рассылки Благодарности Поиск по серверу Powered by Russian Apache
Russian Apache mailing list archive (apache-rus@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-rus] Russian Apache 1.3.4 PL28.9



> Changes:
> PL28.9, Apache 1.3.4, Mar 10 1999, Alex Tutubalin
...
>  2. Если сервер не может найти таблицу перекодировки из Source charset,
>     то имена кодировок "на диске" и "клиентской" устанавливаются в
>     SourceCharset, никакой перекодировки не происходит, а выдача
>     charset=name в Content-Type происходит в соответствии с установками 
>     CharsetAgent/UseMultiViews/флагом S для WideRecodeTable
К сожалению тут не все в порядке -(((((: "Segmentation fault"
И понятно почему:

  if(!rtbl)
    {
      r->ra_codep = make_codepage_data(r->pool,dirconf->emptytbl,dirconf->empty$
                                       src_cs,src_cs,charset->lang);
      r->ra_codep->cp_otabl_p = NULL;
      r->ra_codep->cp_itabl_p = NULL;
    }
  else
    r->ra_codep = make_codepage_data(r->pool,rtbl->convtbl_ptr,rtbl->revtbl_ptr,
                                     charset->tablename,rtbl->namefrom,charset-$

// Вот где ошибка:  rtbl == 0 !!!!! 
  if(rtbl->flags & RA_WIDE_CHARS_SC)   
    r->ra_codep->cp_flags |= RA_WIDE_CHARS_SC;

Наверно надо добавить {} к else. Кроме того charset->lang уже не тот,
как и далее по тексту, наверно нужно "charset=exact_getcharset(dirconf,src_cs);"
И нельзя ставить "r->ra_codep->cp_otabl_p = NULL;", так как в httpd.h

#define ra_charset_active(r) (r && r->ra_codep && r->ra_codep->cp_otabl_p && \
                           ra_check_type(r))

а в main/http_protocol.c делается проверка:

      if (ra_charset_active(r) && r->ra_codep->cp_lang &&  r->ra_codep->cp_name
          && ( ra_flag(r,RA_IGNORE_LANGUAGE)
               ||(r->content_language
                  &&!strcasecmp(r->ra_codep->cp_lang,r->content_language))
               )
          && (r->ra_codep->cp_flags & RA_NEED_CHARSET)
          ){
        if (r->byterange > 1)
          ap_table_setn(r->headers_out, "Content-Type",
                        ap_pstrcat(r->pool, "multipart",
                                   use_range_x(r) ? "/x-" : "/",
                                   "byteranges; boundary=", r->boundary,
                                   "; charset=",r->ra_codep->cp_name,
                                   NULL));

Хотя может нужно убрать проверку r->ra_codep->cp_otabl_p. А dirconf->emptytbl,
это что?

Во общем вот что меня получилось:

  if(!rtbl)
    {
      charset=exact_getcharset(dirconf,src_cs);
      r->ra_codep = make_codepage_data(r->pool,dirconf->emptytbl,dirconf->emptytbl,
				       src_cs,src_cs,charset->lang);
    }
  else
    {
     r->ra_codep = make_codepage_data(r->pool,rtbl->convtbl_ptr,rtbl->revtbl_ptr,
				     charset->tablename,rtbl->namefrom,charset->lang);
     if(rtbl->flags & RA_WIDE_CHARS_SC)
       r->ra_codep->cp_flags |= RA_WIDE_CHARS_SC;
    }

    if(!charset->flags & MOD_CHARSET_NO_CHARSETNAME) 
      r->ra_codep->cp_flags |= RA_NEED_CHARSET;

Кстати. мне казалось что раньше 'Content-Language:' выставлялось и без
участия mod_negotiation, так ли это?

-- 

                      С наилучшими пожеланиями, Евгений Бырганов.
                      Best regards, Eugene Byrganov.

  mailto:E.B.Byrganov@inp.nsk.su
  work - http://www.inp.nsk.su/





Спонсоры сайта:

[ Russian Apache ] [ Как это работает ] [ Рекомендации ] [ Где взять ] [ Как установить ] [ Как настроить ] [ Статус и поддержка ] [ Краткий обзор ] [ FAQ ] [ Список рассылки ] [ Благодарности ] [ Поиск по серверу ] [ Powered by Russian Apache ] [ Apache-talk archive ]

"Russian Apache" includes software developed by the Apache Group for use in the Apache HTTP server project (http://www.apache.org/) See Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C) 1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.