Грузия. Часть 2. Батуми. Чакви. Букнари. Уреки. Тбилиси

На пятый день нашего отпуска в Грузии мы отправились на восемь дней в Батуми, точнее в поселок Чакви с приподнятым настроением в надежде увидеть море. Мы ведь не знали тогда, что Чакви — было самым дождливым местом Советского Союза, двести дождливых дней в году.

Грузия. Тбилиси. Двухэтажный поезд

Первый день прошёл хорошо. Заселились в столетнем особняке какого-то князя, искупались в море, немножко погрелись на солнышке. Вечером сытно покушали в местном ресторане Champion.

На следующий день съездили на рынок Батуми, где купили шесть литров провианта: красного, розового и белого в пластиковой таре, мяса пару кило, форель четыре штуки, овощи-фрукты, лаваш мягкий, хороший. На обратном начал накрапывать дождик, который превратился в нормальный такой ливень, как только мы добежали до дому.

Грузия. Батуми. Рынок

Посидели с хозяином, поболтали о том, о сём. Оказалось, что во время сильного ливня отключают воду. Без воды стало совсем уныло, хозяин через пару часов попрощался и отбыл по своим делам, а мы остались без воды с полудохлым интернетом и шестью литрами вина.

Под вечер настроение было так себе. Мне-то хорошо — я с двумя интересными девушками поехал. А им достался приятный парень какой-то небритый мужик. Решили возвращаться в столицу на пару дней пораньше. Утром, впервые с начала нашего путешествия, стали смотреть телевизор — понимаете всю тяжесть нашего положения?

Наскоро перекусив остатками вчерашнего пира, поехали в центр Батуми. В центре Батуми строится башня Трампа. Того самого дядьки, который схлестнулся с Хиллари Клинтон за пост президента США. Потом добрели до канатной дороги, поднялись наверх и зашли попить чаю-соки-воды в кафе «АРГО». Будете в Батуми — избегайте этого заведения.

Грузия. Батуми. Канатная дорога

Сначала мы долго сидели — ждали меню, его принесли только после того, как я окликнул официантку. Затем у нас приняли простой заказ: кофе для одной, томатный сок для другой и бутылочное пиво для вашего покорного слуги. Томатный сок несли почти пятнадцать минут, при этом сок простой, из пачки. Кофе несли полчаса, при этом в зале было пять официантов и два бармена. К счастью, я догадался заказать счёт в момент выноса кофе. После получения счёта мы так и не дождались никого, кто принял бы у нас деньги. При этом, заведение «АРГО» в Батуми, по традиции, добавляет десять процентов за обслуживание, которого нет.

Спустившись вниз, погрузились в маршрутку и поехали в ресторан Champion, что находится в двух километрах от дома.

После ресторана по темноте и грязи перебежали шоссе и стали ждать маршрутку под дождем. Остановилась попутка, возможно видя грустных девушек, нас бесплатно довезли до дому.

Утром было солнечно. Поехали в Уреки. Цели было две: искупаться и набрать с собой местный песок (не спрашивайте зачем). Цели успешно провалены. Долго собирались искупаться. Штанишки спустили — пошел дождь — штанишки подтянули.

Грузия. Уреки. Пляж

Поднялся ветер, спрятались в местной кафешке, где повар, чем-то похожий на Джона Сильвера, только с ногой, рукой и без попугая, приготовил хинкали и оджахури (мясо с картошкой). Потом мы сели в маршрутку до Чакви, перед этим хорошо померзнув на ветру.

Грузия. Уреки. Дождь

На следующий день самочувствие было так себе, погода стояла питерская — дождь и ветер. У нас кончилось терпение, здоровье и оптимизм, было реально холодно. Вода в кране закончилась ещё вчера. Так что ближе ко второй половине дня мы променяли Guesthouse Eco Chakvi на Grand Royal ApartHotel. Итого, нас хватило на пять дней в гармонии с природой.

