Curtis Hamilton 3 недель назад
Родитель
Сommit
b829348b48

+ 8 - 1
packages/fpmake.pp

@@ -4,7 +4,14 @@
 {$mode objfpc}{$H+}
 program fpmake;
 
-uses {$ifdef unix}cwstring,cthreads,{$endif} sysutils, Classes, fpmkunit;
+uses
+{$ifdef unix}
+ cwstring,
+{$ifndef NO_THREADING}
+ cthreads,
+{$endif}
+{$endif}
+ sysutils, Classes, fpmkunit;
 
 Var
   TBuild,T : TTarget;

+ 5 - 11
packages/rtl-objpas/src/inc/variants.pp

@@ -2327,10 +2327,6 @@ begin
       Dest.vType := varOleStr;
       Dest.vOleStr := nil;
       WideString(Pointer(Dest.vOleStr)) := WideString(Pointer(vOleStr));
-    end else if vType = varUString then begin
-      Dest.vType := varUString;
-      Dest.vustring := Nil;
-      UnicodeString(Dest.vustring) := UnicodeString(vustring);
     end else if vType = varAny then begin
       Dest := Source;
       RefAnyProc(Dest);
@@ -2460,11 +2456,6 @@ begin
         varDate:     SysVarFromTDateTime(Variant(aDest), VariantToDate(aSource));
 {$endif}
         varOleStr:   DoVarCastWStr(aDest, aSource);
-        varUString:  begin
-          DoVarClearIfComplex(aDest);
-          aDest.vType := aVarType;
-          UnicodeString(aDest.vustring) := VariantToUnicodeString(aSource);
-        end;
         varBoolean:  SysVarFromBool(Variant(aDest), VariantToBoolean(aSource));
         varShortInt: SysVarFromInt(Variant(aDest), VariantToShortInt(aSource), -1);
         varByte:     SysVarFromInt(Variant(aDest), VariantToByte(aSource), 1);
@@ -2475,10 +2466,13 @@ begin
 
         varDispatch: DoVarCastDispatch(aDest, aSource);
         varUnknown:  DoVarCastInterface(aDest, aSource);
-        varString:   DoVarCastLStr(aDest, aSource);
-        varAny:      VarCastError(vType, varAny);
+      else
+        case aVarType of
+          varString: DoVarCastLStr(aDest, aSource);
+          varAny:    VarCastError(vType, varAny);
         else
           DoVarCastComplex(aDest, aSource, aVarType);
+        end;
       end;
     end;
 

+ 0 - 1
packages/rtl-objpas/src/inc/varutilh.inc

@@ -71,7 +71,6 @@ function VariantToInt64(const VargSrc : TVarData ) : Int64;
 function VariantToQWord(const VargSrc : TVarData ) : Qword;
 function VariantToWideString(const VargSrc : TVarData) : WideString;
 function VariantToAnsiString(const VargSrc : TVarData) : AnsiString;
-function VariantToUnicodeString(const VargSrc : TVarData) : UnicodeString;
 function VariantToShortString(const VargSrc : TVarData) : ShortString;
 
 {$ifdef USE_WINDOWS_OLE_FUNCTIONS}

+ 0 - 6
packages/rtl-objpas/src/inc/varutils.inc

@@ -77,8 +77,6 @@ begin
             ;
           varOleStr:
             WideString(Pointer(VOleStr)):='';
-          varUString:
-            UnicodeString(VUString):='';
           varDispatch,
           varUnknown:
             iinterface(vunknown):=nil;
@@ -117,8 +115,6 @@ begin
             Move(VBytes, VargDest.VBytes, SizeOf(VargDest.VBytes));
           varOleStr:
             CopyAsWideString(VargDest.VOleStr,VOleStr);
-          varUString:
-            UnicodeString(VargDest.vustring):=UnicodeString(vustring);
           varDispatch:
             IUnknown(VargDest.vdispatch):=IUnknown(VargSrc.vdispatch);
           varUnknown:
@@ -160,7 +156,6 @@ begin
       VarQWord    : VargDest.VQWord:=PQWord(VPointer)^;
       varVariant  : Variant(VargDest):=Variant(PVarData(VPointer)^);
       varOleStr   : CopyAsWideString(VargDest.VOleStr,PVarData(VPointer)^.VoleStr);
