瀏覽代碼

--- Merging r30260 into '.':
U packages/fcl-json/src/jsonconf.pp
--- Recording mergeinfo for merge of r30260 into '.':
U .
--- Merging r30294 into '.':
U packages/fcl-res/src/versionresource.pp
--- Recording mergeinfo for merge of r30294 into '.':
G .
--- Merging r30303 into '.':
U packages/fcl-process/src/simpleipc.pp
--- Recording mergeinfo for merge of r30303 into '.':
G .
--- Merging r30304 into '.':
U packages/fcl-process/src/unix/simpleipc.inc
--- Recording mergeinfo for merge of r30304 into '.':
G .

# revisions: 30260,30294,30303,30304

git-svn-id: branches/fixes_3_0@31111 -

marco 10 年之前
父節點
當前提交
2b6c1e12fc

+ 8 - 2
packages/fcl-json/src/jsonconf.pp

@@ -73,6 +73,7 @@ type
   public
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;
+    Procedure Reload;
     procedure Clear;
     procedure Flush;    // Writes the JSON file
     procedure OpenKey(const aPath: WideString; AllowCreate : Boolean);
@@ -528,12 +529,17 @@ begin
   DeletePath(APath);
 end;
 
-procedure TJSONConfig.Loaded;
+Procedure TJSONConfig.Reload;
+
 begin
-  inherited Loaded;
   if Length(Filename) > 0 then
     DoSetFilename(Filename,True);
 end;
+procedure TJSONConfig.Loaded;
+begin
+  inherited Loaded;
+  Reload;
+end;
 
 function TJSONConfig.FindPath(const APath: WideString; AllowCreate: Boolean
   ): TJSONObject;

+ 31 - 8
packages/fcl-process/src/simpleipc.pp

@@ -76,6 +76,7 @@ Type
     Procedure CheckActive;
     Procedure Activate; virtual; abstract;
     Procedure Deactivate; virtual; abstract;
+    Procedure Loaded; override;
     Property Busy : Boolean Read FBusy;
   Published
     Property Active : Boolean Read FActive Write SetActive;
@@ -238,24 +239,29 @@ end;
 
 procedure TSimpleIPC.CheckInactive;
 begin
-  If Active then
-    DoError(SErrActive,[]);
+  if not (csLoading in ComponentState) then
+    If Active then
+      DoError(SErrActive,[]);
 end;
 
 procedure TSimpleIPC.CheckActive;
 begin
-  If Not Active then
-    DoError(SErrInActive,[]);
+  if not (csLoading in ComponentState) then
+    If Not Active then
+      DoError(SErrInActive,[]);
 end;
 
 procedure TSimpleIPC.SetActive(const AValue: Boolean);
 begin
   if (FActive<>AValue) then
     begin
-    If AValue then
-      Activate
-    else
-      Deactivate;
+    if (csLoading in ComponentState) then
+      FActive:=AValue
+    else  
+      If AValue then
+        Activate
+      else
+        Deactivate;
     end;
 end;
 
@@ -268,6 +274,20 @@ begin
     end;
 end;
 
+Procedure TSimpleIPC.Loaded; 
+
+Var
+  B : Boolean;
+
+begin
+  B:=FActive;
+  if B then
+    begin
+    Factive:=False;
+    Activate;
+    end;
+end;
+
 { ---------------------------------------------------------------------
     TSimpleIPCServer
   ---------------------------------------------------------------------}
@@ -374,6 +394,9 @@ begin
   StopServer;
 end;
 
+
+
+
 { ---------------------------------------------------------------------
     TSimpleIPCClient
   ---------------------------------------------------------------------}

+ 4 - 12
packages/fcl-process/src/unix/simpleipc.inc

@@ -110,17 +110,13 @@ end;
 
 
 constructor TPipeClientComm.Create(AOWner: TSimpleIPCClient);
-
-Var
-  D : String;
-
 begin
   inherited Create(AOWner);
   FFileName:=Owner.ServerID;
   If (Owner.ServerInstance<>'') then
     FFileName:=FFileName+'-'+Owner.ServerInstance;
-  D:='/tmp/'; // Change to something better later
-  FFileName:=D+FFileName;
+  if FFileName[1]<>'/' then
+    FFileName:=GetTempDir(true)+FFileName;
 end;
 
 
@@ -200,17 +196,13 @@ Type
   end;
 
 constructor TPipeServerComm.Create(AOWner: TSimpleIPCServer);
-
-Var
-  D : String;
-
 begin
   inherited Create(AOWner);
   FFileName:=Owner.ServerID;
   If Not Owner.Global then
     FFileName:=FFileName+'-'+IntToStr(fpGetPID);
-  D:='/tmp/'; // Change to something better later
-  FFileName:=D+FFileName;
+  if FFileName[1]<>'/' then
+    FFileName:=GetTempDir(Owner.Global)+FFileName;
 end;
 
 

+ 7 - 1
packages/fcl-res/src/versionresource.pp

@@ -256,12 +256,18 @@ var block : TVerBlockHeader;
     tmp : integer;
     vinfo : TVerTranslationInfo;
     before : int64;
+    isBlockHeaderRead: boolean;
 begin
   Result:=0;
+  isBlockHeaderRead:=false;
   while toread>0 do
   begin
     before:=RawData.Position;
-    ReadBlockHeader(block);
+    if not isBlockHeaderRead then
+    begin
+      ReadBlockHeader(block);
+      isBlockHeaderRead:=true;
+    end;
     if (block.valtype<>0) or (block.key<>'Translation') then
       RawData.Seek(block.vallength,soFromCurrent)
     else