Грузия. Батуми. Отель Grand Royal ApartHotel

После пары дней в Батуми, вернулись в Тбилиси. Поселились в частном секторе, в местечке под названием D&D Apartaments. Представьте себе уютный одесский дворик, где тетя Сара, дядя Изя — старый одесский еврей и маленький Мотя, который постоянно пачкает штанишки. Вот всё тоже самое, только по-грузински.

Утром, днём и вечером дворик живёт своей домашней жизнью. Кто-то двигает мебель перед сном, кашляет за стеной, какая-то собака включает бумбокс по утрам. Такая программа погружения в местный быт. Готов поспорить, что пару дней по такой программе и мы будем живо обсуждать местных политиков на грузинском.

Кстати, по Грузии удобно передвигаться на такси. Только предварительно надо скачать приложение Taxify — выходит очень выгодно. Смотрите сами — от вокзала Тбилиси до площади Свободы привокзальный таксист захотел двадцать пять лари, я предложил десять — он задумался. Пока он думал, пришёл ответ от таксиста через приложение — шесть лари.

После заселения муж хозяйки показал нам винный магазинчик с умеренными ценами и понеслась вечерина хорошим домашним вином. Называется Wine Shop BATUMI, находится по адресу: пл. Свободы, ул. Пушкина, 19. Будете в Тбилиси — обязательно заходите.

На следующий день поехали в зоопарк смотреть на животных, которых не смыло в прошлом году. Как раз в прошлом году было наводнение и много животных погибло, некоторые убежали. Как нам рассказал таксист (дословно): один бедолага зашел в свой гараж, а там две львицы. Не успел ничего сделать — скушали его.

Потрогали местных зверушек, всех кого нашли: лошадку, енота, ослика и ламу с дебильным выражением лица. В смысле у ламы оно было дебильное, хотя тут с какой стороны забора посмотреть. Видел слоника — слоник внушает! Уши, хобот, хвост — всё при нём. Слоников было две штуки. Выходили из ангара по очереди, смотрели на жалких людишек и уходили обратно.

Потом посетили этнографический музей. На территории музея стоят старинные грузинские дома, которым по сто-двести лет. В одном из домов с удивлением обнаружили знакомую планировку и общий стиль. Примерно в таком доме мы пребывали в Чакви, только с блекджеком телевизором.

Грузия. Тбилиси. Этнографический музей

А вечером мы отправились на канатную дорогу, куда не смогли попасть в наш прошлый заезд в Тбилиси. Было холодно, дул пронизывающий ветер. Он покачивал люльку, наполненную кроме нас китайцами. Сразу невольно вспоминались рижские шпроты. Но всё равно подниматься на канатке с симпатичными девушками гораздо приятнее, чем ползти в горы, положив язык на плечо и чувствуя, как отваливаются ноги и колет в боку. Тбилиси ночью великолепен, категорически рекомендую. Только прихватите хороший фотоаппарат, а то на мобильник получается не очень.

Грузия. Тбилиси. Вечер

Вечером мы зашли в ресторан Firosmani, где впервые послушали грузинское пение. Пели хорошо, даже очень. Хотелось подпевать, но слов не знаю, а сольфеджио в музыкальной школе тщательно прогуливал. Так что просто выпили два литра вина и стало хорошо. Вообще, дома я пью очень редко и по праздникам. Посидеть вечером с пивком или вином — это не про меня.

После вкусного ужина добрели до дому, где выпили еще литр непонятного вина с рынка в Батуми с устойчивым запахом бражки. Домой этот литр не повезешь — так не выбрасывать же? Наверно это был неправильный шаг, но в предпоследний день можно позволить себе немного напиться.

Разумеется, утром снова было нехорошо, но оно того стоило — поверьте.

