Byla vydána (𝕏) nová verze 24.7 open source firewallové a routovací platformy OPNsense (Wikipedie). Jedná se o fork pfSense postavený na FreeBSD. Kódový název OPNsense 24.7 je Thriving Tiger. Přehled novinek v příspěvku na fóru.
Binarly REsearch upozorňuje na bezpečnostní problém PKFail (YouTube) v ekosystému UEFI. Stovky modelů zařízení používají pro Secure Boot testovací Platform Key vygenerovaný American Megatrends International (AMI) a jeho privátní část byla při úniku dat prozrazena. Do milionů zařízení (seznam v pdf) po celém světě tak útočníci mohou do Secure Bootu vložit podepsaný malware. Otestovat firmware si lze na stránce pk.fail. Ukázka PoC na Linuxu na Windows na YouTube.
Mobilní operační systém /e/OS (Wikipedie) založený na Androidu / LineageOS, ale bez aplikací a služeb od Googlu, byl vydán ve verzi 2.2 (Mastodon, 𝕏). Přehled novinek na GitLabu. Vypíchnuta je rodičovská kontrola.
Společnost OpenAI představila vyhledávač SearchGPT propojující OpenAI modely umělé inteligence a informace z webů v reálném čase. Zatím jako prototyp pro vybrané uživatele. Zapsat se lze do pořadníku čekatelů.
Distribuce Linux Mint 22 „Wilma“ byla vydána. Je založená na Ubuntu 24.04 LTS, ale s desktopovým prostředím Cinnamon (aktuálně verze 6.2), příp. MATE nebo Xfce, balíkem aplikací XApp, integrací balíčků Flatpak a dalšími změnami. Více v přehledu novinek a poznámkách k vydání.
Příspěvek na blogu Truffle Security: Kdokoli může přistupovat ke smazaným a privátním repozitářům na GitHubu.
Byla vydána nová verze 14 integrovaného vývojového prostředí (IDE) Qt Creator. Podrobný přehled novinek v cgitu. Vypíchnout lze podporu rozšíření v Lua.
Byla vydána verze 1.80.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Apple oznámil, že v beta verzi spustil své Apple Maps na webu. Podporován je také webový prohlížeč Chrome. Ne však na Linuxu.
Portál Stack Overflow po roce opět vyzpovídal své uživatele, jedná se především o vývojáře softwaru, a zveřejnil detailní výsledky průzkumu. Průzkumu se letos zúčastnilo více než 65 tisíc vývojářů. Z Česka jich bylo 710. Ze Slovenska 246.
#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: