OberonCore
https://forum.oberoncore.ru/

Zlib
https://forum.oberoncore.ru/viewtopic.php?f=90&t=963
Страница 3 из 6

Автор:  Иван Горячев [ Вторник, 24 Июнь, 2008 09:29 ]
Заголовок сообщения:  Re: Порт zlib

Штирлиц писал(а):
Возмите последнюю версию Zlib из SVN полностью


Ей и пользуюсь. ZlibTestzip.Test - создаёт файл test.zip, содержащий:
CompileOpt.txt
O3-Standard-Terms+Conditions.txt
Тест Рус.txt
Файлы спокойно просматриваются Фаром и 7zipом

ZlibTestzip.Test2 - удаляет первый файл.
Фар открывает архив, но просмотреть файлы не даёт. 7zip архив вообще не открывает, но и ошибок не выдаёт

Автор:  Штирлиц [ Вторник, 24 Июнь, 2008 10:01 ]
Заголовок сообщения:  Re: Порт zlib

Иван Горячев писал(а):
Штирлиц писал(а):
Возмите последнюю версию Zlib из SVN полностью


Ей и пользуюсь. ZlibTestzip.Test - создаёт файл test.zip, содержащий:
CompileOpt.txt
O3-Standard-Terms+Conditions.txt
Тест Рус.txt
Файлы спокойно просматриваются Фаром и 7zipом

ZlibTestzip.Test2 - удаляет первый файл.
Фар открывает архив, но просмотреть файлы не даёт. 7zip архив вообще не открывает, но и ошибок не выдаёт


Странно у меня все прекрасно работает после удаления.
7-zip 4.57, WinRAR 3.24, far 1.7 - все открывают и все показывают

Автор:  Иван Горячев [ Вторник, 24 Июнь, 2008 11:29 ]
Заголовок сообщения:  Re: Порт zlib

7-zip 4.42. Может быть в этом проблема. Ладно, если ещё у кого-то вылезет - значит баг в подсистеме

Автор:  Иван Горячев [ Среда, 25 Июнь, 2008 01:59 ]
Заголовок сообщения:  Re: Порт zlib

Штирлиц, небольшая просьба - комментируйте изменения для своих коммитов, пожалуйста. А то нифига непонятно.

Автор:  Иван Горячев [ Среда, 25 Июнь, 2008 04:14 ]
Заголовок сообщения:  Re: Порт zlib

Иван Горячев писал(а):
7-zip 4.42. Может быть в этом проблема. Ладно, если ещё у кого-то вылезет - значит баг в подсистеме


Так, диагноз: При удалении из архива содержимое файла удаляется, но запись в центральном каталоге остаётся.

Вложения:
test-after-delete.zip [15.21 КБ]
Скачиваний: 289
test-before-delete.zip [15.69 КБ]
Скачиваний: 348

Автор:  Штирлиц [ Среда, 25 Июнь, 2008 08:20 ]
Заголовок сообщения:  Re: Порт zlib

Иван Горячев писал(а):
Иван Горячев писал(а):
7-zip 4.42. Может быть в этом проблема. Ладно, если ещё у кого-то вылезет - значит баг в подсистеме


Так, диагноз: При удалении из архива содержимое файла удаляется, но запись в центральном каталоге остаётся.


Можно по подробнее
test-after-delete.zip - у вас в файле 7-zip 4.42 - "видит" оставшуюся запись в центральном каталоге?
Я проверил - вроде все нормально удаляется и записей после удаления в центральном каталоге 2 остается
после первого удаления

Автор:  Иван Горячев [ Среда, 25 Июнь, 2008 08:27 ]
Заголовок сообщения:  Re: Порт zlib

Штирлиц писал(а):
test-after-delete.zip - у вас в файле 7-zip 4.42 - "видит" оставшуюся запись в центральном каталоге?
Я проверил - вроде все нормально удаляется и записей после удаления в центральном каталоге 2 остается
после первого удаления


Нет. Он архив просто не открывает. Запись видна в Фаре по F3. При этом если удалять 7zipом - остаётся только две записи

Вложения:
test-after-delete-7zip.zip [15.15 КБ]
Скачиваний: 289

Автор:  Штирлиц [ Среда, 25 Июнь, 2008 11:24 ]
Заголовок сообщения:  Re: Порт zlib

