Uzun zamandır birşeyler yazmıyorum. Bugün bu zincir kırıldı.
Bugün derinlerde kalan lastfm hesabıma girdim. Tavsiyelerine uydum ve sonuç mükemmel. Ne sevdiğimi biliyor bu. Ben onu sevdim, o da beni. Aşkımızın devamı için rhythmbox’un lastfm eklentisini açtım, kullancı adımı ve şifremi girdim ve çalıştı. Buraya kadar normal. Bundan sonrası beni kızdıran taraf. Rhythmbox ile bir şarkıyı sevdim diyemiyordum. O düğmeye tıklayınca rhythmbox kapanıyor, şarkının en güzel yeride bitiyordu. Bu durumu birkaç kez yaşayınca, kafamın kayışı koptu.
Bu durumu ne yapıp edip düzeltmeliydim. İşine koyuldum, gnome bugzillayı karıştırdım yama yok. Yama olmayınca kendi yamamı kendim yapmaya karar verdim. Ama nereden başlamalıydım? Binlerce satır kod içinde nerede bu sorunlu satır(lar). Programcılık yeteneğim ile yeri görebiliyordum ama o bile yetmiyor. Kara günlerimde beni hiç yanlız bırakmayan, eski dostum “gnu debuggeri” bir anda anımsayaverdim. İlk önce rhythmbox paketini debugging yapabilmeye uygun hale getirdim. Sonra gnu rhythmbox sürecine gnu debuugeri yapıştırdım. Artık elimdesin rhythmbox. Sorunlu aşamaya geldiğimde, rhythmbox kapannadan gdb hatayı fısıldıyıverdi. Elimle koymuş gibi buldum.
#0 0xb6836373 in strlen () from /lib/libc.so.6
#1 0xb461b68a in handle_xmlrpc_response (source=0×92ad138, body=0×0, entry=0xa09dba0) at rb-lastfm-source.c:2135
#2 0xb4619d18 in http_response_cb (session=0×9226178, req=0xa0bc0b0, user_data=0xa247be8) at rb-lastfm-source.c:1297
#3 0xb7d700b1 in ?? () from /usr/lib/libsoup-2.4.so.1
sorun strlen() fonksiyonunda. “Sanırım hatalı bir dizge var?” diye düşündüm. http_response_cb -> handle_xmlrpc_response çağırıyor buna göre. body değikeni NULL olması burada göze batıyor. Sorunlu kodlar rb-lastfm-source.c dosyasında. O dosya ile biraz boğuştum. libsoup’tan kaynaklanıyor sanırım, 2.2.,2.4 sürümleri için koşullu derlemeleri var. İlginç yerlerde var, örnekle satır 2069 da
static void handle_xmlrpc_response (RBLastfmSource *source, const char *body, RhythmDBEntry *entry)
{
/* nothing */
}
tanımlanmış. Ne oluyoruz? ( mantıklı birşey, koşullu derlemeler var.)
Beni kızdıran satır, birkaç satır altta kalmış
soup_xmlrpc_parse_method_response (body, strlen (body), &v, &error);
işte bu. Ah buldum seni. Burada boş olan dizinin boyutunu almaya çalışıyor. Bende dizi boş olursa 0 a dön diye bir koşul ekledim. Sorun kalmadı.
soup_xmlrpc_parse_method_response (body, (body == NULL) ? 0 : strlen (body), &v, &error);
Bu kadar basit işte. Daha zorlarını bulmıştum. Açıkçası bu işin bu kadar kolay olacağını sanmıyordum. Şimdi last.fm zevkini çıkartıyorum. Kendi yamam ile daha bir zevkli oluyor.
Hmm, bu arada blogum bakımsız kalmış, temasıda eksimiş. Birşeyler yapmak gerek. Hadi yatayım saat 3:15 olmuş.