diff options
-rw-r--r-- | rtl/amiga/sysutils.pp | 36 | ||||
-rw-r--r-- | rtl/embedded/sysutils.pp | 12 | ||||
-rw-r--r-- | rtl/emx/sysutils.pp | 105 | ||||
-rw-r--r-- | rtl/gba/sysutils.pp | 12 | ||||
-rw-r--r-- | rtl/go32v2/sysutils.pp | 37 | ||||
-rw-r--r-- | rtl/macos/sysutils.pp | 12 | ||||
-rw-r--r-- | rtl/morphos/sysutils.pp | 49 | ||||
-rw-r--r-- | rtl/msdos/sysutils.pp | 14 | ||||
-rw-r--r-- | rtl/nativent/sysutils.pp | 26 | ||||
-rw-r--r-- | rtl/nds/sysutils.pp | 35 | ||||
-rw-r--r-- | rtl/netware/sysutils.pp | 43 | ||||
-rw-r--r-- | rtl/netwlibc/sysutils.pp | 44 | ||||
-rw-r--r-- | rtl/objpas/sysutils/filutil.inc | 271 | ||||
-rw-r--r-- | rtl/objpas/sysutils/filutilh.inc | 34 | ||||
-rw-r--r-- | rtl/objpas/sysutils/sysutils.inc | 93 | ||||
-rw-r--r-- | rtl/os2/sysutils.pp | 37 | ||||
-rw-r--r-- | rtl/unix/sysutils.pp | 91 | ||||
-rw-r--r-- | rtl/watcom/sysutils.pp | 33 | ||||
-rw-r--r-- | rtl/wii/sysutils.pp | 6 | ||||
-rw-r--r-- | rtl/win/sysutils.pp | 25 | ||||
-rw-r--r-- | rtl/wince/sysutils.pp | 32 |
21 files changed, 679 insertions, 368 deletions
diff --git a/rtl/amiga/sysutils.pp b/rtl/amiga/sysutils.pp index 54a6ffe66e..1af7d4e773 100644 --- a/rtl/amiga/sysutils.pp +++ b/rtl/amiga/sysutils.pp @@ -234,24 +234,24 @@ begin end; -function DeleteFile(const FileName: string) : Boolean; +function DeleteFile(const FileName: RawByteString) : Boolean; var - tmpStr: array[0..255] of char; + SystemFileName: RawByteString; begin - tmpStr:=PathConv(FileName)+#0; + SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName)); - DeleteFile:=dosDeleteFile(@tmpStr); + DeleteFile:=dosDeleteFile(PChar(SystemFileName)); end; function RenameFile(const OldName, NewName: string): Boolean; var - tmpOldName, tmpNewName: array[0..255] of char; + OldSystemFileName, NewSystemFileName: RawByteString; begin - tmpOldName:=PathConv(OldName)+#0; - tmpNewName:=PathConv(NewName)+#0; + OldSystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(OldName)); + NewSystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(NewName)); - RenameFile:=dosRename(tmpOldName, tmpNewName); + RenameFile:=dosRename(PChar(OldSystemFileName), PChar(NewSystemFileName)); end; @@ -287,16 +287,15 @@ begin end; -function FileExists (const FileName : String) : Boolean; +function FileExists (const FileName : RawByteString) : Boolean; var - tmpName: String; tmpLock: LongInt; tmpFIB : PFileInfoBlock; - + SystemFileName: RawByteString; begin result:=false; - tmpName := PathConv(FileName); - tmpLock := dosLock(tmpName, SHARED_LOCK); + SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName)); + tmpLock := dosLock(PChar(SystemFileName), SHARED_LOCK); if (tmpLock <> 0) then begin new(tmpFIB); @@ -388,7 +387,7 @@ end; (****** end of non portable routines ******) -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; var F: file; attr: word; @@ -402,7 +401,7 @@ begin end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; var F: file; begin @@ -491,17 +490,18 @@ begin end; -function DirectoryExists(const Directory: string): Boolean; +function DirectoryExists(const Directory: RawBytetring): Boolean; var tmpStr : String; tmpLock: LongInt; FIB : PFileInfoBlock; + SystemFileName: RawByteString; begin result:=false; if (Directory='') or (InOutRes<>0) then exit; - tmpStr:=PathConv(Directory); + SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName)); - tmpLock:=dosLock(tmpStr,SHARED_LOCK); + tmpLock:=dosLock(PChar(SystemFileName),SHARED_LOCK); if tmpLock=0 then exit; FIB:=nil; new(FIB); diff --git a/rtl/embedded/sysutils.pp b/rtl/embedded/sysutils.pp index 355194f4ae..7ca33041d6 100644 --- a/rtl/embedded/sysutils.pp +++ b/rtl/embedded/sysutils.pp @@ -107,13 +107,13 @@ begin end; -function DeleteFile(const FileName: string) : Boolean; +function DeleteFile(const FileName: RawByteString) : Boolean; begin result := false; end; -function RenameFile(const OldName, NewName: string): Boolean; +function RenameFile(const OldName, NewName: RawByteString): Boolean; begin result := false; end; @@ -125,7 +125,7 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; +Function FileExists (Const FileName : RawByteString) : Boolean; Begin result := false; end; @@ -148,13 +148,13 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; begin result := -1; end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; begin result := -1; end; @@ -205,7 +205,7 @@ begin end; -function DirectoryExists(const Directory: string): Boolean; +function DirectoryExists(const Directory: RawByteString): Boolean; begin result := false; end; diff --git a/rtl/emx/sysutils.pp b/rtl/emx/sysutils.pp index db525b5766..d35c37d3af 100644 --- a/rtl/emx/sysutils.pp +++ b/rtl/emx/sysutils.pp @@ -654,10 +654,11 @@ begin end; -function FileExists (const FileName: string): boolean; +function FileExists (const FileName: RawByteString): boolean; var L: longint; begin + { no need to convert to DefaultFileSystemEncoding, FileGetAttr will do that } if FileName = '' then Result := false else @@ -895,59 +896,56 @@ asm end {['eax', 'edx']}; -function FileSetAttr (const Filename: string; Attr: longint): longint; assembler; -asm -{$IFDEF REGCALL} - mov ecx, edx - mov edx, eax -{$ELSE REGCALL} - mov ecx, Attr - mov edx, FileName -{$ENDIF REGCALL} - mov ax, 4301h - call syscall - mov eax, 0 - jnc @FSetAttrEnd - mov eax, -1 -@FSetAttrEnd: -end {['eax', 'ecx', 'edx']}; - - -function DeleteFile (const FileName: string): boolean; assembler; -asm -{$IFDEF REGCALL} - mov edx, eax -{$ELSE REGCALL} - mov edx, FileName -{$ENDIF REGCALL} - mov ax, 4100h - call syscall - mov eax, 0 - jc @FDeleteEnd - inc eax -@FDeleteEnd: -end {['eax', 'edx']}; - +function FileSetAttr (const Filename: RawByteString; Attr: longint): longint; +var + SystemFileName: RawByteString; +begin + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); + asm + mov ecx, Attr + mov edx, SystemFileName + mov ax, 4301h + call syscall + mov @result, 0 + jnc @FSetAttrEnd + mov @result, -1 + @FSetAttrEnd: + end ['eax', 'ecx', 'edx']; +end; -function RenameFile (const OldName, NewName: string): boolean; assembler; -asm - push edi -{$IFDEF REGCALL} - mov edx, eax - mov edi, edx -{$ELSE REGCALL} - mov edx, OldName - mov edi, NewName -{$ENDIF REGCALL} - mov ax, 5600h - call syscall - mov eax, 0 - jc @FRenameEnd - inc eax -@FRenameEnd: - pop edi -end {['eax', 'edx', 'edi']}; +function DeleteFile (const FileName: string): boolean; +var + SystemFileName: RawByteString; +begin + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); + asm + mov edx, SystemFileName + mov ax, 4100h + call syscall + mov @result, 0 + jc @FDeleteEnd + moc @result, 1 + @FDeleteEnd: + end ['eax', 'edx']; +end; +function RenameFile (const OldName, NewName: string): boolean; +var + OldSystemFileName, NewSystemFileName: RawByteString; +Begin + OldSystemFileName:=ToSingleByteFileSystemEncodedFileName(OldName); + NewSystemFileName:=ToSingleByteFileSystemEncodedFileName(NewName); + asm + mov edx, OldSystemFileName + mov edi, NewSystemFileName + mov ax, 5600h + call syscall + mov @result, 0 + jc @FRenameEnd + mov @result, 1 + @FRenameEnd: + end ['eax', 'edx', 'edi']; +end; {**************************************************************************** Disk Functions @@ -1072,10 +1070,11 @@ begin end; -function DirectoryExists (const Directory: string): boolean; +function DirectoryExists (const Directory: RawByteString): boolean; var L: longint; begin + { no need to convert to DefaultFileSystemEncoding, FileGetAttr will do that } if Directory = '' then Result := false else diff --git a/rtl/gba/sysutils.pp b/rtl/gba/sysutils.pp index 6b2bf960cc..a7e73a0fe3 100644 --- a/rtl/gba/sysutils.pp +++ b/rtl/gba/sysutils.pp @@ -121,13 +121,13 @@ begin end; -function DeleteFile(const FileName: string) : Boolean; +function DeleteFile(const FileName: RawByteString) : Boolean; begin result := false; end; -function RenameFile(const OldName, NewName: string): Boolean; +function RenameFile(const OldName, NewName: RawByteString): Boolean; begin result := false; end; @@ -142,7 +142,7 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; +Function FileExists (Const FileName : RawByteString) : Boolean; Begin result := false; end; @@ -164,13 +164,13 @@ Procedure FindClose (Var F : TSearchrec); begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; begin result := -1; end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; begin result := -1; end; @@ -224,7 +224,7 @@ begin end; -function DirectoryExists(const Directory: string): Boolean; +function DirectoryExists(const Directory: RawByteString): Boolean; begin result := false; end; diff --git a/rtl/go32v2/sysutils.pp b/rtl/go32v2/sysutils.pp index 071f379fbd..11d35a9f93 100644 --- a/rtl/go32v2/sysutils.pp +++ b/rtl/go32v2/sysutils.pp @@ -293,7 +293,7 @@ begin end; -function FileExists (const FileName: string): boolean; +function FileExists (const FileName: RawByteString): boolean; var L: longint; begin @@ -301,6 +301,7 @@ begin Result := false else begin + { no need to convert to DefaultFileSystemEncoding, FileGetAttr will do that } L := FileGetAttr (FileName); Result := (L >= 0) and (L and (faDirectory or faVolumeID) = 0); (* Neither VolumeIDs nor directories are files. *) @@ -308,12 +309,13 @@ begin end; -Function DirectoryExists (Const Directory : String) : Boolean; +Function DirectoryExists (Const Directory : RawByteString) : Boolean; Var - Dir : String; + Dir : RawByteString; drive : byte; FADir, StoredIORes : longint; begin + { no need to convert to DefaultFileSystemEncoding, FileGetAttr will do that } Dir:=Directory; if (length(dir)=2) and (dir[2]=':') and ((dir[1] in ['A'..'Z']) or (dir[1] in ['a'..'z'])) then @@ -441,11 +443,13 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; var Regs: registers; + SystemFileName: RawByteString; begin - StringToTB(FileName); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); + StringToTB(SystemFileName); Regs.Edx := tb_offset; Regs.Ds := tb_segment; if LFNSupport then @@ -463,11 +467,13 @@ begin end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; var Regs: registers; + SystemFileName: RawByteString; begin - StringToTB(FileName); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); + StringToTB(SystemFileName); Regs.Edx := tb_offset; Regs.Ds := tb_segment; if LFNSupport then @@ -486,11 +492,13 @@ begin end; -Function DeleteFile (Const FileName : String) : Boolean; +Function DeleteFile (Const FileName : RawByteString) : Boolean; var Regs: registers; + SystemFileName: RawByteString; begin - StringToTB(FileName); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); + StringToTB(SystemFileName); Regs.Edx := tb_offset; Regs.Ds := tb_segment; if LFNSupport then @@ -504,14 +512,17 @@ begin end; -Function RenameFile (Const OldName, NewName : String) : Boolean; +Function RenameFile (Const OldName, NewName : RawByteString) : Boolean; var Regs: registers; -begin - StringToTB(OldName + #0 + NewName); + OldSystemFileName, NewSystemFileName: RawByteString; +Begin + OldSystemFileName:=ToSingleByteFileSystemEncodedFileName(OldName); + NewSystemFileName:=ToSingleByteFileSystemEncodedFileName(NewName); + StringToTB(OldSystemFileName + #0 + NewSystemFileName); Regs.Edx := tb_offset; Regs.Ds := tb_segment; - Regs.Edi := tb_offset + Length(OldName) + 1; + Regs.Edi := tb_offset + Length(OldSystemFileName) + 1; Regs.Es := tb_segment; if LFNSupport then Regs.Eax := $7156 diff --git a/rtl/macos/sysutils.pp b/rtl/macos/sysutils.pp index 00c1fdc8e5..712fef3353 100644 --- a/rtl/macos/sysutils.pp +++ b/rtl/macos/sysutils.pp @@ -203,7 +203,7 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; +Function FileExists (Const FileName : RawByteString) : Boolean; (* Var Info : Stat; @@ -216,7 +216,7 @@ begin end; -Function DirectoryExists (Const Directory : String) : Boolean; +Function DirectoryExists (Const Directory : RawByteString) : Boolean; (* Var Info : Stat; @@ -450,7 +450,7 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; (* Var Info : Stat; @@ -466,14 +466,14 @@ begin end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; begin Result:=-1; end; -Function DeleteFile (Const FileName : String) : Boolean; +Function DeleteFile (Const FileName : RawByteString) : Boolean; begin (* TODO fix @@ -482,7 +482,7 @@ begin end; -Function RenameFile (Const OldName, NewName : String) : Boolean; +Function RenameFile (Const OldName, NewName : RawByteString) : Boolean; begin (* TODO fix diff --git a/rtl/morphos/sysutils.pp b/rtl/morphos/sysutils.pp index 6a58edc4ce..988bc1318e 100644 --- a/rtl/morphos/sysutils.pp +++ b/rtl/morphos/sysutils.pp @@ -188,15 +188,15 @@ begin end; -function FileSetDate(const FileName: string; Age: LongInt) : LongInt; +function FileSetDate(const FileName: RawByteString; Age: LongInt) : LongInt; var tmpDateStamp: TDateStamp; - tmpName: array[0..255] of char; + SystemFileName: RawByteString; begin result:=0; - tmpName:=PathConv(FileName)+#0; + SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName)); tmpDateStamp:=DateTimeToAmigaDateStamp(FileDateToDateTime(Age)); - if not SetFileDate(@tmpName,@tmpDateStamp) then begin + if not SetFileDate(PChar(SystemFileName),@tmpDateStamp) then begin IoErr(); // dump the error code for now (TODO) result:=-1; end; @@ -308,24 +308,22 @@ begin end; -function DeleteFile(const FileName: string) : Boolean; +function DeleteFile(const FileName: RawByteString) : Boolean; var - tmpStr: array[0..255] of char; + SystemFileName: RawByteString; begin - tmpStr:=PathConv(FileName)+#0; - - DeleteFile:=dosDeleteFile(@tmpStr); + SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName)); + DeleteFile:=dosDeleteFile(PChar(SystemFileName)); end; -function RenameFile(const OldName, NewName: string): Boolean; +function RenameFile(const OldName, NewName: RawByteString): Boolean; var - tmpOldName, tmpNewName: array[0..255] of char; + OldSystemFileName, NewSystemFileName: RawByteString; begin - tmpOldName:=PathConv(OldName)+#0; - tmpNewName:=PathConv(NewName)+#0; - - RenameFile:=dosRename(tmpOldName, tmpNewName); + OldSystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(OldName)); + NewSystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(NewName)); + RenameFile:=dosRename(PChar(OldSystemFileName), PChar(NewSystemFileName)); end; @@ -361,16 +359,15 @@ begin end; -function FileExists (const FileName : String) : Boolean; +function FileExists (const FileName : RawByteString) : Boolean; var - tmpName: String; tmpLock: LongInt; tmpFIB : PFileInfoBlock; - + SystemFileName: RawByteString; begin result:=false; - tmpName := PathConv(FileName); - tmpLock := dosLock(tmpName, SHARED_LOCK); + SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(FileName)); + tmpLock := dosLock(PChar(SystemFileName), SHARED_LOCK); if (tmpLock <> 0) then begin new(tmpFIB); @@ -462,7 +459,7 @@ end; (****** end of non portable routines ******) -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; var F: file; attr: word; @@ -476,7 +473,7 @@ begin end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; var F: file; begin @@ -565,17 +562,17 @@ begin end; -function DirectoryExists(const Directory: string): Boolean; +function DirectoryExists(const Directory: RawByteString): Boolean; var - tmpStr : String; tmpLock: LongInt; FIB : PFileInfoBlock; + SystemFileName: RawByteString; begin result:=false; if (Directory='') or (InOutRes<>0) then exit; - tmpStr:=PathConv(Directory); + SystemFileName:=PathConv(ToSingleByteFileSystemEncodedFileName(Directory)); - tmpLock:=dosLock(tmpStr,SHARED_LOCK); + tmpLock:=dosLock(PChar(SystemFileName),SHARED_LOCK); if tmpLock=0 then exit; FIB:=nil; new(FIB); diff --git a/rtl/msdos/sysutils.pp b/rtl/msdos/sysutils.pp index 300bc16d63..f8c9c8339e 100644 --- a/rtl/msdos/sysutils.pp +++ b/rtl/msdos/sysutils.pp @@ -287,7 +287,7 @@ begin end; -function FileExists (const FileName: string): boolean; +function FileExists (const FileName: RawByteString): boolean; var L: longint; begin @@ -302,9 +302,9 @@ begin end; -Function DirectoryExists (Const Directory : String) : Boolean; +Function DirectoryExists (Const Directory : RawByteString) : Boolean; Var - Dir : String; + Dir : RawByteString; drive : byte; FADir, StoredIORes : longint; begin @@ -435,7 +435,7 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; var Regs: registers; begin @@ -456,7 +456,7 @@ begin end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; var Regs: registers; begin @@ -478,7 +478,7 @@ begin end; -Function DeleteFile (Const FileName : String) : Boolean; +Function DeleteFile (Const FileName : RawByteString) : Boolean; var Regs: registers; begin @@ -495,7 +495,7 @@ begin end; -Function RenameFile (Const OldName, NewName : String) : Boolean; +Function RenameFile (Const OldName, NewName : RawByteString) : Boolean; var Regs: registers; begin diff --git a/rtl/nativent/sysutils.pp b/rtl/nativent/sysutils.pp index ac8668e2cd..ddd978546a 100644 --- a/rtl/nativent/sysutils.pp +++ b/rtl/nativent/sysutils.pp @@ -315,7 +315,7 @@ begin end; -function FileExists(const FileName: String): Boolean; +function FileExists(const FileName: UnicodeString): Boolean; var ntstr: UNICODE_STRING; objattr: OBJECT_ATTRIBUTES; @@ -323,7 +323,7 @@ var iostatus: IO_STATUS_BLOCK; h: THandle; begin - AnsiStrToNtStr(FileName, ntstr); + UnicodeStrToNtStr(FileName, ntstr); InitializeObjectAttributes(objattr, @ntstr, 0, 0, Nil); res := NtOpenFile(@h, FILE_READ_ATTRIBUTES or NT_SYNCHRONIZE, @objattr, @iostatus, FILE_SHARE_READ or FILE_SHARE_WRITE, @@ -336,7 +336,7 @@ begin end; -function DirectoryExists(const Directory : String) : Boolean; +function DirectoryExists(const Directory : UnicodeString) : Boolean; var ntstr: UNICODE_STRING; objattr: OBJECT_ATTRIBUTES; @@ -344,7 +344,7 @@ var iostatus: IO_STATUS_BLOCK; h: THandle; begin - AnsiStrToNtStr(Directory, ntstr); + UnicodeStrToNtStr(Directory, ntstr); InitializeObjectAttributes(objattr, @ntstr, 0, 0, Nil); { first test wether this is a object directory } @@ -782,14 +782,14 @@ begin end; -function FileGetAttr(const FileName: String): Longint; +function FileGetAttr(const FileName: UnicodeString): Longint; var objattr: OBJECT_ATTRIBUTES; info: FILE_NETWORK_OPEN_INFORMATION; res: NTSTATUS; ntstr: UNICODE_STRING; begin - AnsiStrToNtStr(FileName, ntstr); + UnicodeStrToNtStr(FileName, ntstr); InitializeObjectAttributes(objattr, @ntstr, 0, 0, Nil); res := NtQueryFullAttributesFile(@objattr, @info); @@ -802,7 +802,7 @@ begin end; -function FileSetAttr(const Filename: String; Attr: LongInt): Longint; +function FileSetAttr(const Filename: UnicodeString; Attr: LongInt): Longint; var h: THandle; objattr: OBJECT_ATTRIBUTES; @@ -811,7 +811,7 @@ var res: NTSTATUS; iostatus: IO_STATUS_BLOCK; begin - AnsiStrToNtStr(Filename, ntstr); + UnicodeStrToNtStr(Filename, ntstr); InitializeObjectAttributes(objattr, @ntstr, 0, 0, Nil); res := NtOpenFile(@h, NT_SYNCHRONIZE or FILE_READ_ATTRIBUTES or FILE_WRITE_ATTRIBUTES, @@ -837,7 +837,7 @@ begin end; -function DeleteFile(const FileName: String): Boolean; +function DeleteFile(const FileName: UnicodeString): Boolean; var h: THandle; objattr: OBJECT_ATTRIBUTES; @@ -846,7 +846,7 @@ var res: NTSTATUS; iostatus: IO_STATUS_BLOCK; begin - AnsiStrToNtStr(Filename, ntstr); + UnicodeStrToNtStr(Filename, ntstr); InitializeObjectAttributes(objattr, @ntstr, 0, 0, Nil); res := NtOpenFile(@h, NT_DELETE, @objattr, @iostatus, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, @@ -868,7 +868,7 @@ begin end; -function RenameFile(const OldName, NewName: String): Boolean; +function RenameFile(const OldName, NewName: UnicodeString): Boolean; var h: THandle; objattr: OBJECT_ATTRIBUTES; @@ -878,7 +878,7 @@ var res: LongInt; begin { check whether the destination exists first } - AnsiStrToNtStr(NewName, dest); + UnicodeStrToNtStr(NewName, dest); InitializeObjectAttributes(objattr, @dest, 0, 0, Nil); res := NtCreateFile(@h, 0, @objattr, @iostatus, Nil, 0, @@ -889,7 +889,7 @@ begin NtClose(h); Result := False; end else begin - AnsiStrToNtStr(OldName, src); + UnicodeStrToNtStr(OldName, src); InitializeObjectAttributes(objattr, @src, 0, 0, Nil); res := NtCreateFile(@h, diff --git a/rtl/nds/sysutils.pp b/rtl/nds/sysutils.pp index 50da94e3bd..f4f4b47953 100644 --- a/rtl/nds/sysutils.pp +++ b/rtl/nds/sysutils.pp @@ -138,15 +138,22 @@ begin end; -function DeleteFile(const FileName: string) : Boolean; +function DeleteFile(const FileName: RawByteString) : Boolean; +var + SystemFileName: RawByteString; begin - Result := _UnLink(pointer(FileName))>= 0; + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + Result := _UnLink(pointer(SystemFileName))>= 0; end; -function RenameFile(const OldName, NewName: string): Boolean; +function RenameFile(const OldName, NewName: RawByteString): Boolean; +var + OldSystemFileName, NewSystemFileName: RawByteString; begin - RenameFile := _Rename(pointer(OldNAme), pointer(NewName)) >= 0; + OldSystemFileName:=ToSingleByteFileSystemEncodedFileName(OldName); + NewSystemFileName:=ToSingleByteFileSystemEncodedFileName(NewName); + RenameFile := _Rename(pointer(OldSystemFileName), pointer(NewSystemFileName)) >= 0; end; @@ -164,9 +171,12 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; +Function FileExists (Const FileName : RawByteString) : Boolean; +var + SystemFileName: RawByteString; begin - FileExists := _Access(pointer(filename), F_OK) = 0; + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + FileExists := _Access(pointer(SystemFileName), F_OK) = 0; end; @@ -187,17 +197,20 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; -Var Info : TStat; +Function FileGetAttr (Const FileName : RawByteString) : Longint; +var + Info : TStat; + SystemFileName: RawByteString; begin - If _stat(pchar(FileName), Info) <> 0 then + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + If _stat(pchar(SystemFileName), Info) <> 0 then Result := -1 Else Result := (Info.st_mode shr 16) and $ffff; end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; begin result := -1; end; @@ -251,7 +264,7 @@ begin end; -function DirectoryExists(const Directory: string): Boolean; +function DirectoryExists(const Directory: RawByteString): Boolean; begin result := false; end; diff --git a/rtl/netware/sysutils.pp b/rtl/netware/sysutils.pp index 27a4587271..f92d6312e4 100644 --- a/rtl/netware/sysutils.pp +++ b/rtl/netware/sysutils.pp @@ -211,10 +211,12 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; +Function FileExists (Const FileName : RawByteString) : Boolean; VAR Info : NWStatBufT; + SystemFileName: RawByteString; begin - FileExists:=(_stat(pchar(filename),Info) = 0); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + FileExists:=(_stat(pchar(SystemFileName),Info) = 0); end; @@ -319,38 +321,48 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; Var Info : NWStatBufT; + SystemFileName: RawByteString; begin - If _stat (pchar(FileName),Info) <> 0 then + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + If _stat (pchar(SystemFileName),Info) <> 0 then Result:=-1 Else Result := Info.st_attr AND $FFFF; end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; VAR MS : NWModifyStructure; + SystemFileName: RawByteString; begin + { The Attr parameter is not used! } + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); FillChar (MS, SIZEOF (MS), 0); - if _ChangeDirectoryEntry (PChar (Filename), MS, MFileAtrributesBit, 0) <> 0 then + if _ChangeDirectoryEntry (PChar (SystemFilename), MS, MFileAtrributesBit, 0) <> 0 then result := -1 else result := 0; end; -Function DeleteFile (Const FileName : String) : Boolean; - +Function DeleteFile (Const FileName : RawByteString) : Boolean; +var + SystemFileName: RawByteString; begin - Result:= (_UnLink (pchar(FileName)) = 0); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + Result:= (_UnLink (pchar(SystemFileName)) = 0); end; -Function RenameFile (Const OldName, NewName : String) : Boolean; - +Function RenameFile (Const OldName, NewName : RawByteString) : Boolean; +var + OldSystemFileName, NewSystemFileName: RawByteString; begin - RenameFile:=(_rename(pchar(OldName),pchar(NewName)) = 0); + OldSystemFileName:=ToSingleByteFileSystemEncodedFileName(OldName); + NewSystemFileName:=ToSingleByteFileSystemEncodedFileName(NewName); + RenameFile:=(_rename(pchar(OldSystemFileName),pchar(NewSystemFileName)) = 0); end; @@ -456,9 +468,12 @@ end; function DirectoryExists (const Directory: string): boolean; -VAR Info : NWStatBufT; +var + Info : NWStatBufT; + SystemFileName: RawByteString; begin - If _stat (pchar(Directory),Info) <> 0 then + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Directory); + If _stat (pchar(SystemFileName),Info) <> 0 then exit(false) else Exit ((Info.st_attr and faDirectory) <> 0); diff --git a/rtl/netwlibc/sysutils.pp b/rtl/netwlibc/sysutils.pp index 016750fd08..d7249948d2 100644 --- a/rtl/netwlibc/sysutils.pp +++ b/rtl/netwlibc/sysutils.pp @@ -209,10 +209,12 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; +Function FileExists (Const FileName : RawByteString) : Boolean; VAR Info : TStat; + SystemFileName: RawByteString; begin - FileExists:=(Fpstat(pchar(filename),Info) = 0); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + FileExists:=(Fpstat(pchar(SystemFileName),Info) = 0); end; @@ -359,22 +361,26 @@ Begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; Var Info : TStat; + SystemFileName: RawByteString; begin - If Fpstat (pchar(FileName),Info) <> 0 then + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + If Fpstat (pchar(SystemFileName),Info) <> 0 then Result:=-1 Else Result := (Info.st_mode shr 16) and $ffff; end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; var StatBuf : TStat; newMode : longint; + SystemFileName: RawByteString; begin - if Fpstat (pchar(Filename),StatBuf) = 0 then + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + if Fpstat (pchar(SystemFilename),StatBuf) = 0 then begin {what should i do here ? only support sysutils-standard attributes or also support the extensions defined @@ -390,7 +396,7 @@ begin newmode := StatBuf.st_mode and ($ffff0000-M_A_RDONLY-M_A_HIDDEN- M_A_SYSTEM-M_A_SUBDIR-M_A_ARCH); newmode := newmode or (attr shl 16) or M_A_BITS_SIGNIFICANT; end; - if Fpchmod (pchar(Filename),newMode) < 0 then + if Fpchmod (pchar(SystemFilename),newMode) < 0 then result := ___errno^ else result := 0; end else @@ -398,17 +404,22 @@ begin end; -Function DeleteFile (Const FileName : String) : Boolean; - +Function DeleteFile (Const FileName : RawByteString) : Boolean; +var + SystemFileName: RawByteString; begin - Result:= (libc.UnLink (pchar(FileName)) = 0); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + Result:= (libc.UnLink (pchar(SystemFileName)) = 0); end; Function RenameFile (Const OldName, NewName : String) : Boolean; - +var + OldSystemFileName, NewSystemFileName: RawByteString; begin - RenameFile:=(libc.rename(pchar(OldName),pchar(NewName)) = 0); + OldSystemFileName:=ToSingleByteFileSystemEncodedFileName(OldName); + NewSystemFileName:=ToSingleByteFileSystemEncodedFileName(NewName); + RenameFile:=(libc.rename(pchar(OldSystemFileName),pchar(NewSystemFileName)) = 0); end; @@ -507,10 +518,13 @@ begin end; -function DirectoryExists (const Directory: string): boolean; -var Info : TStat; +function DirectoryExists (const Directory: RawByteString): boolean; +var + Info : TStat; + SystemFileName: RawByteString; begin - If Fpstat (pchar(Directory),Info) <> 0 then + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Directory); + If Fpstat (pchar(SystemFileName),Info) <> 0 then exit(false) else Exit ((Info.st_mode and M_A_SUBDIR) <> 0); diff --git a/rtl/objpas/sysutils/filutil.inc b/rtl/objpas/sysutils/filutil.inc index aac380cecd..a2ce85eb33 100644 --- a/rtl/objpas/sysutils/filutil.inc +++ b/rtl/objpas/sysutils/filutil.inc @@ -38,9 +38,148 @@ Function FileCreate (Const FileName : UnicodeString; ShareMode : Integer; Rights begin Result:=FileCreate(ToSingleByteFileSystemEncodedFileName(FileName),ShareMode,Rights); end; + + +Function FileExists (Const FileName : UnicodeString) : Boolean; +begin + Result:=FileExists(ToSingleByteFileSystemEncodedFileName(FileName)); +end; + + +Function DirectoryExists (Const Directory : UnicodeString) : Boolean; +begin + Result:=DirectoryExists(ToSingleByteFileSystemEncodedFileName(Directory)); +end; + + +Function FileGetAttr (Const FileName : UnicodeString) : Longint; +begin + Result:=FileGetAttr(ToSingleByteFileSystemEncodedFileName(FileName)); +end; + + +Function FileSetAttr (Const Filename : UnicodeString; Attr: longint) : Longint; +begin + Result:=FileSetAttr(ToSingleByteFileSystemEncodedFileName(FileName),Attr); +end; + + +Function DeleteFile (Const FileName : UnicodeString) : Boolean; +begin + Result:=DeleteFile(ToSingleByteFileSystemEncodedFileName(FileName)); +end; + + +Function RenameFile (Const OldName, NewName : UnicodeString) : Boolean; + +begin + Result:=RenameFile(ToSingleByteFileSystemEncodedFileName(OldName), + ToSingleByteFileSystemEncodedFileName(NewName)); +end; + +{$ifdef OS_FILEISREADONLY} +Function FileIsReadOnly(const FileName: UnicodeString): Boolean; +begin + Result:=FileIsReadOnly(ToSingleByteFileSystemEncodedFileName(FileName)); +end; +{$endif} + + +{$ifdef OS_FILESETDATEBYNAME} +Function FileSetDate (Const FileName : UnicodeString;Age : Longint) : Longint; +begin + Result:=FileSetDate(ToSingleByteFileSystemEncodedFileName(FileName),Age); +end; {$endif} +Function FileSearch (Const Name, DirList : UnicodeString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : UnicodeString; +begin + Result:=UnicodeString(FileSearch(ToSingleByteFileSystemEncodedFileName(Name), + ToSingleByteFileSystemEncodedFileName(Dirlist),Options)); +end; + + +Function FileSearch (Const Name, DirList : UnicodeString; ImplicitCurrentDir : Boolean) : UnicodeString; +begin + Result:=UnicodeString(FileSearch(ToSingleByteFileSystemEncodedFileName(Name), + ToSingleByteFileSystemEncodedFileName(DirList),ImplicitCurrentDir)); +end; + + +Function ExeSearch (Const Name : UnicodeString; Const DirList : UnicodeString ='' ) : UnicodeString; +begin + Result:=UnicodeString(ExeSearch(ToSingleByteFileSystemEncodedFileName(Name), + ToSingleByteFileSystemEncodedFileName(Dirlist))); +end; + + + +Function FileSearch (Const Name, DirList : RawByteString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : RawByteString; +Var + I : longint; + Temp : RawByteString; +begin + Result:=Name; + temp:=SetDirSeparators(DirList); + // Start with checking the file in the current directory + If (sfoImplicitCurrentDir in Options) and (Result <> '') and FileExists(Result) Then + exit; + while True do begin + If Temp = '' then + Break; // No more directories to search - fail + I:=pos(PathSeparator,Temp); + If I<>0 then + begin + Result:=Copy (Temp,1,i-1); + system.Delete(Temp,1,I); + end + else + begin + Result:=Temp; + Temp:=''; + end; + If Result<>'' then + begin + If (sfoStripQuotes in Options) and (Result[1]='"') and (Result[Length(Result)]='"') then + Result:=Copy(Result,2,Length(Result)-2); + if (Result<>'') then + Result:=IncludeTrailingPathDelimiter(Result)+name; + end; + If (Result <> '') and FileExists(Result) Then + exit; + end; + Result:=''; +end; + + +Function FileSearch (Const Name, DirList : RawByteString; ImplicitCurrentDir : Boolean) : RawByteString; +begin + if ImplicitCurrentDir then + Result:=FileSearch(Name,DirList,[sfoImplicitCurrentDir]) + else + Result:=FileSearch(Name,DirList,[]); +end; + + +Function ExeSearch (Const Name : RawByteString; Const DirList : RawByteString ='' ) : RawByteString; +Var + D : RawByteString; + O : TFileSearchOptions; +begin + D:=DirList; + if (D='') then + D:=GetEnvironmentVariable('PATH'); +{$ifdef unix} + O:=[]; +{$else unix} + O:=[sfoImplicitCurrentDir,sfoStripQuotes]; +{$endif unix} + Result := FileSearch(Name, D, O); +end; + +{$endif} + {$ifndef SYSUTILS_HAS_ANSISTR_FILEUTIL_IMPL} Function FileOpen (Const FileName : rawbytestring; Mode : Integer) : THandle; begin @@ -64,6 +203,138 @@ Function FileCreate (Const FileName : RawByteString; ShareMode : Integer; Rights begin Result:=FileCreate(UnicodeString(FileName),ShareMode,Rights); end; + + +Function FileExists (Const FileName : RawByteString) : Boolean; +begin + Result:=FileExists(UnicodeString(FileName)); +end; + + +Function DirectoryExists (Const Directory : RawByteString) : Boolean; +begin + Result:=DirectoryExists(UnicodeString(Directory)); +end; + + +Function FileGetAttr (Const FileName : RawByteString) : Longint; +begin + Result:=FileGetAttr(unicodestring(FileName)); +end; + + +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; +begin + Result:=FileSetAttr(unicodestring(FileName),Attr); +end; + + +Function DeleteFile (Const FileName : RawByteString) : Boolean; +begin + Result:=DeleteFile(UnicodeString(FileName)); +end; + + +Function RenameFile (Const OldName, NewName : RawByteString) : Boolean; +begin + Result:=RenameFile(UnicodeString(OldName),UnicodeString(NewName)); +end; + +{$ifdef OS_FILEISREADONLY} +Function FileIsReadOnly(const FileName: RawByteString): Boolean; +begin + Result:=FileIsReadOnly(UnicodeString(FileName)); +end; +{$endif} + +{$ifdef OS_FILESETDATEBYNAME} +Function FileSetDate (Const FileName : RawByteString;Age : Longint) : Longint; +begin + Result:=FileSetDate(UnicodeString(FileName),Age); +end; +{$endif} + + +Function FileSearch (Const Name, DirList : UnicodeString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : UnicodeString; +Var + I : longint; + Temp : UnicodeString; +begin + Result:=Name; + temp:=SetDirSeparators(DirList); + // Start with checking the file in the current directory + If (sfoImplicitCurrentDir in Options) and (Result <> '') and FileExists(Result) Then + exit; + while True do begin + If Temp = '' then + Break; // No more directories to search - fail + I:=pos(PathSeparator,Temp); + If I<>0 then + begin + Result:=Copy (Temp,1,i-1); + system.Delete(Temp,1,I); + end + else + begin + Result:=Temp; + Temp:=''; + end; + If Result<>'' then + begin + If (sfoStripQuotes in Options) and (Result[1]='"') and (Result[Length(Result)]='"') then + Result:=Copy(Result,2,Length(Result)-2); + if (Result<>'') then + Result:=IncludeTrailingPathDelimiter(Result)+name; + end; + If (Result <> '') and FileExists(Result) Then + exit; + end; + Result:=''; +end; + + +Function FileSearch (Const Name, DirList : RawbyteString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : RawByteString; +begin + Result:=ToSingleByteFileSystemEncodedFileName(FileSearch(unicodestring(name),unicodestring(dirlist),options)); +end; + + +Function FileSearch (Const Name, DirList : RawbyteString; ImplicitCurrentDir : Boolean) : RawByteString; +begin + Result:=ToSingleByteFileSystemEncodedFileName(FileSearch(unicodestring(name),unicodestring(dirlist),ImplicitCurrentDir)); +end; + + +Function FileSearch (Const Name, DirList : UnicodeString; ImplicitCurrentDir : Boolean) : UnicodeString; +begin + if ImplicitCurrentDir then + Result:=FileSearch(Name,DirList,[sfoImplicitCurrentDir]) + else + Result:=FileSearch(Name,DirList,[]); +end; + + +Function ExeSearch (Const Name : UnicodeString; Const DirList : UnicodeString ='' ) : UnicodeString; +Var + D : UnicodeString; + O : TFileSearchOptions; +begin + D:=DirList; + if (D='') then + D:=GetEnvironmentVariable('PATH'); +{$ifdef unix} + O:=[]; +{$else unix} + O:=[sfoImplicitCurrentDir,sfoStripQuotes]; +{$endif unix} + Result := FileSearch(Name, D, O); +end; + + +Function ExeSearch (Const Name : RawbyteString; Const DirList : RawbyteString ='' ) : RawByteString; +begin + Result:=ToSingleByteFileSystemEncodedFileName(ExeSearch(unicodestring(name),unicodestring(dirlist))); +end; {$endif} diff --git a/rtl/objpas/sysutils/filutilh.inc b/rtl/objpas/sysutils/filutilh.inc index c3e0ae553c..bd4bf95e15 100644 --- a/rtl/objpas/sysutils/filutilh.inc +++ b/rtl/objpas/sysutils/filutilh.inc @@ -81,11 +81,32 @@ Function FileOpen (Const FileName : unicodestring; Mode : Integer) : THandle; Function FileCreate (Const FileName : UnicodeString) : THandle; Function FileCreate (Const FileName : UnicodeString; Rights : Integer) : THandle; Function FileCreate (Const FileName : UnicodeString; ShareMode : Integer; Rights : Integer) : THandle; +Function FileExists (Const FileName : UnicodeString) : Boolean; +Function DirectoryExists (Const Directory : UnicodeString) : Boolean; +Function FileSetDate (Const FileName : UnicodeString;Age : Longint) : Longint; +Function FileGetAttr (Const FileName : UnicodeString) : Longint; +Function FileSetAttr (Const Filename : UnicodeString; Attr: longint) : Longint; +Function DeleteFile (Const FileName : UnicodeString) : Boolean; +Function RenameFile (Const OldName, NewName : UnicodeString) : Boolean; +Function FileSearch (Const Name, DirList : UnicodeString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : UnicodeString; +Function FileSearch (Const Name, DirList : UnicodeString; ImplicitCurrentDir : Boolean) : UnicodeString; +Function ExeSearch (Const Name : UnicodeString; Const DirList : UnicodeString = '') : UnicodeString; +Function FileIsReadOnly(const FileName : UnicodeString): Boolean; Function FileOpen (Const FileName : RawByteString; Mode : Integer) : THandle; Function FileCreate (Const FileName : RawByteString) : THandle; Function FileCreate (Const FileName : RawByteString; Rights : Integer) : THandle; Function FileCreate (Const FileName : RawByteString; ShareMode : Integer; Rights : Integer) : THandle; +Function FileExists (Const FileName : RawByteString) : Boolean; +Function DirectoryExists (Const Directory : RawByteString) : Boolean; +Function FileSetDate (Const FileName : RawByteString;Age : Longint) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; +Function DeleteFile (Const FileName : RawByteString) : Boolean; +Function RenameFile (Const OldName, NewName : RawByteString) : Boolean; +Function FileSearch (Const Name, DirList : RawByteString; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : RawByteString; +Function FileSearch (Const Name, DirList : RawByteString; ImplicitCurrentDir : Boolean) : RawByteString; +Function ExeSearch (Const Name : RawByteString; Const DirList : RawByteString = '') : RawByteString; Function FileRead (Handle : THandle; out Buffer; Count : longint) : Longint; Function FileWrite (Handle : THandle; const Buffer; Count : Longint) : Longint; @@ -96,24 +117,11 @@ Function FileTruncate (Handle : THandle;Size: Int64) : boolean; {$ifndef FPUNONE} Function FileAge (Const FileName : String): Longint; {$endif} -Function FileExists (Const FileName : String) : Boolean; -Function DirectoryExists (Const Directory : String) : Boolean; Function FindFirst (Const Path : String; Attr : Longint; out Rslt : TSearchRec) : Longint; Function FindNext (Var Rslt : TSearchRec) : Longint; Procedure FindClose (Var F : TSearchrec); Function FileGetDate (Handle : THandle) : Longint; Function FileSetDate (Handle : THandle;Age : Longint) : Longint; -Function FileSetDate (Const FileName : String;Age : Longint) : Longint; -Function FileGetAttr (Const FileName : String) : Longint; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; -Function DeleteFile (Const FileName : String) : Boolean; -Function RenameFile (Const OldName, NewName : String) : Boolean; - -Function FileSearch (Const Name, DirList : String; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : String; -Function FileSearch (Const Name, DirList : String; ImplicitCurrentDir : Boolean) : String; -Function ExeSearch (Const Name : String; Const DirList : String = '') : String; -Function FileIsReadOnly(const FileName: String): Boolean; - Function GetFileHandle(var f : File):THandle; Function GetFileHandle(var f : Text):THandle; function FileAge(const FileName: string; out FileDateTime: TDateTime; FollowLink: Boolean = True): Boolean; diff --git a/rtl/objpas/sysutils/sysutils.inc b/rtl/objpas/sysutils/sysutils.inc index 3e07625e62..5eda5387d5 100644 --- a/rtl/objpas/sysutils/sysutils.inc +++ b/rtl/objpas/sysutils/sysutils.inc @@ -34,73 +34,15 @@ { variant error codes } {$i varerror.inc} - Function FileSearch (Const Name, DirList : String; Options : TFileSearchoptions = [sfoImplicitCurrentDir]) : String; - Var - I : longint; - Temp : String; - - begin - Result:=Name; - temp:=SetDirSeparators(DirList); - // Start with checking the file in the current directory - If (sfoImplicitCurrentDir in Options) and (Result <> '') and FileExists(Result) Then - exit; - while True do begin - If Temp = '' then - Break; // No more directories to search - fail - I:=pos(PathSeparator,Temp); - If I<>0 then - begin - Result:=Copy (Temp,1,i-1); - system.Delete(Temp,1,I); - end - else - begin - Result:=Temp; - Temp:=''; - end; - If Result<>'' then - begin - If (sfoStripQuotes in Options) and (Result[1]='"') and (Result[Length(Result)]='"') then - Result:=Copy(Result,2,Length(Result)-2); - if (Result<>'') then - Result:=IncludeTrailingPathDelimiter(Result)+name; - end; - If (Result <> '') and FileExists(Result) Then - exit; - end; - result:=''; - end; - - Function FileSearch (Const Name, DirList : String; ImplicitCurrentDir : Boolean) : String; - - begin - if ImplicitCurrentDir then - Result:=FileSearch(Name,DirList,[sfoImplicitCurrentDir]) - else - Result:=FileSearch(Name,DirList,[]); - end; - - Function ExeSearch (Const Name : String; Const DirList : String ='' ) : String; - - Var - D : String; - O : TFileSearchOptions; - begin - D:=DirList; - if (D='') then - D:=GetEnvironmentVariable('PATH'); - {$ifdef unix} - O:=[]; - {$else unix} - O:=[sfoImplicitCurrentDir,sfoStripQuotes]; - {$endif unix} - Result := FileSearch(Name, D, O); - end; {$ifndef OS_FILEISREADONLY} - Function FileIsReadOnly(const FileName: String): Boolean; + Function FileIsReadOnly(const FileName: RawByteString): Boolean; + begin + Result := (FileGetAttr(FileName) and faReadOnly) <> 0; + end; + + Function FileIsReadOnly(const FileName: UnicodeString): Boolean; begin Result := (FileGetAttr(FileName) and faReadOnly) <> 0; end; @@ -108,7 +50,28 @@ {$ifndef OS_FILESETDATEBYNAME} - Function FileSetDate (Const FileName : String;Age : Longint) : Longint; + Function FileSetDate (Const FileName : RawByteString;Age : Longint) : Longint; + Var + fd : THandle; + begin + { at least windows requires fmOpenWrite here } + fd:=FileOpen(FileName,fmOpenWrite); + If (Fd<>feInvalidHandle) then + try + Result:=FileSetDate(fd,Age); + finally + FileClose(fd); + end + else + {$ifdef HAS_OSERROR} + Result:=GetLastOSError; + {$else} + Result:=-1; + {$endif} + end; + + + Function FileSetDate (Const FileName : UnicodeString;Age : Longint) : Longint; Var fd : THandle; begin diff --git a/rtl/os2/sysutils.pp b/rtl/os2/sysutils.pp index 66c9be4b44..7e0d190be2 100644 --- a/rtl/os2/sysutils.pp +++ b/rtl/os2/sysutils.pp @@ -178,16 +178,17 @@ begin end; -function FileExists (const FileName: string): boolean; +function FileExists (const FileName: RawByteString): boolean; var L: longint; begin + { no need to convert to DefaultFileSystemEncoding, FileGetAttr will do that } if FileName = '' then - Result := false + Result := false else begin - L := FileGetAttr (FileName); - Result := (L >= 0) and (L and (faDirectory or faVolumeID) = 0); + L := FileGetAttr (FileName); + Result := (L >= 0) and (L and (faDirectory or faVolumeID) = 0); (* Neither VolumeIDs nor directories are files. *) end; end; @@ -328,36 +329,47 @@ begin Dispose (FStat); end; -function FileGetAttr (const FileName: string): longint; +function FileGetAttr (const FileName: RawByteString): longint; var FS: PFileStatus3; + SystemFileName: RawByteString; begin + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); New(FS); - Result:=-DosQueryPathInfo(PChar (FileName), ilStandard, FS, SizeOf(FS^)); + Result:=-DosQueryPathInfo(PChar (SystemFileName), ilStandard, FS, SizeOf(FS^)); If Result=0 Then Result:=FS^.attrFile; Dispose(FS); end; -function FileSetAttr (const Filename: string; Attr: longint): longint; +function FileSetAttr (const Filename: RawByteString; Attr: longint): longint; Var FS: PFileStatus3; + SystemFileName: RawByteString; Begin + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); New(FS); FillChar(FS, SizeOf(FS^), 0); FS^.AttrFile:=Attr; - Result:=-DosSetPathInfo(PChar (FileName), ilStandard, FS, SizeOf(FS^), 0); + Result:=-DosSetPathInfo(PChar (SystemFileName), ilStandard, FS, SizeOf(FS^), 0); Dispose(FS); end; -function DeleteFile (const FileName: string): boolean; +function DeleteFile (const FileName: RawByteString): boolean; +var + SystemFileName: RawByteString; Begin + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); Result:=(DosDelete(PChar (FileName))=0); End; -function RenameFile (const OldName, NewName: string): boolean; +function RenameFile (const OldName, NewName: RawByteString): boolean; +var + OldSystemFileName, NewSystemFileName: RawByteString; Begin - Result:=(DosMove(PChar (OldName), PChar (NewName))=0); + OldSystemFileName:=ToSingleByteFileSystemEncodedFileName(OldName); + NewSystemFileName:=ToSingleByteFileSystemEncodedFileName(NewName); + Result:=(DosMove(PChar (OldSystemFileName), PChar (NewSystemFileName))=0); End; {**************************************************************************** @@ -443,10 +455,11 @@ begin end; -function DirectoryExists (const Directory: string): boolean; +function DirectoryExists (const Directory: RawByteString): boolean; var L: longint; begin + { no need to convert to DefaultFileSystemEncoding, FileGetAttr will do that } if Directory = '' then Result := false else diff --git a/rtl/unix/sysutils.pp b/rtl/unix/sysutils.pp index fd9a8bf7aa..5ea02c8fd6 100644 --- a/rtl/unix/sysutils.pp +++ b/rtl/unix/sysutils.pp @@ -558,29 +558,29 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; - +Function FileExists (Const FileName : RawByteString) : Boolean; +var + SystemFileName: RawByteString; begin + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); // Don't use stat. It fails on files >2 GB. // Access obeys the same access rules, so the result should be the same. - FileExists:=fpAccess(pointer(filename),F_OK)=0; + FileExists:=fpAccess(pointer(SystemFileName),F_OK)=0; end; - -Function DirectoryExists (Const Directory : String) : Boolean; - -Var Info : Stat; - +Function DirectoryExists (Const Directory : RawByteString) : Boolean; +Var + Info : Stat; + SystemFileName: RawByteString; begin - DirectoryExists:=(fpstat(pointer(Directory),Info)>=0) and fpS_ISDIR(Info.st_mode); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Directory); + DirectoryExists:=(fpstat(pointer(SystemFileName),Info)>=0) and fpS_ISDIR(Info.st_mode); end; - -Function LinuxToWinAttr (const FN : Ansistring; Const Info : Stat) : Longint; - +Function LinuxToWinAttr (const FN : RawByteString; Const Info : Stat) : Longint; Var LinkInfo : Stat; - nm : AnsiString; + nm : RawByteString; begin Result:=faArchive; If fpS_ISDIR(Info.st_mode) then @@ -596,10 +596,10 @@ begin Result:=Result or faSysFile; If fpS_ISLNK(Info.st_mode) Then begin - Result:=Result or faSymLink; - // Windows reports if the link points to a directory. - if (fpstat(FN,LinkInfo)>=0) and fpS_ISDIR(LinkInfo.st_mode) then - Result := Result or faDirectory; + Result:=Result or faSymLink; + // Windows reports if the link points to a directory. + if (fpstat(pchar(FN),LinkInfo)>=0) and fpS_ISDIR(LinkInfo.st_mode) then + Result := Result or faDirectory; end; end; @@ -857,58 +857,67 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; - -Var Info : Stat; +Function FileGetAttr (Const FileName : RawByteString) : Longint; +Var + SystemFileName: RawByteString; + Info : Stat; res : Integer; begin - res:=FpLStat (pointer(FileName),Info); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + res:=FpLStat(pointer(SystemFileName),Info); if res<0 then - res:=FpStat (pointer(FileName),Info); + res:=FpStat(pointer(SystemFileName),Info); if res<0 then Result:=-1 Else - Result:=LinuxToWinAttr(Pchar(FileName),Info); + Result:=LinuxToWinAttr(SystemFileName,Info); end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; - +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; begin Result:=-1; end; -Function DeleteFile (Const FileName : String) : Boolean; - +Function DeleteFile (Const FileName : RawByteString) : Boolean; +var + SystemFileName: RawByteString; begin - Result:=fpUnLink (pointer(FileName))>=0; + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + Result:=fpUnLink (pchar(SystemFileName))>=0; end; -Function RenameFile (Const OldName, NewName : String) : Boolean; - +Function RenameFile (Const OldName, NewName : RawByteString) : Boolean; +var + SystemOldName, SystemNewName: RawByteString; begin - RenameFile:=BaseUnix.FpRename(pointer(OldNAme),pointer(NewName))>=0; + SystemOldName:=ToSingleByteFileSystemEncodedFileName(OldName); + SystemNewName:=ToSingleByteFileSystemEncodedFileName(NewName); + RenameFile:=BaseUnix.FpRename(pointer(SystemOldNAme),pointer(SystemNewName))>=0; end; -Function FileIsReadOnly(const FileName: String): Boolean; +Function FileIsReadOnly(const FileName: RawByteString): Boolean; +var + SystemFileName: RawByteString; begin - Result := fpAccess(PChar(pointer(FileName)),W_OK)<>0; + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + Result:=fpAccess(PChar(SystemFileName),W_OK)<>0; end; -Function FileSetDate (Const FileName : String;Age : Longint) : Longint; - +Function FileSetDate (Const FileName : RawByteString; Age : Longint) : Longint; var + SystemFileName: RawByteString; t: TUTimBuf; - begin - Result := 0; - t.actime := Age; - t.modtime := Age; - if fputime(PChar(pointer(FileName)), @t) = -1 then - Result := fpgeterrno; + SystemFileName:=ToSingleByteFileSystemEncodedFileName(FileName); + Result:=0; + t.actime:= Age; + t.modtime:=Age; + if fputime(PChar(SystemFileName), @t) = -1 then + Result:=fpgeterrno; end; {**************************************************************************** diff --git a/rtl/watcom/sysutils.pp b/rtl/watcom/sysutils.pp index 975204f5a4..006770961e 100644 --- a/rtl/watcom/sysutils.pp +++ b/rtl/watcom/sysutils.pp @@ -288,10 +288,11 @@ begin end; -function FileExists (const FileName: string): boolean; +function FileExists (const FileName: RawByteString): boolean; var L: longint; begin + { no need to convert to DefaultFileSystemEncoding, FileGetAttr will do that } if FileName = '' then Result := false else @@ -303,10 +304,11 @@ begin end; -function DirectoryExists (const Directory: string): boolean; +function DirectoryExists (const Directory: RawByteString): boolean; var L: longint; begin + { no need to convert to DefaultFileSystemEncoding, FileGetAttr will do that } if Directory = '' then Result := false else @@ -422,11 +424,13 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : RawByteString) : Longint; var Regs: registers; + SystemFileName: RawByteString; begin - StringToTB(FileName); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); + StringToTB(SystemFileName); Regs.Edx := tb_offset; Regs.Ds := tb_segment; if LFNSupport then @@ -444,11 +448,13 @@ begin end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : RawByteString; Attr: longint) : Longint; var Regs: registers; + SystemFileName: RawByteString; begin - StringToTB(FileName); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); + StringToTB(SystemFileName); Regs.Edx := tb_offset; Regs.Ds := tb_segment; if LFNSupport then @@ -467,11 +473,13 @@ begin end; -Function DeleteFile (Const FileName : String) : Boolean; +Function DeleteFile (Const FileName : RawByteString) : Boolean; var Regs: registers; + SystemFileName: RawByteString; begin - StringToTB(FileName); + SystemFileName:=ToSingleByteFileSystemEncodedFileName(Filename); + StringToTB(SystemFileName); Regs.Edx := tb_offset; Regs.Ds := tb_segment; if LFNSupport then @@ -485,14 +493,17 @@ begin end; -Function RenameFile (Const OldName, NewName : String) : Boolean; +Function RenameFile (Const OldName, NewName : RawByteString) : Boolean; var Regs: registers; + OldSystemFileName, NewSystemFileName: RawByteString; begin - StringToTB(OldName + #0 + NewName); + OldSystemFileName:=ToSingleByteFileSystemEncodedFileName(OldName); + NewSystemFileName:=ToSingleByteFileSystemEncodedFileName(NewFile); + StringToTB(OldSystemFileName + #0 + NewSystemFileName); Regs.Edx := tb_offset; Regs.Ds := tb_segment; - Regs.Edi := tb_offset + Length(OldName) + 1; + Regs.Edi := tb_offset + Length(OldSystemFileName) + 1; Regs.Es := tb_segment; if LFNSupport then Regs.Eax := $7156 diff --git a/rtl/wii/sysutils.pp b/rtl/wii/sysutils.pp index 5dcbdbc57d..6cda429861 100644 --- a/rtl/wii/sysutils.pp +++ b/rtl/wii/sysutils.pp @@ -114,13 +114,13 @@ begin end; -function DeleteFile(const FileName: string) : Boolean; +function DeleteFile(const FileName: RawByteString) : Boolean; begin result := false; end; -function RenameFile(const OldName, NewName: string): Boolean; +function RenameFile(const OldName, NewName: RawByteString): Boolean; begin result := false; end; @@ -135,7 +135,7 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; +Function FileExists (Const FileName : RawByteString) : Boolean; Begin result := false; end; diff --git a/rtl/win/sysutils.pp b/rtl/win/sysutils.pp index 7ca5b1f65a..0d1754914a 100644 --- a/rtl/win/sysutils.pp +++ b/rtl/win/sysutils.pp @@ -359,11 +359,12 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; +Function FileExists (Const FileName : UnicodeString) : Boolean; var Attr:Dword; begin - Attr:=GetFileAttributes(PChar(FileName)); + + Attr:=GetFileAttributesW(PWideChar(FileName)); if Attr <> $ffffffff then Result:= (Attr and FILE_ATTRIBUTE_DIRECTORY) = 0 else @@ -371,11 +372,11 @@ begin end; -Function DirectoryExists (Const Directory : String) : Boolean; +Function DirectoryExists (Const Directory : UnicodeString) : Boolean; var Attr:Dword; begin - Attr:=GetFileAttributes(PChar(Directory)); + Attr:=GetFileAttributesW(PWideChar(Directory)); if Attr <> $ffffffff then Result:= (Attr and FILE_ATTRIBUTE_DIRECTORY) > 0 else @@ -460,30 +461,30 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : UnicodeString) : Longint; begin - Result:=Longint(GetFileAttributes(PChar(FileName))); + Result:=Longint(GetFileAttributesW(PWideChar(FileName))); end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; +Function FileSetAttr (Const Filename : UnicodeString; Attr: longint) : Longint; begin - if SetFileAttributes(PChar(FileName), Attr) then + if SetFileAttributesW(PWideChar(FileName), Attr) then Result:=0 else Result := GetLastError; end; -Function DeleteFile (Const FileName : String) : Boolean; +Function DeleteFile (Const FileName : UnicodeString) : Boolean; begin - Result:=Windows.DeleteFile(Pchar(FileName)); + Result:=Windows.DeleteFileW(PWidechar(FileName)); end; -Function RenameFile (Const OldName, NewName : String) : Boolean; +Function RenameFile (Const OldName, NewName : UnicodeString) : Boolean; begin - Result := MoveFile(PChar(OldName), PChar(NewName)); + Result := MoveFileW(PWideChar(OldName), PWideChar(NewName)); end; diff --git a/rtl/wince/sysutils.pp b/rtl/wince/sysutils.pp index fd9ad5ca93..ffd02a202a 100644 --- a/rtl/wince/sysutils.pp +++ b/rtl/wince/sysutils.pp @@ -264,7 +264,7 @@ begin end; -Function FileExists (Const FileName : String) : Boolean; +Function FileExists (Const FileName : UnicodeString) : Boolean; var Attr:Dword; begin @@ -276,7 +276,7 @@ begin end; -Function DirectoryExists (Const Directory : String) : Boolean; +Function DirectoryExists (Const Directory : UnicodeString) : Boolean; var Attr:Dword; begin @@ -368,7 +368,7 @@ begin end; -Function FileGetAttr (Const FileName : String) : Longint; +Function FileGetAttr (Const FileName : UnicodeString) : Longint; var fn: PWideChar; begin @@ -378,38 +378,24 @@ begin end; -Function FileSetAttr (Const Filename : String; Attr: longint) : Longint; -var - fn: PWideChar; +Function FileSetAttr (Const Filename : UnicodeString; Attr: longint) : Longint; begin - fn:=StringToPWideChar(FileName); - if not SetFileAttributes(fn, Attr) then + if not SetFileAttributes(PWideChar(FileName), Attr) then Result := GetLastError else Result:=0; - FreeMem(fn); end; -Function DeleteFile (Const FileName : String) : Boolean; -var - fn: PWideChar; +Function DeleteFile (Const FileName : UnicodeString) : Boolean; begin - fn:=StringToPWideChar(FileName); - DeleteFile:=Windows.DeleteFile(fn); - FreeMem(fn); + DeleteFile:=Windows.DeleteFile(PWideChar(FileName)); end; -Function RenameFile (Const OldName, NewName : String) : Boolean; -var - fold, fnew: PWideChar; +Function RenameFile (Const OldName, NewName : UnicodeString) : Boolean; begin - fold:=StringToPWideChar(OldName); - fnew:=StringToPWideChar(NewName); - Result := MoveFile(fold, fnew); - FreeMem(fnew); - FreeMem(fold); + Result := MoveFile(PWideChar(OldName), PWideChar(NewName)); end; |