-      varUString  : UnicodeString(VargDest.vustring):=PUnicodeString(VPointer)^;
       varDispatch,
       varUnknown  : IInterface(VargDest.vUnknown):=IInterface(PInterface(VargSrc.VPointer)^);
       else
@@ -205,7 +200,6 @@ begin
           VarInt64    : VargDest.Vint64:=VariantToInt64(Tmp);
           VarLongWord : VargDest.VLongWord:=VariantToCardinal(Tmp);
           VarQWord    : VargDest.VQWord:=VariantToQword(tmp);
-          varUString  : UnicodeString(VargDest.vustring):=UnicodeString(tmp.vustring);
        else
           Result:=VAR_BADVARTYPE;
        end;

+ 0 - 61
packages/rtl-objpas/tests/tests.rtti.value.pas

@@ -130,12 +130,6 @@ Type
     Procedure TestFromVarRecQWord;
     Procedure TestFromVarRecUnicodeString;
     Procedure TestArrayOfConstToTValue;
-    procedure TestCastAnsiString;
-{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
-    procedure TestCastUnicodeString;
-{$endif}
-    procedure TestCastWideString;
-    procedure TestCastShortString;
   end;
 
   { TMyUNknown }
@@ -725,61 +719,6 @@ begin
   CheckEquals(1.23,S[2].AsDouble,0.01,'Value 3');
 end;
 
-procedure TTestValueVariant.TestCastAnsiString;
-var
-  s: AnsiString;
-  v: Variant;
-  vvar, vstr: TValue;
-begin
-  s := 'Test';
-  v := s;
-  vvar := TValue.{$ifdef fpc}specialize{$endif}From<Variant>(v);
-  CheckTrue(vvar.TryCast(TypeInfo(AnsiString), vstr));
-  CheckEquals(s, vstr.AsAnsiString);
-end;
-
-{$ifndef FPC_WIDESTRING_EQUAL_UNICODESTRING}
-procedure TTestValueVariant.TestCastUnicodeString;
-var
-  u: UnicodeString;
-  v: Variant;
-  vvar, vstr: TValue;
-begin
-  u := 'Test';
-  TVarData(v).vType := varUString;
-  TVarData(v).vuString := Pointer(u);
-  vvar := TValue.{$ifdef fpc}specialize{$endif}From<Variant>(v);
-  CheckTrue(vvar.TryCast(TypeInfo(UnicodeString), vstr));
-  CheckEquals(u, vstr.AsUnicodeString);
-end;
-{$endif}
-
-procedure TTestValueVariant.TestCastWideString;
-var
-  w: WideString;
-  v: Variant;
-  vvar, vstr: TValue;
-begin
-  w := 'Test';
-  v := w;
-  vvar := TValue.{$ifdef fpc}specialize{$endif}From<Variant>(v);
-  CheckTrue(vvar.TryCast(TypeInfo(WideString), vstr));
-  CheckEquals(w, vstr.AsUnicodeString);
-end;
-
-procedure TTestValueVariant.TestCastShortString;
-var
-  s: ShortString;
-  v: Variant;
-  vvar, vstr: TValue;
-begin
-  s := 'Test';
-  v := s;
-  vvar := TValue.{$ifdef fpc}specialize{$endif}From<Variant>(v);
-  CheckTrue(vvar.TryCast(TypeInfo(ShortString), vstr));
-  CheckEquals(s, vstr.AsAnsiString);
-end;
-
 { TMyUNknown }
 
 function TMyUNknown.GetTypeInfoCount(out count: longint): HResult; stdcall;

+ 5 - 2
rtl/bsd/system.pp

@@ -208,8 +208,11 @@ begin
   e[j]:=1 shl i;
   { this routine is called from a signal handler, so must not change errno }
   olderrno:=geterrno;
-  fpsigprocmask(SIG_UNBLOCK,@e,@oe);
-  reenable_signal:=geterrno=0;
+  seterrno(0);
+  if fpsigprocmask(SIG_UNBLOCK,@e,@oe)<>0 then
+    reenable_signal:=geterrno=0
+  else
+    reenable_signal:=true;
   seterrno(olderrno);
 end;