Интернета нет. Отключили телефон за неуплату. Включат не скоро, дней через десять где-то. Жаль, жаль, жаль... Ну да пока не скучаю, раз время есть :)
Сейчас вот сел и решил зафиксить давно раздражавший меня баг: при создании или обновлении базы с музыкой mpd всё выводит в UTF8. У меня же вражеская CP1251 и я, естественно, вижу кракозябры :( В нашу багзиллу я даже по этому поводу вешал
баг #8655.
Так вот. Я сам от себя в шоке как легко его удалось найти и зафиксить! :) Сначала думал разобраться по исходникам, но что-то через пять минуток утомился и решил, что запутался, хотя, как потом выяснилось, я шел по верному пути. Тогда я решил использовать отладчик. Не скажу, чтобы я слишком умел пользоваться gdb, но мне и понадобилось-то всего команды 4: br, r[un], n[ext], p[rint]. Вот и весь мой скудный арсенал :)
Делал весьма просто: скомпилил с отладкой (--enable-debug), запустил под gdb (gdb ./src/mpd), далее поставил точку останова на функции main (надо же с чего-то начать?) - br main. Потом запустил mpd уже на выполнение с опцией при которой я и получал на терминале кракозябры - r --create-db. Потом долго нажимал n и смотрел что там вслед за чем вызывается. В какой-то момент у меня побежали эти кракозябры. Я смотрю после какой функции это произошло. Потом начинаю весь процесс с самого начала, только уже не для точки останова ставлю не ф-цию main, а ту во время выполнения которой кракозябры и печатаются. И так я спускался по иерархии ф-ций раз 5 пока не дошел до ф-ции в которой вывод и осуществляется. Попутно я просматривал в редакторе код той ф-ции, которую отлаживаю. Кстати, это помогло, так как я там приметил функцию utf8ToFsCharset, для перевода строки из UTF8 в кодировку пользователя. Потом мне оставалось лишь в месте где выводится название песни лишь добавить для каждой вызов этой ф-ции для перекодировки. Вообщем, «это было не трудно, это по любви» ;-)
Вот такая история. Какая из всего этого мораль? Их несколько:
1) я молодец. И вообще думаю, что если бы меня не любили и не хвалили, то я бы таким не был. Так что спасибо вам, мои дорогие, за то, что помогаете мне жить и самосовершенствоваться! :) Также спасибо Богу! :)
2) на этом примере мы видим преимущество Open Source. Когда те кто могут залезть в исходный код и поправить - залазят и правят, а потом автору патчи высылают. В этом вся сила, друзья!
3) да, я сам в шоке и очень рад, что вот так получилось и что я помог Опену Соурсу ;))) Прям аж мега приятно. Но в данный момент никого рядом нет, кто бы мог разделить со мной радость. Увы...
Патч на people выложу когда появится интернет, а пока он
доступен в багзилле. Автору тоже обязательно отправлю.
Cheers, господа и дамы!
Updated(12092006): fix tag
Updated(24032008): fix typo