На следующий день мы искали где поесть одновременно окрошки и хинкали, в итоге забрели в ресторан грузинской кухни, где все было очень острым, поэтому более-менее нормально поел только я, которому после еды в Корее острые блюда по барабану, спутницы остались недовольны. Больше кафешек искать не стали.

Решили перекусить в аэропорту, куда нас отвёз муж нашей хозяйки. После поездки в аэропорт, американские горки кажутся детской игрой для дошколят. Это был самый волнительный момент нашего путешествия. Немного отложив кирпичей, я начал переживать за своих спутниц, поскольку ремень безопасности был только у меня, заднее левое колесо было спущено, а скорость была под 120 км/ч.

Потом был самолёт до Петербурга, где было очень много детей. Самолёт взлетает — дети орут, самолёт садится — дети орут в два раза громче. По ощущениям чисто летающий роддом. Поздравляю, у вас мальчик!

Вот так закончилось наше путешествие в Грузию. Не знаю, как моим спутницам, а мне очень понравилось. Это был самый запоминающийся отпуск из тех, что я помню. Расставаться было очень грустно.

Спасибо, что дочитали до конца и отдельное спасибо моему редактору! ;)

Ссылка на первую часть, если вы её ещё не читали: «Тбилиси. Гори. Уплисцихе. Мцхета».

Грузия. Часть 1. Тбилиси. Гори. Уплисцихе. Мцхета

В начале этого года долго думал куда поехать в отпуск, в Турцию нельзя, в Египет тоже. Америку по скайпу посмотрел, Нью-Йорк с высоты сотого этажа увидел. Случайно узнав, что хорошая знакомая собирается в Грузию в одиночестве, очень захотелось поехать втроём. Успешно напросившись к подруге баластом, в сентябре полетели в Грузию.

Грузия. Тбилиси. Памятник Рейгану

Скажу сразу: «Вах» грузины говорят редко, только когда я просил или когда авария на дороге. Кепка-аэродром не носят, нос у грузин поменьше моего. В общем, анекдоты в качестве туристического справочника не вариант.

Немножко отступлю от темы: обычно девушки выбирают себе некрасивую, страшненькую подружку, чтобы на её фоне выглядеть лучше, так вот с моей девушкой и её подругой этот прием не сработал. Они обе в меру симпатичные. Так что, когда обнаружилось, что в билетах на самолёт перед моим именем написано «миссис», неожиданно до меня дошло, что страшная подружка в нашей компании — это я.

Грузия. Тбилиси. Симпатичные подружки

Грузинское гостеприимство действительно существует, это не миф. В первый день прогулок в Тбилиси в первом же ресторане нам презентовали бутылку шампанского в подарок от фирмы как только узнали, что мы из Петербурга, который грузины до сих пор настойчиво называют Ленинградом.

Грузия. Тбилиси. Шампанское в подарок

На следующий день мы поднялись на фуникулере в горы к телевизионной вышке и колесу обозрения. Надо сказать, что вышка внушает лёгкий трепет своими размерами, ржавчиной и монументальностью. Она выгодно смотрелась бы в фильмах «Сталкер», «Безумный Макс» или «Киндзадза». Наверху есть парк аттракционов, чисто наш ЦПКиО. В будний день без детей там делать особо нечего. Проезд на фуникулере стоит два лари в одну сторону. Виды открываются великолепные, особенно с колеса обозрения.

Грузия. Тбилиси. Телевизионная вышка

После спуска на фуникулере зашли в маленький магазинчик с алкоголем и чурчхелой. Какой-то мужик показывал продавцу настоящую чачу в бутылке: «Видишь как пузырьки держаться долго. Это настоящая чача». И тут мне очень захотелось попробовать чачу прямо на месте и я спросил: «Вы продаете чачу стопками? Чтобы вот так ХЛОП и пошёл дальше гулять». Продавец ответил отрицательно, а мужик сказал: «Хочешь чачу? Пойдём со мной!» и отвел меня в свой подвальчик, где от души налил чачу в глубокую посуду. А меня никто за язык не тянул. Налили — пей. Выпил, крякнул, занюхал рукавом, сказал «Спасибо!» и метнулся на свежий воздух, на улицу, пока не предложили ещё.