Иван Горячев писал(а):
Штирлиц писал(а):
test-after-delete.zip - у вас в файле 7-zip 4.42 - "видит" оставшуюся запись в центральном каталоге?
Я проверил - вроде все нормально удаляется и записей после удаления в центральном каталоге 2 остается
после первого удаления


Нет. Он архив просто не открывает. Запись видна в Фаре по F3. При этом если удалять 7zipом - остаётся только две записи


Поправил DeleteEntry.
Похоже эта ошибка присутствует и в оригинале Aos.
Заодно и ZlibStrings.odc

Автор:  Иван Горячев [ Четверг, 24 Июль, 2008 07:32 ]
Заголовок сообщения:  Re: Порт zlib

Положил на svn модуль StringsUtf - там правильные процедуры для работы с UTF-8

Автор:  Иван Горячев [ Четверг, 24 Июль, 2008 10:17 ]
Заголовок сообщения:  Re: Порт zlib

Загнал тот же большой (142M) bmp в zip-архив (сжимал 7zip-ом, степень ultra). При разархивировании через подсистему получил ошибку -6 (ZlibZip.DataError). А тот же файл, сжатый со степенью normal распаковывается нормально. Я не знаю, является ли сжатие ultra у 7zipа стандартным, и можно ли считать это ошибкой в подсистеме. Так что сообщаю просто для информации.

Автор:  Борис Рюмшин [ Четверг, 24 Июль, 2008 10:49 ]
Заголовок сообщения:  Re: Порт zlib

Иван Горячев писал(а):
Загнал тот же большой (142M) bmp в zip-архив (сжимал 7zip-ом, степень ultra). При разархивировании через подсистему получил ошибку -6 (ZlibZip.DataError). А тот же файл, сжатый со степенью normal распаковывается нормально. Я не знаю, является ли сжатие ultra у 7zipа стандартным, и можно ли считать это ошибкой в подсистеме. Так что сообщаю просто для информации.

В ZIP (Deflate) стандартизирован только формат декодера, 7-zip пользуется этим и оптимизирует как-то сжатие, но так, чтобы оно удовлетворяло стандарту. Так что сложно определить, чья это ошибка... Попробуйте пораспаковывать тот же файл WinRAR (ZIP там от InfoZIP, если Рошал его сильно не менял) и другими архиваторами, которые используют ту же zlib...

Автор:  Иван Горячев [ Четверг, 24 Июль, 2008 10:53 ]
Заголовок сообщения:  Re: Порт zlib

Из других распаковщиков у меня только Windows. Открывает и распаковывает

Автор:  Штирлиц [ Вторник, 21 Октябрь, 2008 05:40 ]
Заголовок сообщения:  Re: Порт zlib

Коллеги, помогите выявить ошибку в Inflate.odc.
Inflate некорректно работает с файлами > 32768
положите .\Zlib\Rsrc\ вместо test_file.doc файл размером > 32768
(желательно > 1Мб) для проверки.
Соответственно поменять имя файла в Testzip.odc (функция Test)
Сам архив создастся корректно и читается WinRar или 7zip архивов.
Но вот распаковка фалов > 32768 проходит с ошибками Test5.
WinRar и 7zip все распаковывает без ошибок.
Ошибка похоже где-то в Inflate.odc
Я уже мозг сломал, что там не так (по сравнению с Aos)

Автор:  Штирлиц [ Среда, 22 Октябрь, 2008 08:11 ]
Заголовок сообщения:  Re: Порт zlib

Нашёл, где ошибка
Ошибка в PROCEDURE InflateCodes (VAR s: Stream);
Код
| CodeStart: (* try fast inflation while enough space available *)
IF (wavail >= 258) & (s.in.avail >= 10) THEN
InflateFast(s, wavail);
IF s.res.code # ZC.Ok THEN
IF s.res.code = ZC.StreamEnd THEN s.decode.state := CodeWash
ELSE s.decode.state := CodeBad
END
END;
EXIT
END;
s.decode.tree := s.decode.lltree;
s.decode.state := CodeLen
Надо поправить вот так
| CodeStart: (* try fast inflation while enough space available *)
IF (wavail >= 258) & (s.in.avail >= 10) THEN
InflateFast(s, wavail);
IF s.res.code # ZC.Ok THEN
IF s.res.code = ZC.StreamEnd THEN s.decode.state := CodeWash
ELSE s.decode.state := CodeBad; EXIT
END
END
END;
IF s.decode.state # CodeWash THEN
s.decode.tree := s.decode.lltree;
s.decode.state := CodeLen
END

На файлах <= 32768 она не проявляется, а на >32768 иногда нет, иногда - да(чаще всего)

P.S. Исправленная версия ZLib прилагается.
В Bluebottle (A2) - ошибка тоже есть

Автор:  Штирлиц [ Воскресенье, 26 Октябрь, 2008 21:25 ]
Заголовок сообщения:  Re: Порт zlib

Еще одна ошибка в ZlibInflate
функция
Код:
PROCEDURE NeedOut (VAR s: Stream; VAR wavail: INTEGER): BOOLEAN;
BEGIN
  IF wavail = 0 THEN
    IF (s.write = WindowSize) & (s.read # 0) THEN
      s.write := 0; wavail := s.read - 1
    END;
    IF wavail = 0 THEN
      Flush(s);
      IF (s.write = WindowSize) & (s.read # 0) THEN
        s.write := 0; wavail := s.read - 1
      END;            
      IF wavail = 0 THEN
        RETURN FALSE
      END
    END
  END;
  RETURN TRUE
END NeedOut;   

должна быть поправлена на
Код:
PROCEDURE NeedOut (VAR s: Stream; VAR wavail: INTEGER): BOOLEAN;
BEGIN
  IF wavail = 0 THEN
    IF (s.write = WindowSize) & (s.read # 0) THEN
      s.write := 0; wavail := s.read - 1
    END;
    IF wavail = 0 THEN
      Flush(s);
      IF s.write < s.read THEN wavail := s.read - s.write - 1
      ELSE wavail := WindowSize - s.write
      END;
      IF (s.write = WindowSize) & (s.read # 0) THEN
        s.write := 0; wavail := s.read - 1
      END;            
      IF wavail = 0 THEN
        RETURN FALSE
      END
    END
  END;
  RETURN TRUE
END NeedOut;


Из-за этого функция
PROCEDURE Uncompress* (VAR src, dst: ARRAY OF Byte;
srcoffset, srclen, dstoffset, dstlen: INTEGER;
VAR len: LONGINT; VAR res: Result);
работает с ошибками, размер данных >32768
P.S. Исправленная версия ZLib прилагается.
В Bluebottle (A2) - ошибка тоже есть

[Модератор] с 20.10.2010 размещён: http://oberoncore.ru/bbcc/subs/zlib/

Автор:  Info21 [ Вторник, 28 Октябрь, 2008 14:22 ]
Заголовок сообщения:  Re: Порт zlib

Интересно, кто ж это писал...
Код:
         WHILE k >= 16 DO
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               INC(s1, ORD(buf[index])); INC(s2, s1); INC(index);
               DEC(k, 16)
         END;
            IF k # 0 THEN
               REPEAT 
                 INC(s1, ORD(buf[index]));
                 INC(s2, s1);
                 INC(index);
                 DEC(k)
               UNTIL k = 0;
            END;

Автор:  Штирлиц [ Вторник, 28 Октябрь, 2008 14:50 ]
Заголовок сообщения:  Re: Порт zlib

Писал это я.
Не помню уже.
Кажется я скорость мерял вычисления.
Вернуть в оригинал забыл

Автор:  Пётр Кушнир [ Вторник, 12 Октябрь, 2010 21:51 ]
Заголовок сообщения:  Re: Порт zlib

Внезапно оказалось, что ZLib отказывается поддерживать русские имена файлов в BB 1.6 rc6. Ковыряния скрытого флага ZlibZIp.EFS вроде как включают поддержку UTF8 однако ни один из имеющихся в наличии архиваторов так и не смог прочесть файл. Есть вероятность(я пока не проверял) что сам ZLib самодельный архив понять сможет и извлечёт исходное имя файла без изменений. Но сам факт печалит :грусть-печаль:

Автор:  Штирлиц [ Среда, 13 Октябрь, 2010 11:07 ]
Заголовок сообщения:  Re: Порт zlib

А в чем печаль? Исходники то все есть.

Автор:  Пётр Кушнир [ Среда, 13 Октябрь, 2010 16:26 ]
Заголовок сообщения:  Re: Порт zlib

Ковыряние в исходниках стороннего компонента не совсем то, чего ожидаешь от компонента, выложенного на zinnamturm.eu

Страница 3 из 6 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/