diff options
author | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2013-08-19 22:04:25 +0000 |
---|---|---|
committer | jonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2013-08-19 22:04:25 +0000 |
commit | c414f428ef26e4ece2bf5f12de114b2657162447 (patch) | |
tree | 395b288502b96a1304bb678f37c2c99caff67d58 /rtl/watcom | |
parent | 641ecbe408fb0fb32c25d0426cc958cfa46ad061 (diff) | |
download | fpc-c414f428ef26e4ece2bf5f12de114b2657162447.tar.gz |
* rawbytestring/unicodestring versions of findfirst/findnext/findclose
o these routines are now generic wrappers in filutil.inc, and call
the platform-dependent internalfindfirst/next/close routines
o on unix, the fnmatch routine got proper support for UTF-8 matching
(e.g., it won't match a partial UTF-8 code point to a "?" wildcard)
o for NativeNT, a similar (untested) UTF-16 version has been added
+ test for the above
* rawbytestring/unicodestring versions of fileage
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/cpstrrtl@25302 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/watcom')
-rw-r--r-- | rtl/watcom/sysutils.pp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/rtl/watcom/sysutils.pp b/rtl/watcom/sysutils.pp index 20c7e8e1f5..d5f8b48bf8 100644 --- a/rtl/watcom/sysutils.pp +++ b/rtl/watcom/sysutils.pp @@ -277,7 +277,7 @@ begin end; -Function FileAge (Const FileName : String): Longint; +Function FileAge (Const FileName : RawByteString): Longint; var Handle: longint; begin Handle := FileOpen(FileName, 0); @@ -335,7 +335,7 @@ begin end; -Function FindFirst (Const Path : String; Attr : Longint; out Rslt : TSearchRec) : Longint; +Function InternalFindFirst (Const Path : RawByteString; Attr : Longint; out Rslt : TAbstractSearchRec; var Name: RawByteString) : Longint; Var Sr : PSearchrec; @@ -343,6 +343,7 @@ begin //!! Sr := New(PSearchRec); getmem(sr,sizeof(searchrec)); Rslt.FindHandle := longint(Sr); + { FIXME: Dos version has shortstring interface -> discards encoding } DOS.FindFirst(Path, Attr, Sr^); result := -DosError; if result = 0 then @@ -351,12 +352,13 @@ begin Rslt.Size := Sr^.Size; Rslt.Attr := Sr^.Attr; Rslt.ExcludeAttr := 0; - Rslt.Name := Sr^.Name; + Name := Sr^.Name; + SetCodePage(Name,DefaultFileSystemCodePage,False); end ; end; -Function FindNext (Var Rslt : TSearchRec) : Longint; +Function InternalFindNext (var Rslt : TAbstractSearchRec; var Name : RawByteString) : Longint; var Sr: PSearchRec; begin @@ -371,17 +373,18 @@ begin Rslt.Size := Sr^.Size; Rslt.Attr := Sr^.Attr; Rslt.ExcludeAttr := 0; - Rslt.Name := Sr^.Name; + Name := Sr^.Name; + SetCodePage(Name,DefaultFileSystemCodePage,False); end; end; end; -Procedure FindClose (Var F : TSearchrec); +Procedure InternalFindClose(var Handle: Pointer); var Sr: PSearchRec; begin - Sr := PSearchRec(F.FindHandle); + Sr := PSearchRec(Handle); if Sr <> nil then begin //!! Dispose(Sr); @@ -389,7 +392,7 @@ begin DOS.FindClose(SR^); freemem(sr,sizeof(searchrec)); end; - F.FindHandle := 0; + Handle := 0; end; |