Dle plánu byl vývoj Firefoxu přesunut z Mercurialu na Git. Oficiální repozitář se zdrojovými kódy je na GitHubu.
V terminálovém multiplexoru GNU Screen byly nalezeny a v upstreamu ve verzi 5.0.1 už opraveny bezpečnostních chyby CVE-2025-23395, CVE-2025-46802, CVE-2025-46803, CVE-2025-46804 a CVE-2025-46805. Podrobnosti na blogu SUSE Security Teamu.
Training Solo (Paper, GitHub) je nejnovější bezpečnostní problém procesorů Intel s eIBRS a některých procesorů ARM. Intel vydal opravnou verzi 20250512 mikrokódů pro své procesory.
Byla vydána nová verze 25.05.11 svobodného multiplatformního video editoru Shotcut (Wikipedie) postaveného nad multimediálním frameworkem MLT. Nejnovější Shotcut je již vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.
Svobodný elektronický platební systém GNU Taler (Wikipedie, cgit) byl vydán ve verzi 1.0. GNU Taler chrání soukromí plátců a zároveň zajišťuje, aby byl příjem viditelný pro úřady. S vydáním verze 1.0 byl systém spuštěn ve Švýcarsku.
Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 209. brněnský sraz, který proběhne tento pátek 16. května od 18:00 ve studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Jelikož se Brno stalo jedním z hlavních míst, kde se vyvíjí open source knihovna OpenSSL, tentokrát se OpenAlt komunita potká s komunitou OpenSSL. V rámci srazu Anton Arapov z OpenSSL
… více »GNOME Foundation má nového výkonného ředitele. Po deseti měsících skončil dočasný výkonný ředitel Richard Littauer. Vedení nadace převzal Steven Deobald.
Byl publikován přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie) za uplynulé dva měsíce. Servo zvládne už i Gmail. Zakázány jsou příspěvky generované pomocí AI.
Raspberry Pi Connect, tj. oficiální služba Raspberry Pi pro vzdálený přístup k jednodeskovým počítačům Raspberry Pi z webového prohlížeče, byla vydána v nové verzi 2.5. Nejedná se už o beta verzi.
Google zveřejnil seznam 1272 projektů (vývojářů) od 185 organizací přijatých do letošního, již jednadvacátého, Google Summer of Code. Plánovaným vylepšením v grafických a multimediálních aplikacích se věnuje článek na Libre Arts.
Nuže, zkus třeba takovýto snipplet:
#include<stdio.h> int main( int argc, char **argv, char **env ) { for ( ; *env; ++env ) puts( *env ); }
Nebo třeba takhle, což je (?) totéž... (Kdyžtak to tu někdo upřesní...)
#include<stdio.h> extern char **environ; int main( void ) { for ( ; *environ; ++environ ) puts( *environ ); }
To byly jen houpé příklady pro přehled. Pro lepší manipulaci je dobré udělat #include<stdlib.h>
a využít jednu z následujících funkcí.
int putenv(char *string);
(man 3 putenv
) přijímá string tvaru NÁZEV=HODNOTA a nastaví ho. String nekopíruje, pouze přidá pointer. Musí jít o trvale existuící string, nikoliv jen o dočasné pole na zásobníku. Existující proměnné přepíše.
int setenv(const char *name, const char *value, int overwrite);
(man 3 setenv
) dělá totéž, jen vybranějším způsobem. Parametr overwrite určuje, zda má v případě konfliktu názvů původní proměnnou přepsat. Tím se liší od předchozí funkce, která přepisuje vždy. Další rozdíl je, že string okopíruje. Není tedy nutné, aby za běhu existoval trvale. V případě, že je příliš dlouhý, vrátí hodnotu -1.
int unsetenv(const char *name);
(man 3 unsetenv
) Tady je to jasné. Příčina případné chyby bude v ERRNO.
char *getenv(const char *name);
(man 3 getenv
) Vyhledá název. Vrátí buď pointer na hodnotu nebo NULL, podle toho, zda taková proměnná existuje.
Změna je lokální v současném procesu. Nepřenáší se zpět do jeho otce.
Změněné proměnné se předávají nově vzniklým synovským procesům.
Změna se nepřenáší do již běžících synovských procesů.
Takhle bys to mohl třeba použít, stačí přidat jen ošetření případných chybových stavů.
#include<stdio.h> #include<stdio.h> static const char *const NOTSET = "VARIABLE NOT SET"; static const char *const USER = "USER"; static void output( char *const value ) { puts( value == NULL ? NOTSET : value ); } int main( void ) { output( getenv( USER ) ); /* skutečný uživatel */ putenv( "USER=vincenc" ); output( getenv( USER ) ); /* 'vincenc' - přepsáno */ setenv( USER, "hugo", 0 ); output( getenv( USER ) ); /* 'vincenc' - nepřepsáno */ setenv( USER, "hugo", 1 ); output( getenv( USER ) ); /* 'hugo' - přepsáno */ unsetenv( USER ); output( getenv( USER ) ); /* 'VARIABLE NOT SET' - smazáno */ }
Uf, to je vše. Ale příště zkus radši napřed Google, protože tohle není příliš složitá otázka...
K tomu poslednímu snippletu: mám tam omylem dvakrát stejný include. Jak jsem zjistil, stdlib.h v tomto případě není nutné includovat - stačí stdio.h.
Tiskni
Sdílej: