From 6c40d9f0474b244b10f1202c36a0246af29f5260 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Mon, 23 Nov 2020 22:06:38 +0100 Subject: usb_stick_tester.pas: geht jetzt --- usb_stick_tester.pas | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/usb_stick_tester.pas b/usb_stick_tester.pas index 0554a7c..f9ddd46 100644 --- a/usb_stick_tester.pas +++ b/usb_stick_tester.pas @@ -1,4 +1,70 @@ program usb_stick_tester; +{$mode objfpc}{$H+} + +uses + sysUtils; //,systemunit; + +var + f: file; + i,j,k,block_len: int64; + a: array[0..1023] of int64; + fehler: boolean; + begin + + if paramcount<>1 then begin + writeln('usage: usb_stick_tester /dev/sdX'); + halt(1); + end; + + assignFile(f,paramstr(1)); + try + reset(f,1); + except + writeln('error: could not open "' + paramstr(1) + '"'); + halt(1); + end; + + block_len:=length(a) * sizeof(a[0]); + + j:=0; + while true do begin + + for i:=0 to length(a)-1 do + a[i]:=j * block_len + i; + + seek(f,j * block_len); + try + blockwrite(f,a[0],block_len); + except + writeln('write failed at position ' + intToStr(j*block_len) + ' .. ' + intToStr((j+1)*block_len-1)); + break; + end; + + if j>1 then begin + k:=random(j); + seek(f,k * block_len); + blockread(f,a[0],block_len); + fehler:=false; + for i:=0 to length(a)-1 do + if a[i] <> k * block_len + i then begin + if (a[i]-i) mod block_len = 0 then + writeln('Block ' + intToHex((a[i]-i) div block_len,2*sizeof(a[0])) + ' an Stelle ' + intToHex(k,2*sizeof(a[0]))) + else + writeln('Byte ' + intToHex(a[i],2*sizeof(a[0])) + ' an Stelle ' + intToHex(k * block_len + i,2*sizeof(a[0]))); + fehler:=true; + break; + end; + if fehler then + break; + end; + + inc(j); + if j mod 1024 = 0 then + write('.'); + end; + + closeFile(f); + end. -- cgit v1.2.3-54-g00ecf