FIX: Bug [0001795] DC should not hang on pipes

This commit is contained in:
Alexander Koblov 2021-01-05 11:16:24 +00:00
commit f74fdbc7cd
2 changed files with 30 additions and 1 deletions

View file

@ -71,6 +71,9 @@ type
FReserveSpace,
FCheckFreeSpace: Boolean;
FSkipAllBigFiles: Boolean;
{$IF DEFINED(UNIX)}
FSkipAllSpecialFiles: Boolean;
{$ENDIF}
FSkipOpenForReadingError: Boolean;
FSkipOpenForWritingError: Boolean;
FSkipReadError: Boolean;
@ -156,7 +159,11 @@ implementation
uses
uDebug, uOSUtils, DCStrUtils, FileUtil, uFindEx, DCClassesUtf8, uFileProcs, uLng,
DCBasicTypes, uFileSource, uFileSystemFileSource, uFileProperty, uAdministrator,
StrUtils, DCDateTimeUtils, uShowMsg, Forms, LazUTF8, uHash;
StrUtils, DCDateTimeUtils, uShowMsg, Forms, LazUTF8, uHash
{$IFDEF UNIX}
, BaseUnix
{$ENDIF}
;
const
HASH_TYPE = HASH_BEST;
@ -1140,6 +1147,27 @@ begin
else begin
Result:= False;
{$IF DEFINED(UNIX)}
if not fpS_ISREG(aNode.TheFile.Attributes) then
begin
if FSkipAllSpecialFiles then Exit(False);
case AskQuestion('', Format(rsMsgCannotCopySpecialFile, [LineEnding + aNode.TheFile.FullPath]),
[fsourSkip, fsourSkipAll, fsourAbort],
fsourSkip, fsourAbort) of
fsourSkip:
Exit(False);
fsourSkipAll:
begin
FSkipAllSpecialFiles:= True;
Exit(False);
end
else
AbortOperation;
end;
end;
{$ENDIF}
if (aNode.TheFile.Size > GetDiskMaxFileSize(ExtractFileDir(AbsoluteTargetFileName))) then
case AskQuestion('', Format(rsMsgFileSizeTooBig, [aNode.TheFile.Name]),
[fsourSkip, fsourAbort],

View file

@ -31,6 +31,7 @@ resourcestring
rsMsgNotDelete = 'Can not delete file %s';
rsMsgCannotDeleteDirectory = 'Cannot delete directory %s';
rsMsgCannotOverwriteDirectory = 'Cannot overwrite directory "%s" with non-directory "%s"';
rsMsgCannotCopySpecialFile = 'Cannot copy special file %s';
rsMsgErrDirExists = 'Directory %s exists!';
rsMsgErrRename = 'Cannot rename file %s to %s';
rsMsgErrCannotCopyFile = 'Cannot copy file %s to %s';