summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2020-11-23 22:06:38 +0100
committerErich Eckner <git@eckner.net>2020-11-23 22:06:38 +0100
commit6c40d9f0474b244b10f1202c36a0246af29f5260 (patch)
tree0de244be39e88b5b00500a41f31767735fa57ce0
parent20e83bf6a4f655f8f6323aadfc86201ea3bd6acc (diff)
downloadusb-stick-tester-6c40d9f0474b244b10f1202c36a0246af29f5260.tar.xz
usb_stick_tester.pas: geht jetzt
-rw-r--r--usb_stick_tester.pas66
1 files changed, 66 insertions, 0 deletions
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.