Вообще, мы проделали этот долгий путь в Грузию, чтоб славно пожрать посетить ресторан Veliaminov, про который подруга слышала много хорошего еще в Петербурге. Забурившись в ресторан взяли хинкали, салаты всякие, прочую закуску и литровый графин красного домашнего вина, который принимали неспешно маленькими дозами до тех пор, пока с нами не познакомились три престарелых грузина и вино полилось рекой. Последний графин, который я помню, был вроде бы пятым. Хитрые грузины тост говорят, нам подливают, бокал поднимают, а сами не пьют. Глаз да глаз, короче, нужен. Надо отдать должное нашим новым друзьям — видя наше состояние нестояния (идти могли не все) — вызвали и оплатили такси. За что огромное им спасибо!

Очнувшись утром, снова поперлись в горы, к матери Картли. Разумеется, канатной дорогой мы пользоваться не стали. Девушки-то крепкие все, а мальчик слабый. Пошли пешком — всего 100500 ударов моего сердечка ступеней и мы наверху. Если бы не ступеньки и подъем вверх, в горах хорошо. Наверху был в состоянии кунфу Панды из известного мультика.

Грузия. Тбилиси. Гора

Спустились в ботанический сад с обратной стороны, дошли до водопада, помочили ножки и стали бродить по саду в строгом соответствии с указателями. Будете в ботаническом саду Тбилиси — указателям не верьте — они врут. Написано «Розариум», а там закрыто, написано «Туда ходи — там все есть» — тоже ничего. Вечером дома выяснилось, что ботанический сад купил какой-то хороший человек и будет виллу себе там делать.

Кстати, про вечер: в Тбилиси мы остановились в местечке под названием Montini House и здешний хозяин по традиции угощает шашлыком всех гостей. Мясо готовит без маринада, что удивительно, поскольку вкус мяса великолепен. Перед ужином мне предложили на выбор чачу: для взрослых (70 градусов) и детскую, что в хэппи мил кладут (50 градусов). Я мальчик уже большой, выбрал конечно же покрепче и пожалел о своём выборе буквально после пары стопок, когда стал терять ориентацию в пространстве. Дамам было предложено белое домашнее вино, на которое я переключился после четвертой стопки чачи. Потом был шашлык, салат, грузинский хлеб из тандыра — все вкусное, свежее — большое спасибо!

На рассвете наступила расплата за крепкую чачу и смешение напитков. Кое-как, на бровях дополз до душевой и сортира, где, насколько это возможно, привёл себя в порядок и взбодрился. Хочу заметить, что наш белый друг тут не в ходу, только дырка в полу. Как в Японии, короче. Коничива, аниме и прочий хентай — ну вы знаете.

Рано утром, часов в двенадцать, собрались в Гори. До Гори идёт маршрутка от станции метро Didube. Метро в Тбилиси темноватое, эскалатор движется быстрее, чем в Петербурге, двери вагона открывают до полной остановки поезда. Самые ловкие выпрыгивают практически на ходу. Проезд по карточке, стоимость 50 тетри (14-15 рублей).

Теперь про маршрутку до Гори: она быстрая, несется по левому ряду со скоростью 120, имеет три штатных сиденья в ряд и одно раскладное в проходе, всего четыре места в ряду — ну чисто Боинг. По закону подлости нам достались именно эти особенные места. Слева на меня периодически падал сонный мужик, сзади в позвоночник впивалась барби-сайз спинка сиденья, а внутри шла борьба чачи с вином в поисках выхода. Наивные пассажиры даже не догадывались от чего я их героически спасал всю дорогу.

Побывали в музее Сталина в Гори. Посмотрели где Сталин родился, чем дышал, как жил. Вообще, очень странно в одной стране иметь музей Сталина и музей Советской оккупации — попахивает шизофренией (вы или крестик снимите, или трусы наденьте).

Грузия. Гори. Дом Сталина

Потом поехали в место под названием Уплисцихе. Там в скалах раньше жило до двух тысяч человек. Материал скалы — песчанник, очень удобно решать квартирный вопрос: взял зубило и молоток, поработал руками и вот тебе новая комната, кухня, ванная с джакузи, гараж на три машины. Никаких ипотек и кредитов на миллион лет.

Грузия. Уплесцихе

Вернулись обратно в Тбилиси и утром следующего дня отправились в Мцхету — небольшой городок, где находится древнейший храм в Грузии. Кстати, грузины православные христиане, поэтому намаз, Курбан-Байран, минареты — это не про них. Нагуляв аппетит, занялись поиском съестного в округе. Нам порекомендовали заведение «Салобие», но навигатор сказал, что до него целых пять километров в обратную сторону топать, поэтому мы поехали на автовокзал с целью найти пропитание на месте.

Побродили возле автовокзала Мцхеты и во дворах, возле каких-то гаражей нас окликнула тетушка и пригласила внутрь на покушать. Оказывается то, что с одной стороны похоже на гараж, с обратной стороны имеет открытую террасу на склоне горы. Взяли хинкали, хачапури и домашнего вина. Домашнее вино имело лёгкий запах ацетона, поэтому, слегка пригубив эту подозрительную жидкость, перешли на пивасик. В остальном еда была неплоха.

На пятый день нашего путешествия мы поехали в Батуми, к морю на восемь дней. Об этом читайте во второй части: «Батуми. Чакви. Букнари. Уреки. Тбилиси».

Южная Корея, Сеул. Командировка

Неожиданно оказался в Южной Корее в командировке. Первый раз побывал в Азии, поэтому впечатлений вагон и маленькая тележка.

Скромный офис LG в Корее

Вообще, в Корее у меня много чего произошло в первый раз (гусары — молчать). В первый раз я использовал разговорный английский для ежедневного общения, первый раз я пользовался палочками для еды, а не баловства, первый раз летел на самолете более четырех часов, первый раз платил карточкой за границей, первый раз летел на самолёте в компании двух незнакомых людей.

Во-первых, погода жаркая и влажная. Днем +36, ночью +26. Постоянно хочется выйти из этой парилки на улицу, но ты уже на улице. Ободряющий ветерок тоже влажный и горячий, поэтому облегчения не приносит. Подул освежающий бриз — это не про Сеул. И дождь, зараза, тоже тёплый.

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

Для начала хочу рассказать про сеульское метро. Вот простая и понятная схема:

Южная Корея. Сеул. Карта метро

Чтобы попасть на нужную станцию надо сначала рассчитать маршрут, затем приобрести карточку на одну поездку до нужной станции. Стоимость проезда от 1450 вон по простой линии и 2250 по линии, где нет машинистов. Карточка стоит 500 вон, которые можно вернуть — отдав карточку специальному автомату после поездки. Выход из метро тоже по карточке.

Ихние воны в наши баксы переводятся просто: тысяча корейских вон равна одному доллару.

По телевизору есть канал, где игроки рубятся в MMORPG, а комментаторы комментируют. Накал страстей, скажу я вам, не меньше, чем на футбольных матчах, а то и поболее будет. Непонятно только — это в записи или прямой эфир.

Телевидение Южной Кореи

А ещё после окончания местных новостей по телевизору дикторы кланяются сначала зрителям, потом друг другу.

Ещё в городе отсутствуют животные от мала до велика: нет ни собак, ни кошек, ни птиц, ни насекомых. За время, которое я там был, встретил одного голубя и одну зверушку типа моль. Возможно они все кучкуются в других районах города.

И, кстати, о еде — перед поездкой меня предупреждали, что еда в Корее очень острая и жжет два раза, если вы понимаете о чем я. На самом деле нет. Самое острое, что мне попалось — это Spicy Beef Soup, который я заказал и попытался съесть сразу по прибытию для полноты ощущений. Попытался, но не смог. Думал сдохну, но обошлось. Так что теперь я и дальше смогу вести этот блог.

Еда в Южной Корее

Капуста по-корейски, она же кимчи, островата, но быстро привыкаешь. С местной водкой Соджи идет на ура. Кстати, на Маяковской в Петербурге есть корейский ресторан, так там такая кимчи, как и в Корее. Короче, если специально не искать острую пищу — жить можно. Что интересно — при заказе любого блюда из меню вы получаете в довесок воду или какой-нибудь напиток перед едой и набор разнообразных салатов.

Настенная патч панель. Наводим порядок с локальной сетью

Решил навести порядок в своей серверной (на самом деле пыльный угол в чулане).

Туда приходят провода локальной сети, телевидения и оптоволокно. Локальная сеть из одиннадцати проводов, телевидение — восемь. Каждый провод в своей гофре. В итоге всё это торчало из стены как Змей Горыныч о двадцати головах. Для локальной сети надумал и купил настенную патч панель с передним разводом проводов (модель LY-PP5-48). С виду добротный металлический девайс, размерами 28x8x4см и весом в кило с лишним.

Такая панель имеет съёмную переднюю крышку для монтажа витой пары:

Патч панель LY-PP5-48 со снятой крышкой

Монтаж производится с помощью обычной отвертки с тонким плоским жалом или специальным устройством для разводки витой пары. Такого устройства у меня не было, а тратить семьсот рублей для разовой работы совсем не хотелось. В то же время нужно было сделать все красиво и на века. Так что устройство для монтажа взял у знакомого админа (спасибо, Олег!). Устройство загоняет провод в паз и автоматически отрезает лишнее. Всего нужно было развести одиннадцать проводов, в каждом проводе восемь жил, итого восемьдесят восемь жил. Каждый проводок надо разделать на жилы, потом каждую жилу завести на своё посадочное место согласно схеме B, затем каждую жилу закрепить вышеописанным устройством. Потом посмотреть как всё плохо отрезается и пройтись кусачками.

За первые пару часов сделан верхний ряд (нечетные номера), каждый проводок заботливо укреплен стяжкой:

Патч панель LY-PP5-48. Разводка верхнего ряда

Затем нижний ряд (четные номера):

Патч панель LY-PP5-48. Разводка нижнего ряда

Вот такой получился результат (для первого раза вполне неплохо, я считаю):

Финальный вид серверной

Слева направо: гигабитный свитч D-Link, WiFi роутер Zyxel Keenetic, сервер HP Proliant и оптоволоконный (прости, Господи!) Huawei роутер от «Ростелеком».

Осталось спрятать провода в симпатичный кабель-канал и сделать что-то с телевизионными проводами.

Спасибо за внимание, заходите еще!

Описание формата ZIP файла. Часть 2 (расширение ZIP64, поддержка больших файлов)

Давным-давно, когда создавался формат ZIP и всем хватало 640KB памяти, никто не задумывался, что файл может быть >4GB и содержать в себе больше 65535 элементов, поэтому поддержка таких объемов прикручена костылями и называется ZIP64. До сих пор этот формат плохо понимают Far Manager, 7-Zip и проводник седьмой винды (а говорят, что в Microsoft берут только гениальных программистов, возьмите меня, я умнее, чем выгляжу).

Расширение ZIP64 добавляет две основные фичи:

  • структура ZIP64 End Of Central Directory Record (EOCD64) с 64-битными полями и ZIP64 End Of Central Directory Locator для поиска структуры EOCD64
  • если значения некоторых полей Central Directory Header и Local File Header превышают максимальный, то эти значения записываются в Extra Field этих структур в специальном формате ZIP64 Extended Extra Field

А теперь подробнее про эти нововведения.

ZIP64 End Of Central Directory Locator

Используется для поиска структуры EOCD64 и находится сразу перед стандартным End Of Central Directory Record.

EOCD64Locator

struct EOCD64Locator
{
    // Обязательная сигнатура, равна 0x07064b50
    uint32_t signature;
    // Номер диска для поиска EOCD64
    uint32_t diskNumber;
    // Смещение от начала файла до EOCD64
    uint64_t eocd64Offset;
    // Количество дисков
    uint32_t totalDiskCount;
};

Определить, что наш ZIP файл содержит такую запись просто: проверьте поля стандартного End of central directory record. Если 16-битные поля равны 0xFFFF или 32-битные — 0xFFFFFFFF, значит такая запись должна быть.

ZIP64 End Of Central Directory Record

Эта структура представляет собой 64-битную версию стандартного End Of Central Directory Record. Находится по адресу EOCD64Locator.eocd64Offset.

EOCD64

struct EOCD64
{
    // Обязательная сигнатура, равна 0x06064b50
    uint32_t signature;
    // Размер записи EOCD64
    uint64_t eocd64Size;
    // Версия для создания
    uint16_t versionMadeBy;
    // Версия для распаковки
    uint16_t versionToExtract;
    // Номер текущего диска
    uint32_t diskNumber;
    // Номер диска для поиска Central Directory
    uint32_t startDiskNumber;
    // Количество записей в Central Directory
    uint64_t numberCentralDirectoryRecord;
    // Всего записей в Central Directory
    uint64_t totalCentralDirectoryRecord;
    // Размер Central Directory
    uint64_t sizeOfCentralDirectory;
    // Смещение Central Directory
    uint64_t centralDirectoryOffset;
    // zip64 extensible data sector (переменной длины)
    uint8_t *dataSector;
};

Extra Field

Если вы внимательно читали мои предыдущие заметки на тему ZIP формата (описание формата ZIP, чтение ZIP файла, запись ZIP файла), то могли заметить, что у записей типа Local File Header и Central directory file header есть поля под названием extraField.

В это поле записываются расширенные данные, о которых не было известно на момент создания первой версии формата ZIP. В этом поле могут содержаться разные типы данных и реализуется это последовательностью структур типа ExtraFieldRecord:

ExtraFieldRecord

struct ExtraFieldRecord
{
    // Заголовок (для ZIP64 extended information равен 0x0001)
    uint16_t headerId;
    // Размер данных
    uint16_t dataSize;
    // Какие-то данные размером dataSize
    uint8_t *data;
};

Данные ExtraFieldRecord.data для ZIP64 extended information выглядят так:

ZIP64ExtendInformation
struct ZIP64ExtendInformation
{
    // Размер несжатых данных
    uint64_t uncompressedSize;
    // Размер сжатых данных
    uint64_t compressedSize;
    // Смещение Local File Header от начала файла
    uint64_t localFileHeaderOffset;
    // Номер диска для поиска
    uint32_t diskNumber;
};

Обратите внимание — в это записи важен лишь порядок полей. Все поля необязательно будут присутствовать.

Например, структура Central directory file header будет содержать 0xFFFFFFFF только в поле localFileHeaderOffset, значит в Extra Field будет лежать только значение localFileHeaderOffset, а остальные поля будут отсутствовать.

Порядок действий

  • определить наличие EOCD64 проверкой полей EOCD на переполнение и считать сначала EOCD64Locator, затем EOCD64
  • для каждой структуры типа Central directory file header и Local File Header определить поля на переполнение и, если таковые присутствуют, то считать их значения из ExtraField

Вот, в принципе, и вся наука. Вы не подумайте, что я нашел эту информацию тщательным изучением ZIP файлов, просто читайте спецификацию ZIP формата (на английском).

Личный блог Евгения Жирнова