summaryrefslogtreecommitdiff
path: root/rtl/watcom
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-08-19 22:04:25 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-08-19 22:04:25 +0000
commitc414f428ef26e4ece2bf5f12de114b2657162447 (patch)
tree395b288502b96a1304bb678f37c2c99caff67d58 /rtl/watcom
parent641ecbe408fb0fb32c25d0426cc958cfa46ad061 (diff)
downloadfpc-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.pp19
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;