A fost nevoie de câteva săpături pentru a ne da seama. În dosar src/compare.c
în Git repo pentru tar, găsim o funcție numită verifica_volum
(la linia 527 la momentul redactării), care conține următorul comentariu
Verificarea unei arhive este menită să verifice dacă suportul fizic a primit-o corect, așa că încercați să învingeți tamponarea inteligentă în memorie aferentă acestui mediu particular. Pe Linux, de exemplu, unitatea de dischetă nu ar fi accesată nici măcar pentru întreaga verificare.
Asta explică ce încearcă să facă, dar în ceea ce privește Cum o face, trebuie să ne uităm la codul funcției. Începe prin a compara antetele pentru a vă asigura că se potrivesc, iar dacă o fac, rulează funcția arhiva_dif
(linia 461 la momentul scrierii), care merge articol cu articol în interiorul arhivei, iar când întâlnește un fișier*, va rula funcția fişier_dif
(linia 187). Începe prin a verifica câteva lucruri simple, cum ar fi tipul și dimensiunea fișierului (și altele). Dacă toate acestea sunt corecte, acesta (pentru un fișier normal) merge și verifică fiecare bloc al fișierului (în citeste_si_proceseaza
funcție, linia 120). Pentru fișiere rare, se numește fișier_dif_rar
(linia 698) în src/sparse.c
, care verifică fiecare regiune a fișierului** folosind check_sparse_region
funcția (linia 607), tot în src/sparse.c
.
*Efectuează alte lucruri pentru alte tipuri de date arhivate, cum ar fi directoare
**Verifică fiecare regiune într-un mod similar în care verifică un întreg fișier normal (non-rarit).