пятница, 14 января 2011 г.

ISO9660 FILESYSTEM

Мне не нравится FreeBSD. эта антипатия старая и взаимная. Я ее даже не хочу ставить в тэги.

Началось все это давно (2001 кажется год), когда она отказалась читать с fd0 блок по размеру некратный 512 байт. Да вы слышали что нибудь про абстракцию вообще???

Я тогда некоторое время возился с ней, патч имени меня можно найти во FreeBSD. Но это было давно. Сейчас я опять работаю с ней, и она не перестает меня радовать.

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

И вот сюрприз, пришел правильный диск - не работает. Стали выяснять почему, и выяснилось...

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

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

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

Оказалось, что FreeBSD, Тудыть ее в CVS, позволяет пользователям работать с файлами в верхнем регистре.
# ls
foo.txt
# ls FOO.TXT
FOO.TXT
# WTF?!?
Вот блин, какие заботливые, позаботились о глупых пользователях, не оставили нас...
# ls *.TXT
<пусто>
# WTF!?! WTF?!?
На этом мы собственно и обожглись. Открытие файлов работает без проблем. А вот glob("*.TXT") выдает пустой результат.

Ну кто так строит???