summaryrefslogtreecommitdiff
path: root/UCore.pas
diff options
context:
space:
mode:
authorTomas Bzatek <tbzatek@users.sourceforge.net>2009-12-13 14:32:58 +0100
committerTomas Bzatek <tbzatek@users.sourceforge.net>2009-12-13 14:32:58 +0100
commit0f7616a007edaa1d19c4672a4fd390c072b1eba6 (patch)
treea1524927d8986bb54345c47ded84bb3c2a9559c2 /UCore.pas
parentae0047b8a5fa76ea76c66d8c5c580eba39178755 (diff)
downloadtuxcmd-0.6.74.tar.xz
Error system transformation to GErrorv0.6.74
Note that most coreworkers are broken at the moment.
Diffstat (limited to 'UCore.pas')
-rw-r--r--UCore.pas119
1 files changed, 71 insertions, 48 deletions
diff --git a/UCore.pas b/UCore.pas
index 81f6c4d..087999a 100644
--- a/UCore.pas
+++ b/UCore.pas
@@ -46,7 +46,7 @@ procedure GetDirSize(AListView: TGTKListView; Engine: TPanelEngine; DataList: TL
procedure FillDefaultFstabMounterItems;
function CRCGetInfo(FileName: string; Engine: TPanelEngine; var TargetName: string; var TargetCRC: LongWord; var Size: Int64): boolean;
-function WriteCRCFile(Engine: TPanelEngine; TargetFile, SplitFileName: string; const FileSize: Int64; const FileCRC: Longword): boolean;
+function WriteCRCFile(Sender: TObject; Engine: TPanelEngine; TargetFile, SplitFileName: string; const FileSize: Int64; const FileCRC: Longword): boolean;
function ComputeBlockSize(TotalSize: Int64): longint;
@@ -110,7 +110,7 @@ var LeftLocalEngine, RightLocalEngine: TPanelEngine;
implementation
(********************************************************************************************************************************)
uses SysUtils, DateUtils, StrUtils, UConfig, UDirDelete, UOverwrite, ULocale,
- UNewDir, UFileAssoc, USymlink, UCoreClasses, URemoteWait, UMain, UGnome;
+ UNewDir, UFileAssoc, USymlink, UCoreClasses, URemoteWait, UMain, UGnome, UError;
@@ -416,9 +416,11 @@ var DirStage1List, FilesList, DirStage2List: TList;
Item: PDataItem;
ItemSL: PDataItemSL;
ParentDir: string;
+ Error: PGError;
begin
LocalList := TList.Create;
- if Engine.GetListing(LocalList, LocalPath, True, False, True) = 0 then begin
+ Error := nil;
+ if Engine.GetListing(LocalList, LocalPath, True, False, True, @Error) then begin
if not SortForStream then FillDirFiles_sort(LocalList);
for i := 0 to LocalList.Count - 1 do begin
Item := LocalList[i];
@@ -436,8 +438,14 @@ var DirStage1List, FilesList, DirStage2List: TList;
if Item^.IsDir then begin
// Recurse to parent
ParentDir := IncludeTrailingPathDelimiter(string(Item^.FName));
- if Engine.ChangeDir(ParentDir) = 0 then
- FillDirFiles_Recurse(ParentDir, ALevel + 1);
+ Error := nil;
+ if Engine.ChangeDir(ParentDir, @Error) then
+ FillDirFiles_Recurse(ParentDir, ALevel + 1)
+ else begin
+ // * TODO: report and handle errors? we should make sure that user knows some of his data won't be copied
+ DebugMsg(['*** FillDirFiles_Recurse: error changing dir to ''', LocalPath, ''': ', Error^.message]);
+ g_error_free(Error);
+ end;
// Add end stage
ItemSL := DuplicateDataItem(ItemSL);
ItemSL^.Stage1 := False;
@@ -446,6 +454,9 @@ var DirStage1List, FilesList, DirStage2List: TList;
end;
end;
end else begin
+ // * TODO: report and handle errors? we should make sure that user knows some of his data won't be copied
+ DebugMsg(['*** FillDirFiles_Recurse: error getting listing of ''', LocalPath, ''': ', Error^.message]);
+ g_error_free(Error);
// Clear remaining items (in case of error)
for i := 0 to LocalList.Count - 1 do
FreeDataItem(PDataItem(LocalList[i]));
@@ -511,7 +522,8 @@ var ItemSL: PDataItemSL;
begin
ItemSL := malloc(sizeof(TDataItemSL));
memset(ItemSL, 0, sizeof(TDataItemSL));
- ItemSL^.DataItem := Engine.GetFileInfo(APath, False, True);
+ // * TODO: report errors? same way as for FillDirFiles
+ ItemSL^.DataItem := Engine.GetFileInfo(APath, False, True, nil);
ItemSL^.Stage1 := True;
ItemSL^.Level := 1;
Result := ItemSL;
@@ -584,21 +596,13 @@ end;
(********************************************************************************************************************************)
(********************************************************************************************************************************)
function MakeDirectory(ListView: TGTKListView; Engine: TPanelEngine; LeftPanel: boolean; NewDir: string): boolean;
-var Error: integer;
+var Error: PGError;
begin
- Result := False;
- try
- Error := Engine.MakeDir(IncludeTrailingPathDelimiter(Engine.Path) + NewDir);
- if Error <> 0 then begin
- Application.MessageBox(Format(LANGErrorCreatingNewDirectorySInSPanel, [StrToUTF8(NewDir), LANGPanelStrings[LeftPanel], GetErrorString(Error)]), [mbOK], mbError, mbNone, mbOK);
- Exit;
- end;
- Result := True;
- except
- on E: Exception do begin
- Application.MessageBox(Format(LANGErrorCreatingNewDirectorySInSPanelNoPath, [LANGPanelStrings[LeftPanel], E.Message]), [mbOK], mbError, mbNone, mbOK);
- Exit;
- end;
+ Error := nil;
+ Result := Engine.MakeDir(IncludeTrailingPathDelimiter(Engine.Path) + NewDir, @Error);
+ if not Result then begin
+ ShowError(FMain, Format('Error creating new directory ''%s'' in %s panel', [StrToUTF8(NewDir), LANGPanelStrings[LeftPanel]]), Error);
+ g_error_free(Error);
end;
end;
@@ -607,10 +611,11 @@ function CreateSymlink(const FileName, PossibleNewName: string; Engine: TPanelEn
var AFSymLink: TFSymlink;
function HandleCreateSymlink(const OldName, NewName: string): boolean;
- var Res, Response: integer;
+ var Response: integer;
+ Error: PGError;
begin
- Res := Engine.MakeSymLink(NewName, OldName);
- Result := Res = 0;
+ Error := nil;
+ Result := Engine.MakeSymLink(NewName, OldName, @Error);
if not Result then begin
try
FDirDelete := TFDirDelete.Create(AFSymlink);
@@ -618,9 +623,10 @@ var AFSymLink: TFSymlink;
FDirDelete.AddButtons(2);
FDirDelete.Label1.Caption := LANGTheSymbolicLink;
FDirDelete.Label2.Caption := NewName;
- FDirDelete.Label3.Caption := Format(LANGCouldNotBeCreatedS, [GetErrorString(Res)]);
+ FDirDelete.Label3.Caption := Format(LANGCouldNotBeCreatedS, [Error^.message]);
FDirDelete.Label3.Visible := True;
Response := Integer(FDirDelete.Run);
+ g_error_free(Error);
finally
FDirDelete.Free;
end;
@@ -657,10 +663,11 @@ var Data: PDataItem;
AFSymLink: TFSymlink;
function HandleEditSymlink(const ExistingName, PointTo: string): boolean;
- var Res, Response: integer;
+ var Response: integer;
+ Error: PGError;
begin
- Res := Engine.Remove(ExistingName);
- Result := Res = 0;
+ Error := nil;
+ Result := Engine.Remove(ExistingName, @Error);
if not Result then begin
try
FDirDelete := TFDirDelete.Create(AFSymlink);
@@ -668,9 +675,10 @@ var Data: PDataItem;
FDirDelete.AddButtons(2);
FDirDelete.Label1.Caption := LANGTheSymbolicLink;
FDirDelete.Label2.Caption := StrToUTF8(ExistingName);
- FDirDelete.Label3.Caption := Format(LANGCouldNotBeDeletedS, [GetErrorString(Res)]);
+ FDirDelete.Label3.Caption := Format(LANGCouldNotBeDeletedS, [Error^.message]);
FDirDelete.Label3.Visible := True;
Response := Integer(FDirDelete.Run);
+ g_error_free(Error);
finally
FDirDelete.Free;
end;
@@ -679,8 +687,9 @@ var Data: PDataItem;
end;
Exit;
end;
- Res := Engine.MakeSymLink(ExistingName, PointTo);
- Result := Res = 0;
+
+ Error := nil;
+ Result := Engine.MakeSymLink(ExistingName, PointTo, @Error);
if not Result then begin
try
FDirDelete := TFDirDelete.Create(AFSymlink);
@@ -688,9 +697,10 @@ var Data: PDataItem;
FDirDelete.AddButtons(2);
FDirDelete.Label1.Caption := LANGTheSymbolicLink;
FDirDelete.Label2.Caption := StrToUTF8(ExistingName);
- FDirDelete.Label3.Caption := Format(LANGCouldNotBeCreatedS, [GetErrorString(Res)]);
+ FDirDelete.Label3.Caption := Format(LANGCouldNotBeCreatedS, [Error^.message]);
FDirDelete.Label3.Visible := True;
Response := Integer(FDirDelete.Run);
+ g_error_free(Error);
finally
FDirDelete.Free;
end;
@@ -703,7 +713,7 @@ var Data: PDataItem;
begin
Result := False;
- Data := Engine.GetFileInfo(FileName, False, True);
+ Data := Engine.GetFileInfo(FileName, False, True, nil);
if Data = nil then begin
Result := False;
Exit;
@@ -869,10 +879,11 @@ function CRCGetInfo(FileName: string; Engine: TPanelEngine; var TargetName: stri
end;
const CRCBlockSize = 32768;
-var i, Error, Count, Start: integer;
+var i, Count, Start: integer;
FD: TEngineFileDes;
Buffer: Pointer;
s: string;
+ Error: PGError;
begin
Result := False;
if Pos('.', FileName) > 1 then FileName := ChangeFileExt(FileName, '.crc')
@@ -884,15 +895,21 @@ begin
Application.MessageBox(LANGAnErrorOccuredWhileInitializingMemoryBlock, [mbOK], mbError, mbNone, mbOK);
Exit;
end;
- FD := Engine.OpenFile(FileName, omRead, Error);
- if Error <> 0 then Exit;
+ Error := nil;
+ FD := Engine.OpenFile(FileName, omRead, @Error);
+ if Error <> nil then begin
+ g_error_free(nil);
+ Exit;
+ end;
s := '';
repeat
- Count := Engine.ReadFile(FD, Buffer, CRCBlockSize, Error);
- if Error <> 0 then begin
+ Error := nil;
+ Count := Engine.ReadFile(FD, Buffer, CRCBlockSize, @Error);
+ if Error <> nil then begin
libc_free(Buffer);
- Engine.CloseFile(FD);
+ g_error_free(nil);
+ Engine.CloseFile(FD, nil);
Exit;
end;
// processing begins
@@ -911,33 +928,39 @@ begin
until Count < CRCBlockSize;
if Length(s) > 0 then ProcessLine(s);
- Engine.CloseFile(FD);
+ Engine.CloseFile(FD, nil);
libc_free(Buffer);
Result := True;
end;
(********************************************************************************************************************************)
-function WriteCRCFile(Engine: TPanelEngine; TargetFile, SplitFileName: string; const FileSize: Int64; const FileCRC: Longword): boolean;
+function WriteCRCFile(Sender: TObject; Engine: TPanelEngine; TargetFile, SplitFileName: string; const FileSize: Int64; const FileCRC: Longword): boolean;
var FD: TEngineFileDes;
- Error, Count: integer;
+ Count: integer;
s: string;
+ Error: PGError;
begin
Result := False;
if Pos('.', TargetFile) > 1 then TargetFile := ChangeFileExt(TargetFile, '.crc')
else TargetFile := TargetFile + '.crc';
- FD := Engine.OpenFile(TargetFile, omWrite, Error);
- if Error <> 0 then begin
- Application.MessageBox(Format(LANGAnErrorOccuredWhileOpeningFileSS, [TargetFile, GetErrorString(Error)]), [mbOK], mbError, mbNone, mbOK);
+ Error := nil;
+ FD := Engine.OpenFile(TargetFile, omWrite, @Error);
+ if FD = nil then begin
+ if Error <> nil then begin
+ ShowError(TCustomGTKForm(Sender), Format('An error occured while opening file ''%s''', [TargetFile]), Error);
+ g_error_free(Error);
+ end;
Exit;
end;
s := Format('filename=%s'#13#10'size=%d'#13#10'crc32=%s'#13#10, [SplitFileName, FileSize, WideUpperCase(IntToHex(FileCRC, 8))]);
- Count := Engine.WriteFile(FD, @s[1], Length(s), Error);
- if (Error <> 0) or (Count <> Length(s)) then begin
- Application.MessageBox(Format(LANGAnErrorOccuredWhileWritingFileSS, [TargetFile, GetErrorString(Error)]), [mbOK], mbError, mbNone, mbOK);
+ Count := Engine.WriteFile(FD, @s[1], Length(s), @Error);
+ if (Error <> nil) { or (Count <> Length(s)) } then begin
+ ShowError(TCustomGTKForm(Sender), Format('An error occured while writing file ''%s''', [TargetFile]), Error);
+ g_error_free(Error);
Exit;
end;
- Engine.CloseFile(FD);
+ Engine.CloseFile(FD, nil);
Result := True;
end;