浏览代码

* Fixed file names handling.

git-svn-id: branches/unicodertl@12133 -
yury 17 年之前
父节点
当前提交
b39ccf1680
共有 6 个文件被更改,包括 27 次插入38 次删除
  1. 7 13
      rtl/inc/file.inc
  2. 2 2
      rtl/inc/system.inc
  3. 5 4
      rtl/inc/systemh.inc
  4. 6 12
      rtl/inc/text.inc
  5. 1 1
      rtl/inc/textrec.inc
  6. 6 6
      rtl/inc/typefile.inc

+ 7 - 13
rtl/inc/file.inc

@@ -26,7 +26,7 @@ Begin
   FillChar(f,SizeOf(FileRec),0);
   FileRec(f).Handle:=UnusedHandle;
   FileRec(f).mode:=fmClosed;
-  Move(Name[1],FileRec(f).Name,Length(Name));
+  Move(Name[1],FileRec(f).Name,Length(Name)*SizeOf(RtlChar));
 End;
 
 
@@ -35,7 +35,7 @@ Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:File;p:PRtlChar);
   Assign Name to file f so it can be used with the file routines
 }
 begin
-  Assign(f,p);
+  Assign(f,RtlString(p));
 end;
 
 
@@ -44,7 +44,7 @@ Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:File;c:RtlChar);
   Assign Name to file f so it can be used with the file routines
 }
 begin
-  Assign(f,c);
+  Assign(f,RtlString(c));
 end;
 
 
@@ -400,7 +400,7 @@ Begin
      If InOutRes = 0 then
       begin
         len:=StrLen(p)*SizeOf(RtlChar);
-        if len > SizeOf(FileRec(f).Name) - SizeOf(RtlChar) then
+        if len >= SizeOf(FileRec(f).Name) then
           len:=SizeOf(FileRec(f).Name) - SizeOf(RtlChar);
         Move(p^,FileRec(f).Name,len);
         FileRec(f).Name[len]:=#0;
@@ -410,25 +410,19 @@ End;
 
 
 Procedure Rename(var f : File;const s : RtlString);[IOCheck];
-var
-  p : array[0..255] Of Char;
 Begin
-  If InOutRes <> 0 then
-   exit;
-  Move(s[1],p,Length(s));
-  p[Length(s)]:=#0;
-  Rename(f,Pchar(@p));
+  Rename(f,PRtlChar(s));
 End;
 
 
 Procedure Rename(var f : File;c : RtlChar);[IOCheck];
 var
-  p : array[0..1] Of Char;
+  p : array[0..1] Of RtlChar;
 Begin
   If InOutRes <> 0 then
    exit;
   p[0]:=c;
   p[1]:=#0;
-  Rename(f,Pchar(@p));
+  Rename(f,@p);
 End;
 

+ 2 - 2
rtl/inc/system.inc

@@ -805,7 +805,7 @@ Procedure InternalExit;
 var
   current_exit : Procedure;
   pstdout : ^Text;
-{$if defined(MSWINDOWS) or defined(OS2)}
+{$if defined(OS2)}
   i : longint;
 {$endif}
 Begin
@@ -845,7 +845,7 @@ Begin
     Flush(StdErr);
 {$endif FPC_HAS_FEATURE_CONSOLEIO}
 
-{$if defined(MSWINDOWS) or defined(OS2)}
+{$if defined(OS2)}
   { finally release the heap if possible, especially
     important for DLLs }
   for i:=0 to argc do

+ 5 - 4
rtl/inc/systemh.inc

@@ -367,6 +367,7 @@ Type
   RtlChar             = AnsiChar;
 {$endif FPC_RTLSTRING_UTF16}
   PRtlChar            = ^RtlChar;
+  PPRtlChar           = ^PRtlChar;
 
   { Needed for fpc_get_output }
   PText               = ^Text;
@@ -838,9 +839,9 @@ Procedure Truncate (var F:File);
 ****************************************************************************}
 
 {$ifdef FPC_HAS_FEATURE_FILEIO}
-Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;const Name:string);
-Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;p:pchar);
-Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;c:char);
+Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;const Name:RtlString);
+Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;p:PRtlChar);
+Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;c:RtlChar);
 Procedure Reset(var f : TypedFile);   [INTERNPROC: fpc_in_Reset_TypedFile];
 Procedure Rewrite(var f : TypedFile); [INTERNPROC: fpc_in_Rewrite_TypedFile];
 {$endif FPC_HAS_FEATURE_FILEIO}
@@ -975,7 +976,7 @@ Const
 Procedure Error(RunTimeError : TRunTimeError);
 {$ifdef FPC_HAS_FEATURE_COMMANDARGS}
 Function  Paramcount:Longint;
-Function  ParamStr(l:Longint):string;
+Function  ParamStr(l:Longint):RtlString;
 {$endif FPC_HAS_FEATURE_COMMANDARGS}
 
 {$ifdef FPC_HAS_FEATURE_CONSOLEIO}

+ 6 - 12
rtl/inc/text.inc

@@ -89,13 +89,13 @@ Begin
     tlbsCRLF: TextRec(t).LineEnd := #13#10;
     tlbsCR: TextRec(t).LineEnd := #13;
   End;
-  Move(s[1],TextRec(t).Name,Length(s));
+  Move(s[1],TextRec(t).Name,Length(s)*SizeOf(RtlChar));
 End;
 
 
 Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} t:Text;p:PRtlChar);
 begin
-  Assign(t,p);
+  Assign(t,RtlString(p));
 end;
 
 
@@ -215,7 +215,7 @@ Begin
      If InOutRes = 0 then
       begin
         len:=StrLen(p)*SizeOf(RtlChar);
-        if len > SizeOf(TextRec(t).Name) - SizeOf(RtlChar) then
+        if len >= SizeOf(TextRec(t).Name) then
           len:=SizeOf(TextRec(t).Name) - SizeOf(RtlChar);
         Move(p^,TextRec(t).Name,len);
         TextRec(t).Name[len]:=#0;
@@ -225,26 +225,20 @@ End;
 
 
 Procedure Rename(var t : Text;const s : RtlString);[IOCheck];
-var
-  p : array[0..255] Of Char;
 Begin
-  If InOutRes <> 0 then
-   exit;
-  Move(s[1],p,Length(s));
-  p[Length(s)]:=#0;
-  Rename(t,Pchar(@p));
+  Rename(t,PRtlChar(s));
 End;
 
 
 Procedure Rename(var t : Text;c : RtlChar);[IOCheck];
 var
-  p : array[0..1] Of Char;
+  p : array[0..1] Of RtlChar;
 Begin
   If InOutRes <> 0 then
    exit;
   p[0]:=c;
   p[1]:=#0;
-  Rename(t,Pchar(@p));
+  Rename(t,@p);
 End;
 
 

+ 1 - 1
rtl/inc/textrec.inc

@@ -25,7 +25,7 @@ const
   TextRecBufSize    = 256;
 type
   TLineEndStr = string [3];
-  TextBuf = array[0..(TextRecBufSize div SizeOf(RtlChar))-1] of RtlChar;
+  TextBuf = array[0..TextRecBufSize-1] of AnsiChar;
   TextRec = Packed Record
     Handle    : THandle;
     Mode      : longint;

+ 6 - 6
rtl/inc/typefile.inc

@@ -15,7 +15,7 @@
                     subroutines for typed file handling
 ****************************************************************************}
 
-Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;const Name:string);
+Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;const Name:RtlString);
 {
   Assign Name to file f so it can be used with the file routines
 }
@@ -23,25 +23,25 @@ Begin
   FillChar(f,SizeOF(FileRec),0);
   FileRec(f).Handle:=UnusedHandle;
   FileRec(f).mode:=fmClosed;
-  Move(Name[1],FileRec(f).Name,Length(Name));
+  Move(Name[1],FileRec(f).Name,Length(Name)*SizeOf(RtlChar));
 End;
 
 
-Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;p:pchar);
+Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;p:PRtlChar);
 {
   Assign Name to file f so it can be used with the file routines
 }
 begin
-  Assign(f,StrPas(p));
+  Assign(f,RtlString(p));
 end;
 
 
-Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;c:char);
+Procedure Assign({$ifdef PARAOUTFILE}out{$else}var{$endif} f:TypedFile;c:RtlChar);
 {
   Assign Name to file f so it can be used with the file routines
 }
 begin
-  Assign(f,string(c));
+  Assign(f,RtlString(c));
 end;