On Tue, Mar 02, 1999 at 06:36:11PM +0600, Eugene B. Byrganov wrote:
>
> Вопрос, чем отличаются charset_table_t->recode_tables->tofrom, от
> charset_table_t->tablename - у меня они совпали? И зачем вообще нужно
> копировать часть данных в codepage_data_t, а не указатель типа charset_table_t?
Вот отвечаю еще раз. Взял исходники и на них вдумчиво смотрю.
В charset_table_t хранится название кодировки _в_которую_
мы перекодируем. Эта структура порождается при появлении директивы
CharsetDecl
recode_table_t - это описание таблицы (from/to таблица). Она порождается
директивой Charset{Wide}RecodeTable и вставляется в список
соответствующих charset_table_t (CharsetRecodeTable порождает
_две_ таблицы - туда и обратно). Естественно, имена таблиц совпадают,
но никакого лишнего расхода памяти не происходит т.к. сами названия
charsets делает (аллоцирует для них память) сам Apache при разборе
конфига. А использовать удобно - мы можем быстро искать и charset_table_tt
и recode_table_t по имени.
В codepage_data_t ничего не копируется. В ней заводится немножко данных для
буферов I/O, но сами буфера заводятся on demand. Все остальное - только
копирование указателей.
Одним словом, я не вижу во всем этом ничего такого, что следовало бы
переписать. А на dvk@ я зря наговорил - дизайн на 3 десятка вложенных
структур данных - это мой любимый стиль.
>
> Как долго живут объекты типа codepage_data_t и recode_table_t?
Соответственно, codepage_data_t - свойство request_rec, recode_table_t
живет вечно после чтения конфига.
>
>
> t=recode_table_by_names(r,s,r->ra_codep->cp_name);
А у меня такой нету :)
>
> if(t)
> { /* Ura, delaem podmenu! */
> r->ra_codep->cp_otabl_p = t->convtbl_ptr;
> r->ra_codep->cp_fromname =s;
> }
> else
> { /*Unknows charset! Return html-doc as-is (А сможем ли????) */
> r->ra_codep->cp_otabl_p = 0;
> r->ra_codep->cp_fromname = r->ra_codep->cp_name = s;
Достаточно и правильно написать r->ra_codep = NULL. В этом случае
перекодировка производиться не будет.
Плохо другое - к моменту, когда все работает заголовок уже выдан
и может получиться нехорошо.
>
>
> У меня вроде заработало. В принципе это бы соответствовало HTML3.2 & 4.0.
> По загрузке я разницу между strip http и без него у себя не нашел.
Ее и не будет. Но по-хорошему, нужно сделать обработчик, который
читал бы файл где-то на этапе filename_translation, ставил бы
FORCE_SOURCE_CHARSET и успокаивался бы. Это внесет лишний оверхед,
но зато будет корректнее (и будет независимо работать - можно делать
отдельный модуль в котором, например, кэшировать полторы сотни
filenames и тогда оверхед будет вообще копеечный).
Alex
"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.