← Bilinen Hatalar

libbb.h: bb_popcnt_long İçinde "unsigned_long" Diye Bir Tip Yok

BusyBox Yazım Hatası 1 commit etkilendi 2024-05-31

Ne Oldu ve Neden

Denys Vlasenko, CPU mask'lerindeki set bit sayısını saymak için bb_popcnt_32()/bb_popcnt_long() adında yeni bir yardımcı fonksiyon çifti ekledi. 32-bit sürüm sorunsuzdu, ama unsigned long'un 32 bitten büyük olduğu (yani ULONG_MAX > 0xffffffff) 64-bit sistemler için yazılan bildirimde bir yazım hatası vardı:

unsigned FAST_FUNC bb_popcnt_long(unsigned_long m);

unsigned long iki kelime olması gerekirken araya alt çizgi girmiş: unsigned_long. C'de böyle bir tip yok — GCC bunu "bilinmeyen tip adı" olarak reddediyor ve en yakın tanıdık ismi (unsigned int) öneriyor. Bu satır sadece #if ULONG_MAX > 0xffffffff bloğunun içinde olduğu için hata sadece 64-bit derleme hedeflerinde ortaya çıkıyordu — bizim build ortamımız tam olarak bu kategoriye giriyor.

Denys Vlasenko
Hatayı açan commit: Denys Vlasenko
@vda-linux · 2024-05-31
2075553a1 — libbb: add bit counting function, use where appropriate

Nasıl Düzeltildi

Aynı gün, yaklaşık 11.5 saat sonra ("libbb: fix 64-bit bb_popcnt_long" commit'inde) Denys tek kelimelik düzeltmeyi yaptı: unsigned_long → unsigned long. Tek satırlık, tek karakterlik (alt çizgiyi boşlukla değiştirme) bir yazım hatası düzeltmesiydi.

Denys Vlasenko
Düzelten commit: Denys Vlasenko
@vda-linux · 2024-05-31
41b47398f — libbb: fix 64-bit bb_popcnt_long

Düzeltmenin Diff'i

Aşağıda düzeltme commit'inin gerçek diff'i var — dosya dosya gezinebilirsin.

include/libbb.h+1 -1
@@ -399,7 +399,7 @@ uint64_t bb_bswap_64(uint64_t x) FAST_FUNC;
unsigned FAST_FUNC bb_popcnt_32(uint32_t m);
#if ULONG_MAX > 0xffffffff
-unsigned FAST_FUNC bb_popcnt_long(unsigned_long m);
+unsigned FAST_FUNC bb_popcnt_long(unsigned long m);
#else
#define bb_popcnt_long(m) bb_popcnt_32(m)
#endif

Etkilenen Commit'lerden Örnekler