Fedora je od 10. února dostupná v Sýrii. Sýrie vypadla ze seznamu embargovaných zemí a Fedora Infrastructure Team mohl odblokovat syrské IP adresy.
Ministerstvo zahraničí Spojených států amerických vyvíjí online portál Freedom.gov, který umožní nejenom uživatelům v Evropě přístup k obsahu blokovanému jejich vládami. Portál bude patrně obsahovat VPN funkci maskující uživatelský provoz tak, aby se jevil jako pocházející z USA. Projekt měl být původně představen již na letošní Mnichovské bezpečnostní konferenci, ale jeho spuštění bylo odloženo.
Byla vydána pro lidi zdarma ke stažení kniha The Book of Remind věnovaná sofistikovanému kalendáři a připomínači Remind.
Grafický editor dokumentů LyX, založený na TeXu, byl vydán ve verzi 2.5.0. Oznámení připomíná 30. výročí vzniku projektu. Novinky zahrnují mj. vylepšení referencí nebo použití barev napříč aplikací, od rozhraní editoru po výstupní dokument.
F-Droid bannerem na svých stránkách a také v aplikacích F-Droid a F-Droid Basic upozorňuje na iniciativu Keep Android Open. Od září 2026 bude Android vyžadovat, aby všechny aplikace byly registrovány ověřenými vývojáři, aby mohly být nainstalovány na certifikovaných zařízeních Android. To ohrožuje alternativní obchody s aplikacemi jako F-Droid a možnost instalace aplikací mimo oficiální obchod (sideloading).
Svobodná historická realtimová strategie 0 A.D. (Wikipedie) byla vydána ve verzi 28 (0.28.0). Její kódový název je Boiorix. Představení novinek v poznámkách k vydání. Ke stažení také na Flathubu a Snapcraftu.
Multimediální server a user space API PipeWire (Wikipedie) poskytující PulseAudio, JACK, ALSA a GStreamer rozhraní byl vydán ve verzi 1.6.0 (Bluesky). Přehled novinek na GitLabu.
UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-1.2 a 20.04 OTA-12.
Byla vydána (Mastodon, 𝕏) nová stabilní verze 2.0 otevřeného operačního systému pro chytré hodinky AsteroidOS (Wikipedie). Přehled novinek v oznámení o vydání a na YouTube.
WoWee je open-source klient pro MMORPG hru World of Warcraft, kompatibilní se základní verzí a rozšířeními The Burning Crusade a Wrath of the Lich King. Klient je napsaný v C++ a využívá vlastní OpenGL renderer, pro provoz vyžaduje modely, grafiku, hudbu, zvuky a další assety z originální kopie hry od Blizzardu. Zdrojový kód je na GitHubu, dostupný pod licencí MIT.
#define BLOCK_SIZE 1024
char block1[BLOCK_SIZE];
char block2[BLOCK_SIZE];
FILE *fr1, *fr2;
int readed;
int same_file = 0;
fr1= fopen(config_file,"rb");
fr2= fopen("temp_config_bin","rb");
while( ((readed = fread(block1, sizeof(char), BLOCK_SIZE, fr1) ) == BLOCK_SIZE) ){
if( fread(block2, sizeof(char), BLOCK_SIZE, fr2) == BLOCK_SIZE ){
if( memcmp(block1, block2, BLOCK_SIZE) != 0 ){
same_file = 1;
}
} else {
same_file = 1;
if(ferror(fr2) != 0)
printf("%s: error: can't read file temp_config_bin !\n", prog_name);
}
}
#define BUF_SIZE 1024
FILE *fr1, *fr2;
char buf1[BUF_SIZE], buf2[BUF_SIZE];
size_t rs1, rs2;
int same_files = 1;
fr1 = fopen...
fr2 = fopen...
while(!(feof(fr1) || feof(fr2))) {
rs1 = fread(buf1, sizeof(char), BUF_SIZE, fr1);
rs2 = fread(buf2, sizeof(char), BUF_SIZE, fr2);
if(rs1 != rs2 || memcmp(buf1, buf2, BUF_SIZE) != 0) {
same_files = 0;
break;
}
}
memcmp měl použít rs1 (nebo rs2), jinak budete u posledního bloku (není-li délka souboru násobkem BUF_SIZE) porovnávat i části bufferů, do kterých se nic nenačetlo. Pokud bude poslední blok zároveň prvním (délka souborů stejná a menší než BUF_SIZE), může se stát, že váš program označí stejné soubory za různé.
P.S. sizeof(char) je vždy 1, je to definováno normou; a z hlediska efektivity bude vhodnější fread(buf1, BUF_SIZE, 1, fr1) než fread(buf1, 1, BUF_SIZE, fr1)
info '(libc)Stream Buffering'
stat() na tie dve subory, zistit ich velkosti a porovnat ich. A taktiez by si mohol z struct stat vytiahnut velkost bloku suboru na danom fs a tym (mozno aj rapidne) urychlit citanie.
#import <sys/stat.h>
struct stat sb1, sb2;
size_t buf_size;
stat(filename1, &sb1);
stat(filename2, &bs2);
if(sb1.st_size == sb2.st_size) {
buf_size = sb1.st_blksize;
// dynamicky alokovat buf a buf2, napr. cez alloca()
// zvysok codu (fopen, while, fclose)
} else {
same_files = 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
FILE *fr1, *fr2;
char *buf1, *buf2;
size_t rs1, rs2;
int same_files = 1;
struct stat sb1, sb2;
size_t buf_size;
stat("file1.txt", &sb1);
stat("file2.txt", &sb2);
if(sb1.st_size == sb2.st_size) {
buf_size = sb1.st_size;
buf1= alloca(buf_size);
buf2= alloca(buf_size);
fr1 = fopen("file1.txt","rb");
fr2 = fopen("file2.txt","rb");
while(!(feof(fr1) || feof(fr2))) {
rs1 = fread(buf1, sizeof(char), buf_size, fr1);
rs2 = fread(buf2, sizeof(char), buf_size, fr2);
if(rs1 != rs2 || memcmp(buf1, buf2, buf_size) != 0) {
same_files = 0;
break;
}
}
fclose(fr1);
fclose(fr2);
} else {
same_files= 0;
printf("Size is not the same.\n");
system("PAUSE");
exit(0);
}
same_files?printf("The file is not different\n"):printf("The file is different\n");
system("PAUSE");
return 0;
}
Tiskni
Sdílej: