Browse Source

--- Merging r16506 into '.':
U packages/regexpr/src/regex.pp
U packages/regexpr/src/regexpr.pp
U packages/regexpr/src/old/regexpr.pp
U packages/regexpr/examples/testreg1.pp
--- Merging r16534 into '.':
G packages/regexpr/src/regex.pp
--- Merging r16536 into '.':
G packages/regexpr/src/regex.pp
--- Merging r16537 into '.':
G packages/regexpr/src/regex.pp
--- Merging r16540 into '.':
U rtl/win/sysutils.pp
--- Merging r16549 into '.':
G rtl/win/sysutils.pp
--- Merging r16556 into '.':
U packages/opengl/examples/Makefile.fpc
C packages/opengl/examples/Makefile
--- Merging r16558 into '.':
G rtl/win/sysutils.pp
--- Merging r16559 into '.':
U packages/fcl-base/examples/tstelcmd.pp
--- Merging r16571 into '.':
U rtl/go32v2/sysutils.pp
--- Merging r16577 into '.':
U packages/fcl-db/src/sqldb/interbase/ibconnection.pp
--- Merging r16578 into '.':
U packages/fcl-base/src/fptemplate.pp
--- Merging r16580 into '.':
U packages/fcl-base/src/rtfdata.inc
--- Merging r16586 into '.':
U packages/ibase/src/ibase60.inc
U packages/ibase/src/ibase40.pp
--- Merging r16587 into '.':
U ide/fpdesk.pas
--- Merging r16592 into '.':
U packages/fcl-web/src/base/fphttp.pp
--- Merging r16604 into '.':
U ide/fpdebug.pas
--- Merging r16606 into '.':
U packages/fv/src/menus.pas
--- Merging r16613 into '.':
U ide/fphelp.pas
--- Merging r16621 into '.':
U ide/woahelp.pas
U ide/whelp.pas
--- Merging r16643 into '.':
U packages/winunits-base/src/activex.pp
Summary of conflicts:
Text conflicts: 1

# revisions: 16506,16534,16536,16537,16540,16549,16556,16558,16559,16571,16577,16578,16580,16586,16587,16592,16604,16606,16613,16621,16643
------------------------------------------------------------------------
r16506 | marco | 2010-12-05 12:10:06 +0100 (Sun, 05 Dec 2010) | 1 line
Changed paths:
M /trunk/packages/regexpr/examples/testreg1.pp
M /trunk/packages/regexpr/src/old/regexpr.pp
M /trunk/packages/regexpr/src/regex.pp
M /trunk/packages/regexpr/src/regexpr.pp

* patch for regex. Fixes exception in rcclear, some casing issues and matching of \w. Also a fix for currentpos in the old version. Mantis 15466
------------------------------------------------------------------------
------------------------------------------------------------------------
r16534 | joost | 2010-12-10 16:27:32 +0100 (Fri, 10 Dec 2010) | 4 lines
Changed paths:
M /trunk/packages/regexpr/src/regex.pp

* Refactored, replaced case for if, nested if for and, removed needless
comparision
* Removed a Fillchar to clear the statetable, I don't see it's use

------------------------------------------------------------------------
------------------------------------------------------------------------
r16536 | joost | 2010-12-10 16:32:34 +0100 (Fri, 10 Dec 2010) | 1 line
Changed paths:
M /trunk/packages/regexpr/src/regex.pp

* Avoid possible AV when the string-index is larger then the string-length
------------------------------------------------------------------------
------------------------------------------------------------------------
r16537 | joost | 2010-12-10 16:40:33 +0100 (Fri, 10 Dec 2010) | 2 lines
Changed paths:
M /trunk/packages/regexpr/src/regex.pp

* Fixed detection of regular strings, so that a normal search is performed
* Strings with a braces, parentheses and pipe-symbols are always handled as regex-patterns
------------------------------------------------------------------------
------------------------------------------------------------------------
r16540 | sergei | 2010-12-11 05:47:33 +0100 (Sat, 11 Dec 2010) | 2 lines
Changed paths:
M /trunk/rtl/win/sysutils.pp

* win/sysutils.pp: Use GetModuleHandle for dynamic loading of kernel32.dll instead of LoadLibrary, this is possible because kernel32 is statically linked by RTL and is therefore always loaded with application. Also makes FreeLibrary at finalization unnecessary.
- Removed checks for Windows version, they are redundant. GetProcAddress simply returns nil if the function is not present.
------------------------------------------------------------------------
------------------------------------------------------------------------
r16549 | sergei | 2010-12-11 11:05:10 +0100 (Sat, 11 Dec 2010) | 3 lines
Changed paths:
M /trunk/rtl/win/sysutils.pp

* win/sysutils.pp: fix/clean up loading dll for SHGetFolderPath.
* Don't attempt to load shell32.dll, since every system with shell32.dll that exports SHGetFolderPath also has shfolder.dll present.
* Load shfolder.dll using a full path in order to prevent loading of malicious code by placing a same-named dll into program directory (Mantis #18185).
------------------------------------------------------------------------
------------------------------------------------------------------------
r16556 | jonas | 2010-12-11 23:19:59 +0100 (Sat, 11 Dec 2010) | 2 lines
Changed paths:
M /trunk/packages/opengl/examples/Makefile
M /trunk/packages/opengl/examples/Makefile.fpc

* also compile freeglutdemo (mantis #18108)

------------------------------------------------------------------------
------------------------------------------------------------------------
r16558 | sergei | 2010-12-12 16:07:38 +0100 (Sun, 12 Dec 2010) | 1 line
Changed paths:
M /trunk/rtl/win/sysutils.pp

* win/sysutils.pp, FileOpen and FileCreate, removed manual zero-termination of strings. This unit compiles in {$h+} state, and AnsiString zero-termination is handled automatically these days.
------------------------------------------------------------------------
------------------------------------------------------------------------
r16559 | marco | 2010-12-12 23:11:08 +0100 (Sun, 12 Dec 2010) | 2 lines
Changed paths:
M /trunk/packages/fcl-base/examples/tstelcmd.pp

* fix for bug #18196, moving teventype broke examples.

------------------------------------------------------------------------
------------------------------------------------------------------------
r16571 | pierre | 2010-12-16 14:25:20 +0100 (Thu, 16 Dec 2010) | 1 line
Changed paths:
M /trunk/rtl/go32v2/sysutils.pp

* Fix tw1041 test failure
------------------------------------------------------------------------
------------------------------------------------------------------------
r16577 | michael | 2010-12-17 12:15:13 +0100 (Fri, 17 Dec 2010) | 1 line
Changed paths:
M /trunk/packages/fcl-db/src/sqldb/interbase/ibconnection.pp

Fix for 18239
------------------------------------------------------------------------
------------------------------------------------------------------------
r16578 | michael | 2010-12-17 14:41:10 +0100 (Fri, 17 Dec 2010) | 1 line
Changed paths:
M /trunk/packages/fcl-base/src/fptemplate.pp

* Published all properties in template
------------------------------------------------------------------------
------------------------------------------------------------------------
r16580 | marco | 2010-12-17 18:54:19 +0100 (Fri, 17 Dec 2010) | 2 lines
Changed paths:
M /trunk/packages/fcl-base/src/rtfdata.inc

* patch from Andrew adding \uxxxx escapes and superscript, mantis 18245

------------------------------------------------------------------------
------------------------------------------------------------------------
r16586 | marco | 2010-12-18 14:36:36 +0100 (Sat, 18 Dec 2010) | 2 lines
Changed paths:
M /trunk/packages/ibase/src/ibase40.pp
M /trunk/packages/ibase/src/ibase60.inc

* fix from mantis 17360, ISC_Status is 64-bit. (Lp64 vs LLp64 problem)

------------------------------------------------------------------------
------------------------------------------------------------------------
r16587 | marco | 2010-12-18 19:03:31 +0100 (Sat, 18 Dec 2010) | 1 line
Changed paths:
M /trunk/ide/fpdesk.pas

* Update syntaxhighlight settings on desktop load. Partial fix for 5813.
------------------------------------------------------------------------
------------------------------------------------------------------------
r16592 | marco | 2010-12-19 14:22:46 +0100 (Sun, 19 Dec 2010) | 2 lines
Changed paths:
M /trunk/packages/fcl-web/src/base/fphttp.pp

* fix for mantis 15820, override getnamepath as suggested by Paul.

------------------------------------------------------------------------
------------------------------------------------------------------------
r16604 | marco | 2010-12-21 09:15:31 +0100 (Tue, 21 Dec 2010) | 1 line
Changed paths:
M /trunk/ide/fpdebug.pas

* fix one of two issues in mantis 6326, double click on watch entry invokes edit watch
------------------------------------------------------------------------
------------------------------------------------------------------------
r16606 | marco | 2010-12-21 20:30:12 +0100 (Tue, 21 Dec 2010) | 1 line
Changed paths:
M /trunk/packages/fv/src/menus.pas

* fix | separator char. Bug 6262D
------------------------------------------------------------------------
------------------------------------------------------------------------
r16613 | marco | 2010-12-22 19:39:13 +0100 (Wed, 22 Dec 2010) | 1 line
Changed paths:
M /trunk/ide/fphelp.pas

* Modified hint for search/replace again to show what will be done. bug #0010715
------------------------------------------------------------------------
------------------------------------------------------------------------
r16621 | marco | 2010-12-23 21:38:56 +0100 (Thu, 23 Dec 2010) | 1 line
Changed paths:
M /trunk/ide/whelp.pas
M /trunk/ide/woahelp.pas

* cleaning out use of old endianess routines (these are centralized in system since 2.0.x days)
------------------------------------------------------------------------
------------------------------------------------------------------------
r16643 | marco | 2010-12-26 17:52:10 +0100 (Sun, 26 Dec 2010) | 2 lines
Changed paths:
M /trunk/packages/winunits-base/src/activex.pp

* stdcall added to ipropertysetstorage, mantis 18315

------------------------------------------------------------------------

git-svn-id: branches/fixes_2_4@16655 -

marco 14 years ago
parent
commit
b58539a409

+ 7 - 1
ide/fpdebug.pas

@@ -684,7 +684,7 @@ begin
     end;
 end;
 
-    
+
 procedure TDebugController.SetTBreak(tbreakstring : string);
 begin
   Command('tbreak '+tbreakstring);
@@ -3201,6 +3201,12 @@ procedure   TWatchesListBox.HandleEvent(var Event: TEvent);
 var DontClear: boolean;
 begin
   case Event.What of
+    evMouseDown : begin
+                   if Event.Double then
+                      Message(@Self,evCommand,cmEdit,nil)
+                   else
+                     ClearEvent(Event);
+                  end;
     evKeyDown :
       begin
         DontClear:=false;

+ 15 - 2
ide/fpdesk.pas

@@ -47,7 +47,7 @@ uses Dos,
      Video,
      Views,App,HistList,BrowCol,
      WUtils,WResourc,WViews,WEditor,
-     fpdebug,
+     fpdebug, wcedit,
 {$ifdef Unix}
      FPKeys,
 {$endif Unix}
@@ -352,6 +352,14 @@ begin
 {$endif NODEBUG}
 end;
 
+
+function DeskUseSyntaxHighlight(Editor: PFileEditor): boolean;
+var b : boolean;
+begin
+  b:= (*(Editor^.IsFlagSet(efSyntaxHighlight)) and *) ((Editor^.FileName='') or MatchesFileList(NameAndExtOf(Editor^.FileName),HighlightExts));
+  DeskUseSyntaxHighlight:=b;
+end;
+
 function ReadOpenWindows(F: PResourceFile): boolean;
 var S: PMemoryStream;
     OK: boolean;
@@ -393,7 +401,12 @@ begin
           end
         else
         begin
-          GetData(L,sizeof(L)); SW^.Editor^.SetFlags(L);
+          GetData(L,sizeof(L));
+          If DeskUseSyntaxHighlight(SW^.Editor) Then
+            L:=L or efSyntaxHighlight
+          else
+            L:=L and not efSyntaxHighlight;
+          SW^.Editor^.SetFlags(L);
           GetData(TP,sizeof(TP)); GetData(TP2,sizeof(TP2));
           SW^.Editor^.SetSelection(TP,TP2);
           GetData(TP,sizeof(TP)); SW^.Editor^.SetCurPtr(TP.X,TP.Y);

+ 8 - 2
ide/fphelp.pas

@@ -124,7 +124,8 @@ const
       hint_searchmenu        = 'Text and symbols search commands';
       hint_searchfind        = 'Search for text';
       hint_searchreplace     = 'Search for text and replace it with new text';
-      hint_searchagain       = 'Repeat the last Search or Replace command';
+      hint_replaceagain      = 'Repeat the last Replace command (%s with %s)';
+      hint_searchagain       = 'Repeat the last Search  command (%s)';
       hint_gotoline          = 'Move the cursor to a specified line number';
       hint_objects           = 'Open a browser displaying all objects in the program';
       hint_modules           = 'Open a browser displaying all modules of the program';
@@ -286,7 +287,12 @@ begin
     hcSearchMenu    : S:=hint_searchmenu;
     hcFind          : S:=hint_searchfind;
     hcReplace       : S:=hint_searchreplace;
-    hcSearchAgain   : S:=hint_searchagain;
+    hcSearchAgain   : begin
+                        if (FindFlags and ffDoReplace)<>0 then
+                          s:=formatstrstr2(hint_replaceagain,findstr,WEditor.replacestr)
+                        else
+                          s:=formatstrstr(hint_searchagain,findstr);
+                      end;
     hcGotoLine      : S:=hint_gotoline;
     hcObjects       : S:=hint_objects;
     hcModules       : S:=hint_modules;

+ 1 - 33
ide/whelp.pas

@@ -176,12 +176,6 @@ function  GetHelpFileTypeCount: integer;
 procedure GetHelpFileType(Index: sw_integer; var HT: THelpFileType);
 procedure DoneHelpFilesTypes;
 
-{$ifdef ENDIAN_BIG}
-Procedure SwapLong(var x : longint);
-Procedure SwapWord(var x : word);
-{$endif ENDIAN_BIG}
-
-
 implementation
 
 uses
@@ -212,32 +206,6 @@ const
   HelpFileTypes : PHelpFileTypeCollection = nil;
 
 
-{$ifdef ENDIAN_BIG}
-Procedure SwapLong(var x : longint);
-var
-  y : word;
-  z : word;
-Begin
-  y := (x shr 16) and $FFFF;
-  y := ((y shl 8) and $FFFF) or ((y shr 8) and $ff);
-  z := x and $FFFF;
-  z := ((z shl 8) and $FFFF) or ((z shr 8) and $ff);
-  x := (longint(z) shl 16) or longint(y);
-End;
-
-
-Procedure SwapWord(var x : word);
-var
-  z : byte;
-Begin
-  z := (x shr 8) and $ff;
-  x := x and $ff;
-  x := (x shl 8);
-  x := x or z;
-End;
-{$endif ENDIAN_BIG}
-
-
 function NewHelpFileType(AOpenProc: THelpFileOpenProc): PHelpFileType;
 var P: PHelpFileType;
 begin
@@ -386,7 +354,7 @@ begin
     P^.Links:=nil;
     if P^.Param<>nil then DisposeStr(P^.Param); P^.Param:=nil;
     if Assigned(P^.ExtData) then
-      FreeMem(P^.ExtData{$ifndef FPC},P^.ExtDataSize{$endif});
+      FreeMem(P^.ExtData);
     if Assigned(P^.NamedMarks) then Dispose(P^.NamedMarks, Done); P^.NamedMarks:=nil;
     Dispose(P);
   end;

+ 17 - 35
ide/woahelp.pas

@@ -1,5 +1,5 @@
 {
-    This file is part of the Free Pascal Integrated Development Environment
+    wThis file is part of the Free Pascal Integrated Development Environment
     Copyright (c) 2000 by Berczi Gabor
 
     Borland OA .HLP reader objects and routines
@@ -223,11 +223,9 @@ begin
       OK:=ReadRecord(R,true);
       OK:=OK and (R.SClass=oa_rtFileHeader) and (R.Size=SizeOf(Header));
       if OK then Move(R.Data^,Header,SizeOf(Header));
-{$ifdef ENDIAN_BIG}
-      SwapWord(Header.Options);
-      SwapWord(Header.MainIndexScreen);
-      SwapWord(Header.MaxScreenSize);
-{$endif ENDIAN_BIG}
+      Header.Options        :=LEToN(Header.Options);
+      Header.MainIndexScreen:=LEToN(Header.MainIndexScreen);
+      Header.MaxScreenSize  :=LEToN(Header.MaxScreenSize );
       DisposeRecord(R);
     end;
   end;
@@ -240,9 +238,7 @@ var OK: boolean;
     L,I: longint;
 function GetCtxPos(C: THLPContextPos): longint;
 begin
-{$ifdef ENDIAN_BIG}
-  SwapWord(C.LoW);
-{$endif ENDIAN_BIG}
+  c.LoW:=LEToN(Word(C.LoW));
   GetCtxPos:=longint(C.HiB) shl 16 + C.LoW;
 end;
 begin
@@ -250,9 +246,7 @@ begin
   if OK then
   with THLPContexts(R.Data^) do
   begin
-{$ifdef ENDIAN_BIG}
-  SwapWord(ContextCount);
-{$endif ENDIAN_BIG}
+  ContextCount:=LEToN(ContextCount);
   for I:=1 to longint(ContextCount)-1 do
   begin
     if Topics^.Count=MaxCollectionSize then Break;
@@ -289,9 +283,7 @@ begin
   if OK then
   with THLPIndexTable(R.Data^) do
   begin
-{$ifdef ENDIAN_BIG}
-  SwapWord(IndexCount);
-{$endif ENDIAN_BIG}
+  IndexCount:=LEToN(IndexCount);
   for I:=0 to IndexCount-1 do
   begin
     LenCode:=PByteArray(@Entries)^[CurPtr];
@@ -335,9 +327,7 @@ var OK: boolean;
 begin
   FillChar(R, SizeOf(R), 0);
   F^.Read(H,SizeOf(H));
-{$ifdef ENDIAN_BIG}
-  SwapWord(H.RecLength);
-{$endif ENDIAN_BIG}
+  H.RecLength:=LEToN(H.RecLength);
   OK:=F^.Status=stOK;
   if OK then
   begin
@@ -447,7 +437,7 @@ begin
                 end;
     ncRepChar : begin
                   Cnt:=2+GetNextNibble;
-                  C:=GetNextChar{$ifdef FPC}(){$endif};
+                  C:=GetNextChar();
                   for I:=1 to Cnt-1 do AddChar(C);
                 end;
   end;
@@ -516,19 +506,15 @@ begin
         TP55FormatVersion :
            with THLPKeywordRecord55(KeyWR.Data^) do
            begin
-{$ifdef ENDIAN_BIG}
-             SwapWord(UpContext);
-             SwapWord(DownContext);
-{$endif ENDIAN_BIG}
+             UpContext:=LEToN(UpContext);
+             DownContext:=LEToN(DownContext);
              T^.LinkCount:=KeywordCount;
              GetMem(T^.Links,T^.LinkSize);
              if T^.LinkCount>0 then
              for I:=0 to T^.LinkCount-1 do
              with Keywords[I] do
              begin
-{$ifdef ENDIAN_BIG}
-               SwapWord(KwContext);
-{$endif ENDIAN_BIG}
+               KwContext:=LEToN(KwContext);
                T^.Links^[I].Context:=KwContext;
                T^.Links^[I].FileID:=ID;
                Inc(LinkPosCount);
@@ -542,19 +528,15 @@ begin
       else
            with THLPKeywordRecord(KeyWR.Data^) do
            begin
-{$ifdef ENDIAN_BIG}
-             SwapWord(KeywordCount);
-             SwapWord(UpContext);
-             SwapWord(DownContext);
-{$endif ENDIAN_BIG}
+             KeywordCount:=LEToN(KeywordCount);
+             UpContext:=LEToN(UpContext);
+             DownContext:=LEToN(DownContext);
              T^.LinkCount:=KeywordCount;
              GetMem(T^.Links,T^.LinkSize);
              if KeywordCount>0 then
              for I:=0 to KeywordCount-1 do
              begin
-{$ifdef ENDIAN_BIG}
-               SwapWord(Keywords[I].KwContext);
-{$endif ENDIAN_BIG}
+               Keywords[I].KwContext:=LEToN(Keywords[I].KwContext);
                T^.Links^[I].Context:=Keywords[I].KwContext;
                T^.Links^[I].FileID:=ID;
              end;
@@ -588,7 +570,7 @@ end;
 
 procedure RegisterHelpType;
 begin
-  RegisterHelpFileType({$ifdef FPC}@{$endif}CreateProc);
+  RegisterHelpFileType(@CreateProc);
 end;
 
 END.

+ 1 - 1
packages/fcl-base/examples/tstelcmd.pp

@@ -3,7 +3,7 @@
 
 program testelcmd;
 
-uses eventlog;
+uses eventlog,sysutils;
 
 Var
   E : TEventType;

+ 8 - 2
packages/fcl-base/src/fptemplate.pp

@@ -131,8 +131,14 @@ Type
   Published
     Property FileName;
     Property Template;
-//    Property AllowTagParams;
-//    Property OnReplaceTag;
+    Property AllowTagParams;
+    Property OnReplaceTag;
+    Property StartDelimiter;
+    Property EndDelimiter;
+    Property ParamStartDelimiter;
+    Property ParamEndDelimiter;
+    Property ParamValueSeparator;
+    Property OnGetParam;
   end;
   
   ETemplateParser = Class(Exception);

+ 4 - 1
packages/fcl-base/src/rtfdata.inc

@@ -176,6 +176,7 @@ Const
                 rtfINWords              = 36;
                 rtfINChars              = 37;
                 rtfIIntID               = 38;
+                rtfUnicodeID            = 39;
 
         rtfStyleAttr    = 7;
                 rtfBasedOn              = 0;
@@ -466,7 +467,7 @@ Type
    (all valid minor numbers are >= 0).
   ---------------------------------------------------------------------}
 
-Const rtfKey : Array [0..284] of TRTFKey =
+Const rtfKey : Array [0..286] of TRTFKey =
 (
 ( rtfKMajor: RTFSPECIALCHAR; rtfKMinor : rtfCURHEADPICT; rtfKStr  : 'chpict'; rtfKhash :        0),
 ( rtfKMajor: rtfSpecialChar; rtfKMinor:         rtfCurHeadDate; rtfKstr : 'chdate'; rtfkHash : 0),
@@ -508,6 +509,7 @@ Const rtfKey : Array [0..284] of TRTFKey =
 ( rtfKMajor: rtfSpecialChar; rtfKMinor:         rtfINWords; rtfKstr : 'nofwords'; rtfkHash : 0),
 ( rtfKMajor: rtfSpecialChar; rtfKMinor:         rtfINChars; rtfKstr : 'nofchars'; rtfkHash : 0),
 ( rtfKMajor: rtfSpecialChar; rtfKMinor:         rtfIIntID; rtfKstr : 'id'; rtfkHash : 0),
+( rtfKMajor: rtfSpecialChar; rtfKMinor:         rtfUnicodeID; rtfKstr : 'u'; rtfkHash : 0),
 
 ( rtfKMajor: rtfCharAttr; rtfKMinor:    rtfPlain; rtfKstr : 'plain'; rtfkHash : 0),
 ( rtfKMajor: rtfCharAttr; rtfKMinor:    rtfBold; rtfKstr : 'b'; rtfkHash : 0),
@@ -527,6 +529,7 @@ Const rtfKey : Array [0..284] of TRTFKey =
 ( rtfKMajor: rtfCharAttr; rtfKMinor:    rtfDbUnderline; rtfKstr : 'uldb'; rtfkHash : 0),
 ( rtfKMajor: rtfCharAttr; rtfKMinor:    rtfNoUnderline; rtfKstr : 'ulnone'; rtfkHash : 0),
 ( rtfKMajor: rtfCharAttr; rtfKMinor:    rtfSuperScript; rtfKstr : 'up'; rtfkHash : 0),
+( rtfKMajor: rtfCharAttr; rtfKMinor:    rtfSuperScript; rtfKstr : 'super'; rtfkHash : 0),
 ( rtfKMajor: rtfCharAttr; rtfKMinor:    rtfSubScript; rtfKstr : 'dn'; rtfkHash : 0),
 ( rtfKMajor: rtfCharAttr; rtfKMinor:    rtfRevised; rtfKstr : 'revised'; rtfkHash : 0),
 ( rtfKMajor: rtfCharAttr; rtfKMinor:    rtfForeColor; rtfKstr : 'cf'; rtfkHash : 0),

+ 1 - 1
packages/fcl-db/src/sqldb/interbase/ibconnection.pp

@@ -905,7 +905,7 @@ begin
             case SQLDA^.SQLVar[x].SQLLen of
               2 : begin
                   Move(CurrBuff^, smalli, 2);
-                  c := longi*intpower(10,SQLDA^.SQLVar[x].SQLScale);
+                  c := smalli*intpower(10,SQLDA^.SQLVar[x].SQLScale);
                   end;
               4 : begin
                   Move(CurrBuff^, longi, 4);

+ 8 - 0
packages/fcl-web/src/base/fphttp.pp

@@ -63,6 +63,7 @@ Type
   Protected
     procedure SetContentProducer(const AValue: THTTPContentProducer);virtual;
     Function  GetDisplayName : String; override;
+    Function  GetNamePath : String; override;
     Procedure SetDisplayName(const AValue : String); override;
     Procedure HandleRequest(ARequest : TRequest; AResponse : TResponse; Var Handled : Boolean);
     Procedure DoHandleRequest(ARequest : TRequest; AResponse : TResponse; Var Handled : Boolean); virtual;
@@ -316,6 +317,13 @@ begin
   Result:=FName;
 end;
 
+Function TCustomWebAction.GetNamePath : String;
+begin
+ If (FName='') then
+    FName:=ClassName+IntToStr(self.Index);
+  Result:=FName;
+end;
+
 procedure TCustomWebAction.SetDisplayName(const AValue: String);
 begin
   Inherited;

+ 1 - 1
packages/fv/src/menus.pas

@@ -1455,7 +1455,7 @@ BEGIN
      {$IFNDEF OS_WINDOWS}
      MoveChar(B[I], #179, Byte(CNormal), 1);          { '|' char to buffer }
      {$ELSE}
-     MoveChar(B[I], #166, Byte(CNormal), 1);          { '|' char to buffer }
+     MoveChar(B[I], #124, Byte(CNormal), 1);          { '|' char to buffer }
      {$ENDIF}
      Inc(I, 2);                                       { Move along }
      MoveStr(B[I], HintBuf, Byte(CNormal));           { Move hint to buffer }

+ 1 - 1
packages/ibase/src/ibase40.pp

@@ -43,7 +43,7 @@ type
 
   { Interbase redefinitions }
 
-  ISC_LONG             = Long;
+  ISC_LONG             = PtrInt; // Bug 17360
   UISC_LONG            = ULong;
   ISC_STATUS           = Long;
   UISC_STATUS          = ULong;

+ 1 - 1
packages/ibase/src/ibase60.inc

@@ -68,7 +68,7 @@ type
 
 Type
    ISC_USHORT    = word;
-   ISC_STATUS    = clong;
+   ISC_STATUS    = ptrint;   // bug 17360
    ISC_INT64     = int64;
    ISC_UINT64    = qword;
    ISC_LONG      = Longint;

+ 61 - 61
packages/opengl/examples/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/08/25]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/12/11]
 #
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
@@ -265,184 +265,184 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova  glxtest
+override TARGET_PROGRAMS+=glutdemo morph3d bounce radblur glutdemova freeglutdemo  glxtest
 endif
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)

+ 1 - 1
packages/opengl/examples/Makefile.fpc

@@ -3,7 +3,7 @@
 #
 
 [target]
-programs=glutdemo morph3d bounce radblur glutdemova
+programs=glutdemo morph3d bounce radblur glutdemova freeglutdemo
 programs_linux=glxtest
 programs_freebsd=glxtest
 programs_netbsd=glxtest

+ 52 - 2
packages/regexpr/examples/testreg1.pp

@@ -24,15 +24,49 @@ var
 begin
    writeln('*** Testing unit regexpr ***');
 
+   { runtime error test }
+    initok:=GenerateRegExprEngine('[o]{1,2}',[],r);
+    if not initok then
+      do_error(1);
+    if not(RegExprPos(r,'book',index,len)) or
+      (index<>1) or (len<>2) then
+      do_error(1);
+    // if it has bug, error  An unhandled exception when r.Free
+    DestroyregExprEngine(r); // bug:Test for rcClear
+
    writeln('*** Searching tests ***');
    { basic tests }
 
    initok:=GenerateRegExprEngine('.*',[],r);
    if not initok then
-     do_error(90);
+     do_error(50);
    if not(RegExprPos(r,'CXXXX',index,len)) or
      (index<>0) or (len<>5) then
-     do_error(91);
+     do_error(51);
+   DestroyregExprEngine(r);
+
+   initok:=GenerateRegExprEngine('\t\t',[],r);
+   if not initok then
+     do_error(52);
+   if not(RegExprPos(r,'a'+#9+#9+'b'+'\t\t',index,len)) or
+     (index<>1) or (len<>2) then
+     do_error(52);
+   DestroyregExprEngine(r);
+
+   initok:=GenerateRegExprEngine('\t',[],r);
+   if not initok then
+     do_error(53);
+   if not(RegExprPos(r,'a'+#9+#9+'b'+'\t\t',index,len)) or
+     (index<>1) or (len<>1) then
+     do_error(53);
+   DestroyregExprEngine(r);
+
+   initok:=GenerateRegExprEngine('\w',[],r);
+   if not initok then
+     do_error(54);
+   if not(RegExprPos(r,'- abc \w',index,len)) or
+     (index<>2) or (len<>1) then
+     do_error(54);
    DestroyregExprEngine(r);
 
    { java package name }
@@ -364,6 +398,14 @@ begin
      do_error(718);
    DestroyregExprEngine(r);
 
+   initok:=GenerateRegExprEngine('o{2}',[],r);
+   if not initok then
+     do_error(719);
+   if not(RegExprPos(r,'book',index,len)) or
+     (index<>1) or (len<>2) then
+     do_error(719);
+   DestroyregExprEngine(r);
+
    (* {n,m} tests *)
    initok:=GenerateRegExprEngine('Cat(AZ){1,3}',[],r);
    if not initok then
@@ -412,6 +454,14 @@ begin
      do_error(729);
    DestroyregExprEngine(r);
 
+   initok:=GenerateRegExprEngine('o{2,2}',[],r);
+   if not initok then
+     do_error(730);
+   if not(RegExprPos(r,'book',index,len)) or
+     (index<>1) or (len<>2) then
+     do_error(730);
+   DestroyregExprEngine(r);
+
 
    { ()* tests }
    initok:=GenerateRegExprEngine('(AZ)*',[],r);

+ 1 - 1
packages/regexpr/src/old/regexpr.pp

@@ -564,7 +564,7 @@ unit regexpr;
                                begin
                                  if not parseOccurences(currentPos,minOccurs,maxOccurs) then
                                    exit;
-                                  inc(currentpos);
+                                  // currentpos is increased by parseOccurences
                                   new(hp3);
                                   doregister(hp3);
                                   hp3^.typ:=ret_pattern;

+ 42 - 4
packages/regexpr/src/regex.pp

@@ -254,6 +254,13 @@ var
   pc : pchar;
   x:integer;
 begin
+  if Offset>length(S) then
+    begin
+    Result := False;
+    MatchPos := 0;
+    Exit;
+    end;
+
   {if the regex string hasn't been parsed yet, do so}
   if (FStateCount = 0) then begin
     if not Parse(ErrorPos, ErrorCode) then
@@ -447,20 +454,28 @@ begin
   if FStateCount=length(FStateTable) then
     setlength(FStateTable,(FStateCount * 3) div 2);
 
-  if not (aMatchType in [mtChar,mtTerminal]) then FRegexType := rtRegEx;
+  if not (aMatchType in [mtChar,mtTerminal,mtNone]) then FRegexType := rtRegEx;
 end;
 {--------}
 procedure TRegexEngine.rcClear;
 var
-  i : integer;
+  i, j : integer;
 begin
   {free all items in the state transition table}
   for i := 0 to FStateCount-1 do begin
     with FStateTable[i] do begin
       if (sdMatchType = mtClass) or
-         (sdMatchType = mtNegClass) then
-        if (sdClass <> nil) then
+         (sdMatchType = mtNegClass) and
+         (sdClass <> nil) then
+        begin
+          for j := i+1 to FStateCount-1 do
+           if (FStateTable[j].sdClass = sdClass) then
+             FStateTable[j].sdClass := nil;
           FreeMem(sdClass, sizeof(TCharSet));
+        end;
+      // I am not sure if the next line is necessary. rcAddState set all values, so
+      // it shouldn't be necessary to clear its contents?
+      // FillChar(FStateTable[i],SizeOf(FStateTable[i]),#0);
     end;
   end;
   {clear the state transition table}
@@ -691,6 +706,8 @@ begin
         end;
         {move past the close parenthesis}
         inc(FPosn);
+        {always handle expressions with parentheses as regular-expression}
+        FRegexType := rtRegEx;
       end;
     '[' :
       begin
@@ -734,6 +751,22 @@ begin
         Result := rcAddState(mtAnyChar, #0, nil,
                              NewFinalState, UnusedState);
       end;
+    '\' :
+      begin
+        if (FPosn+1)^ in ['d','D','s','S','w','W'] then begin
+          New(CharClass);
+          CharClass^ := [];
+          if not rcParseCharRange(CharClass) then begin
+            Dispose(CharClass);
+            Result := ErrorState;
+            Exit;
+          end;
+          Result := rcAddState(mtClass, #0, CharClass,
+                               NewFinalState, UnusedState);
+        end
+        else
+          Result := rcParseChar;
+      end;
   else
     {otherwise parse a single character}
     Result := rcParseChar;
@@ -791,6 +824,7 @@ begin
     begin
     inc(FPosn);
     ch := rcReturnEscapeChar;
+    FRegexType := rtRegEx;
     end
   else
     ch :=FPosn^;
@@ -922,6 +956,8 @@ begin
     {now set the end state for the initial term to point to the final
      end state for the second expr and the overall expr}
     rcSetState(EndState1, FStateCount, UnusedState);
+    {always handle expressions with a pipe as regular-expression}
+    FRegexType := rtRegEx;
   end;
 end;
 {--------}
@@ -1062,6 +1098,8 @@ begin
 
               Result := StartStateAtom;
               end;
+            {always handle expressions with braces as regular-expression}
+            FRegexType := rtRegEx;
           end;
 
   else

+ 8 - 1
packages/regexpr/src/regexpr.pp

@@ -71,7 +71,9 @@ end;
 
 procedure DestroyRegExprEngine(var regexpr: TRegExprEngine);
 begin
-  regexpr.Free;
+  if regexpr <> nil then
+    regexpr.Free;
+  regexpr := nil;
 end;
 
 function RegExprPos(RegExprEngine: TRegExprEngine; p: pchar; var index,
@@ -81,6 +83,11 @@ begin
   Result := RegExprEngine.MatchString(p,index,len);
   Len := Len - index;
   Dec(Index);
+  if not Result then
+    begin
+      index := -1;
+      len := 0;
+    end;
 end;
 
 function RegExprReplaceAll(RegExprEngine: TRegExprEngine; const src,

+ 1 - 1
packages/winunits-base/src/activex.pp

@@ -3403,7 +3403,7 @@ Type
 
     IPropertySetStorage = Interface(IUnknown)
      ['{0000013A-0000-0000-C000-000000000046}']
-     function Create(const rfmtid:FMTID; const pclsid:CLSID; grfFlags:DWORD; grfMode:DWORD; out ppprstg:IPropertyStorage):HRESULT;
+     function Create(const rfmtid:FMTID; const pclsid:CLSID; grfFlags:DWORD; grfMode:DWORD; out ppprstg:IPropertyStorage):HRESULT; StdCall;
      function Open(const fmtid:FMTID; grfMode:DWORD; out ppprstg:IPropertyStorage):HRESULT; StdCall;
      function Delete(const rfmtid:FMTID):HRESULT; StdCall;
      function Enum(out ppenum:IEnumSTATPROPSETSTG):HRESULT; StdCall;

+ 1 - 1
rtl/go32v2/sysutils.pp

@@ -558,7 +558,7 @@ BEGIN
        Do_DiskData:=int64(rec.TotalAllocUnits)*rec.SecPerClus*rec.BytePerSec;
     end
    else
-    Do_DiskData:=-1;
+    OldDosDiskData;
   end
  else
   OldDosDiskData;

+ 21 - 43
rtl/win/sysutils.pp

@@ -224,11 +224,8 @@ const
                FILE_SHARE_READ,
                FILE_SHARE_WRITE,
                FILE_SHARE_READ or FILE_SHARE_WRITE);
-Var
-  FN : string;
 begin
-  FN:=FileName+#0;
-  result := CreateFile(@FN[1], dword(AccessMode[Mode and 3]),
+  result := CreateFile(PChar(FileName), dword(AccessMode[Mode and 3]),
                        dword(ShareMode[(Mode and $F0) shr 4]), nil, OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL, 0);
   //if fail api return feInvalidHandle (INVALIDE_HANDLE=feInvalidHandle=-1)
@@ -236,11 +233,8 @@ end;
 
 
 Function FileCreate (Const FileName : String) : THandle;
-Var
-  FN : string;
 begin
-  FN:=FileName+#0;
-  Result := CreateFile(@FN[1], GENERIC_READ or GENERIC_WRITE,
+  Result := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
                        0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
 end;
 
@@ -1061,7 +1055,6 @@ Procedure LoadVersionInfo;
 Var
    versioninfo : TOSVERSIONINFO;
 begin
-  kernel32dll:=0;
   GetDiskFreeSpaceEx:=nil;
   versioninfo.dwOSVersionInfoSize:=sizeof(versioninfo);
   GetVersionEx(versioninfo);
@@ -1071,14 +1064,9 @@ begin
   Win32BuildNumber:=versionInfo.dwBuildNumber;
   Move (versioninfo.szCSDVersion ,Win32CSDVersion[1],128);
   win32CSDVersion[0]:=chr(strlen(pchar(@versioninfo.szCSDVersion)));
-  if ((versioninfo.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS) and
-    (versioninfo.dwBuildNUmber>=1000)) or
-    (versioninfo.dwPlatformId=VER_PLATFORM_WIN32_NT) then
-    begin
-       kernel32dll:=LoadLibrary('kernel32');
-       if kernel32dll<>0 then
-         GetDiskFreeSpaceEx:=TGetDiskFreeSpaceEx(GetProcAddress(kernel32dll,'GetDiskFreeSpaceExA'));
-    end;
+  kernel32dll:=GetModuleHandle('kernel32');
+  if kernel32dll<>0 then
+    GetDiskFreeSpaceEx:=TGetDiskFreeSpaceEx(GetProcAddress(kernel32dll,'GetDiskFreeSpaceExA'));
 end;
 
 Const
@@ -1136,36 +1124,28 @@ var
 Procedure InitDLL;
 
 Var
-  P : Pointer;
-
+  pathBuf: array[0..MAX_PATH-1] of char;
+  pathLength: Integer;
 begin
-  CFGDLLHandle:=LoadLibrary('shell32.dll');
-  if (CFGDLLHandle<>0) then
-    begin
-    P:=GetProcAddress(CFGDLLHandle,'SHGetFolderPathA');
-    If (P=Nil) then
-      begin
-      FreeLibrary(CFGDLLHandle);
-      CFGDllHandle:=0;
-      end
-    else
-      SHGetFolderPath:=PFNSHGetFolderPath(P);
-    end;
-  If (P=Nil) then
-    begin
-    CFGDLLHandle:=LoadLibrary('shfolder.dll');
+  { Load shfolder.dll using a full path, in order to prevent spoofing (Mantis #18185)
+    Don't bother loading shell32.dll because shfolder.dll itself redirects SHGetFolderPath
+    to shell32.dll whenever possible. }
+  pathLength:=GetSystemDirectory(pathBuf, MAX_PATH);
+  if (pathLength>0) and (pathLength<MAX_PATH-14) then { 14=length('\shfolder.dll'#0) }
+  begin
+    StrLCopy(@pathBuf[pathLength],'\shfolder.dll',MAX_PATH-pathLength-1);
+    CFGDLLHandle:=LoadLibrary(pathBuf);
+
     if (CFGDLLHandle<>0) then
+    begin
+      Pointer(ShGetFolderPath):=GetProcAddress(CFGDLLHandle,'SHGetFolderPathA');
+      If @ShGetFolderPath=nil then
       begin
-      P:=GetProcAddress(CFGDLLHandle,'SHGetFolderPathA');
-      If (P=Nil) then
-        begin
         FreeLibrary(CFGDLLHandle);
         CFGDllHandle:=0;
-        end
-      else
-        ShGetFolderPath:=PFNSHGetFolderPath(P);
       end;
     end;
+  end;
   If (@ShGetFolderPath=Nil) then
     Raise Exception.Create('Could not determine SHGetFolderPath Function');
 end;
@@ -1383,8 +1363,6 @@ Initialization
   InitSysConfigDir;
 Finalization
   DoneExceptions;
-  if kernel32dll<>0 then
-   FreeLibrary(kernel32dll);
- if CFGDLLHandle<>0 then
+  if CFGDLLHandle<>0 then
    FreeLibrary(CFGDllHandle);
 end.