Byla vydána (Mastodon, 𝕏) první RC verze GIMPu 3.2. Přehled novinek v oznámení o vydání. Podrobně v souboru NEWS na GitLabu.
Eugen Rochko, zakladatel Mastodonu, tj. sociální sítě, která není na prodej, oznámil, že po téměř 10 letech odstupuje z pozice CEO a převádí vlastnictví ochranné známky a dalších aktiv na neziskovou organizaci Mastodon.
Byla vydána nová major verze 5.0 svobodného 3D softwaru Blender. Přehled novinek i s náhledy a videi v obsáhlých poznámkách k vydání. Videopředstavení na YouTube.
Cloudflare, tj. společnost poskytující "cloudové služby, které zajišťují bezpečnost, výkon a spolehlivost internetových aplikací", má výpadek.
Letos se uskuteční již 11. ročník soutěže v programování Kasiopea. Tato soutěž, (primárně) pro středoškoláky, nabízí skvělou příležitost procvičit logické myšlení a dozvědět se něco nového ze světa algoritmů – a to nejen pro zkušené programátory, ale i pro úplné začátečníky. Domácí kolo proběhne online od 22. 11. do 7. 12. 2025 a skládá se z 9 zajímavých úloh různé obtížnosti. Na výběru programovacího jazyka přitom nezáleží – úlohy jsou
… více »Byla vydána nová verze 2.52.0 distribuovaného systému správy verzí Git. Přispělo 94 vývojářů, z toho 33 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
VKD3D-Proton byl vydán ve verzi 3.0. Jedná se fork knihovny vkd3d z projektu Wine pro Proton. Knihovna slouží pro překlad volání Direct3D 12 na Vulkan. V přehledu novinek je vypíchnuta podpora AMD FSR 4 (AMD FidelityFX Super Resolution 4).
Poštovní klient Thunderbird byl vydán v nové verzi 145.0. Podporuje DNS přes HTTPS nebo Microsoft Exchange skrze Exchange Web Services. Ukončena byla podpora 32bitového Thunderbirdu pro Linux.
U příležitosti státního svátku 17. listopadu probíhá na Steamu i GOG.com již šestý ročník Czech & Slovak Games Week aneb týdenní oslava a také slevová akce českých a slovenských počítačových her.
Byla vydána nová verze 9.19 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnout lze například nový balíček BirdNET-Go, tj. AI řešení pro nepřetržité monitorování a identifikaci ptáků.
return ret ? ret : len; ukazuje na nepříliš promyšlenou strukturu kódu, protože zbytečně porovnávám ret na konci funkce, když už někde dříve muselo být jasné a musel jsem otestovat, že není nulové (a tedy jsem měl funkci ukončit už tam), protože jinak by len bylo inicializováno.
-pedantic) musíš mít deklarace proměnných na začátku scope. Ale nevim, podle jakýho standardu se kompiluje jádro.
No a jednak si umím představit i takovej kód, kde by to opravdu muselo být rozlišeno až na konci. Asi by to chtělo vidět ten konkrétní kód...
Jednak mám dojem, že dle C89 (s -pedantic) musíš mít deklarace proměnných na začátku scope. Ale nevim, podle jakýho standardu se kompiluje jádro.
To by nevadilo, to varování vyvolá až použití.
No a jednak si umím představit i takovej kód, kde by to opravdu muselo být rozlišeno až na konci. Asi by to chtělo vidět ten konkrétní kód...Já si ho samozřejmě taky umí představit, to ale neznamená, že je strukturálně správně.
static int uhid_hid_get_raw(struct hid_device *hid, unsigned char rnum,
__u8 *buf, size_t count, unsigned char rtype)
{
struct uhid_device *uhid = hid->driver_data;
__u8 report_type;
struct uhid_event *ev;
unsigned long flags;
int ret;
size_t uninitialized_var(len);
struct uhid_feature_answer_req *req;
if (!uhid->running)
return -EIO;
switch (rtype) {
case HID_FEATURE_REPORT:
report_type = UHID_FEATURE_REPORT;
break;
case HID_OUTPUT_REPORT:
report_type = UHID_OUTPUT_REPORT;
break;
case HID_INPUT_REPORT:
report_type = UHID_INPUT_REPORT;
break;
default:
return -EINVAL;
}
ret = mutex_lock_interruptible(&uhid->report_lock);
if (ret)
return ret;
ev = kzalloc(sizeof(*ev), GFP_KERNEL);
if (!ev) {
ret = -ENOMEM;
goto unlock;
}
spin_lock_irqsave(&uhid->qlock, flags);
ev->type = UHID_FEATURE;
ev->u.feature.id = atomic_inc_return(&uhid->report_id);
ev->u.feature.rnum = rnum;
ev->u.feature.rtype = report_type;
atomic_set(&uhid->report_done, 0);
uhid_queue(uhid, ev);
spin_unlock_irqrestore(&uhid->qlock, flags);
ret = wait_event_interruptible_timeout(uhid->report_wait,
atomic_read(&uhid->report_done), 5 * HZ);
/*
* Make sure "uhid->running" is cleared on shutdown before
* "uhid->report_done" is set.
*/
smp_rmb();
if (!ret || !uhid->running) {
ret = -EIO;
} else if (ret < 0) {
ret = -ERESTARTSYS;
} else {
spin_lock_irqsave(&uhid->qlock, flags);
req = &uhid->report_buf.u.feature_answer;
if (req->err) {
ret = -EIO;
} else {
ret = 0;
len = min(count,
min_t(size_t, req->size, UHID_DATA_MAX));
memcpy(buf, req->data, len);
}
spin_unlock_irqrestore(&uhid->qlock, flags);
}
atomic_set(&uhid->report_done, 1);
unlock:
mutex_unlock(&uhid->report_lock);
return ret ? ret : len;
}
Stačilo by přiřadit len do ret v té else větvi.
ret i celá ta funkce je int, kdežto len je size_t.
Principielne resitelny to samozrejme je a s problemem zastaveni to nema nic spolecnyho.
Důkaz máte? :)
Respektive, dalo by se přidat zvláštní flag "je-není inicializován". Bohužel myslím, že tohle tam dát, tak Linus vezme nunčaky a půjde po krvi toho, kdo ten patch do GCC poslal.
Ukazatele by samozřejmě šlo inicializovat na NULL, a osobně bych byl pro, ale spousta lidí by (právem) začala nadávat, že to je v drtivé většině případů zcela zbytečná instrukce a přístup do paměti.
Ale co dělat u integerů?To by se asi muselo implementovat na procesoru, kdy libovolná aritmetická operace s nějakým specifickým číslem (nebo číslem s flagem) by způsobila vyhození z běžného běhu.
Ukazatele by samozřejmě šlo inicializovat na NULL, a osobně bych byl pro, ale spousta lidí by (právem) začala nadávat, že to je v drtivé většině případů zcela zbytečná instrukce a přístup do paměti.Tak třeba #ifdef DEBUG. Furt lepší kfree(NULL) než kfree(rand()).
Pokud někdo potřebuje něco takového, tak nepoužije C, ale Adu.Takže už jen stačí přepsat jádro z Céčka do Ady…
jako ke třeba přetečení znaménkového integeruV tom problém nevidím. Když přeteče, tak se začne počítat znova od spodní hranice rozsahu, ne?
Dle normy je to nedefinovaná operace a tudíž se může stát cokoliv. Například v kódu:jako ke třeba přetečení znaménkového integeruV tom problém nevidím. Když přeteče, tak se začne počítat znova od spodní hranice rozsahu, ne?
int a, b;
...
if(a > 0 && b > 0)
{
int c = a + b;
if(c < 0)
{
printf("Overflow");
}
}
může překladač usoudit, že při sčítání dvou kladných čísel nemůže nastat "legální" situace, kdy výsledek součtu bude záporný a Overflow se nikdy nevypíše.
if(c < 0)
{
printf("Overflow");
}
mi moc validní nepřijde. Není k detekci přetečení určen overflow flag v SR?
Tiskni
Sdílej: