Browse Source

--- Merging r15395 into '.':
U packages/chm/src/chmfilewriter.pas
--- Merging r15396 into '.':
U packages/chm/src/chmbase.pas
--- Merging r15397 into '.':
U packages/chm/src/chmwriter.pas
U packages/chm/src/chmtypes.pas
--- Merging r15406 into '.':
U packages/chm/Makefile.fpc
A packages/chm/src/unblockchm.pp
--- Merging r15407 into '.':
C packages/chm/Makefile
Summary of conflicts:
Text conflicts: 1 (resolved)

# revisions: 15395,15396,15397,15406,15407
------------------------------------------------------------------------
r15395 | marco | 2010-06-06 14:38:19 +0200 (Sun, 06 Jun 2010) | 2 lines
Changed paths:
M /trunk/packages/chm/src/chmfilewriter.pas

* fix for memleak (Mantis 16649). Fixed a similar case for sender=nil.

------------------------------------------------------------------------
------------------------------------------------------------------------
r15396 | marco | 2010-06-06 16:44:19 +0200 (Sun, 06 Jun 2010) | 2 lines
Changed paths:
M /trunk/packages/chm/src/chmbase.pas

* fix for 16644, locally disable rangecheck and put a debug writeln under chm_debug

------------------------------------------------------------------------
------------------------------------------------------------------------
r15397 | marco | 2010-06-08 10:57:16 +0200 (Tue, 08 Jun 2010) | 3 lines
Changed paths:
M /trunk/packages/chm/src/chmtypes.pas
M /trunk/packages/chm/src/chmwriter.pas

* more range check fixes (more serious this time) from mantis 16669
* one more writeln under chm_debug to avoid problems with gui-only apps.

------------------------------------------------------------------------
------------------------------------------------------------------------
r15406 | marco | 2010-06-11 09:11:19 +0200 (Fri, 11 Jun 2010) | 1 line
Changed paths:
M /trunk/packages/chm/Makefile.fpc
A /trunk/packages/chm/src/unblockchm.pp

* mass unblock CHM utility for win32/win64
------------------------------------------------------------------------
------------------------------------------------------------------------
r15407 | marco | 2010-06-11 16:23:15 +0200 (Fri, 11 Jun 2010) | 2 lines
Changed paths:
M /trunk/packages/chm/Makefile

* makefile regenned after addition unblockchm

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

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

marco 15 years ago
parent
commit
c4f604e9ef

+ 1 - 0
.gitattributes

@@ -979,6 +979,7 @@ packages/chm/src/lzxcompressthread.pas svneol=native#text/plain
 packages/chm/src/paslznonslide.pas svneol=native#text/plain
 packages/chm/src/paslznonslide.pas svneol=native#text/plain
 packages/chm/src/paslzx.pas svneol=native#text/plain
 packages/chm/src/paslzx.pas svneol=native#text/plain
 packages/chm/src/paslzxcomp.pas svneol=native#text/plain
 packages/chm/src/paslzxcomp.pas svneol=native#text/plain
+packages/chm/src/unblockchm.pp -text svneol=native#test/plain
 packages/dbus/Makefile svneol=native#text/plain
 packages/dbus/Makefile svneol=native#text/plain
 packages/dbus/Makefile.fpc svneol=native#text/plain
 packages/dbus/Makefile.fpc svneol=native#text/plain
 packages/dbus/examples/Makefile svneol=native#text/plain
 packages/dbus/examples/Makefile svneol=native#text/plain

+ 33 - 5
packages/chm/Makefile

@@ -1,8 +1,8 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/01/25]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/05/27]
 #
 #
 default: all
 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
+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 i386-nativent 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
 BSDs = freebsd netbsd openbsd darwin
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku
 UNIXs = linux $(BSDs) solaris qnx haiku
 LIMIT83fs = go32v2 os2 emx watcom
 LIMIT83fs = go32v2 os2 emx watcom
@@ -273,7 +273,7 @@ ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_PROGRAMS+=chmcmd chmls
 override TARGET_PROGRAMS+=chmcmd chmls
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_PROGRAMS+=chmcmd chmls
+override TARGET_PROGRAMS+=chmcmd chmls  unblockchm
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_PROGRAMS+=chmcmd chmls
 override TARGET_PROGRAMS+=chmcmd chmls
@@ -326,6 +326,9 @@ endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
 override TARGET_PROGRAMS+=chmcmd chmls
 override TARGET_PROGRAMS+=chmcmd chmls
 endif
 endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override TARGET_PROGRAMS+=chmcmd chmls
+endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
 override TARGET_PROGRAMS+=chmcmd chmls
 override TARGET_PROGRAMS+=chmcmd chmls
 endif
 endif
@@ -396,7 +399,7 @@ ifeq ($(FULL_TARGET),x86_64-darwin)
 override TARGET_PROGRAMS+=chmcmd chmls
 override TARGET_PROGRAMS+=chmcmd chmls
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_PROGRAMS+=chmcmd chmls
+override TARGET_PROGRAMS+=chmcmd chmls  unblockchm
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
 override TARGET_PROGRAMS+=chmcmd chmls
 override TARGET_PROGRAMS+=chmcmd chmls
@@ -506,6 +509,9 @@ endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
 override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
 override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
 endif
 endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
+endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
 override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
 override TARGET_UNITS+=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer chmfiftimain lzxcompressthread
 endif
 endif
@@ -687,6 +693,9 @@ endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
 override COMPILER_INCLUDEDIR+=src
 override COMPILER_INCLUDEDIR+=src
 endif
 endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override COMPILER_INCLUDEDIR+=src
+endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
 override COMPILER_INCLUDEDIR+=src
 override COMPILER_INCLUDEDIR+=src
 endif
 endif
@@ -867,6 +876,9 @@ endif
 ifeq ($(FULL_TARGET),i386-symbian)
 ifeq ($(FULL_TARGET),i386-symbian)
 override COMPILER_SOURCEDIR+=src tests
 override COMPILER_SOURCEDIR+=src tests
 endif
 endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override COMPILER_SOURCEDIR+=src tests
+endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
 override COMPILER_SOURCEDIR+=src tests
 override COMPILER_SOURCEDIR+=src tests
 endif
 endif
@@ -1360,6 +1372,10 @@ ifeq ($(OS_TARGET),symbian)
 SHAREDLIBEXT=.dll
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=symbian
 SHORTSUFFIX=symbian
 endif
 endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
 else
 else
 ifeq ($(OS_TARGET),go32v1)
 ifeq ($(OS_TARGET),go32v1)
 PPUEXT=.pp1
 PPUEXT=.pp1
@@ -1891,6 +1907,11 @@ REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-XML=1
 REQUIRE_PACKAGES_FCL-XML=1
 endif
 endif
+ifeq ($(FULL_TARGET),i386-nativent)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_FCL-BASE=1
+REQUIRE_PACKAGES_FCL-XML=1
+endif
 ifeq ($(FULL_TARGET),m68k-linux)
 ifeq ($(FULL_TARGET),m68k-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_FCL-BASE=1
 REQUIRE_PACKAGES_FCL-BASE=1
@@ -2617,7 +2638,7 @@ ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
 ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
 ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
 ifdef USETAR
 ifdef USETAR
 ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
 ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
-ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
+ZIPCMD_ZIP:=$(TARPROG) c$(TAROPT)f $(ZIPDESTFILE) *
 else
 else
 ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
 ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
 ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
 ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
@@ -2662,6 +2683,9 @@ fpc_zipdistinstall:
 ifdef EXEFILES
 ifdef EXEFILES
 override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
 override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
 endif
 endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+endif
 ifdef CLEAN_UNITS
 ifdef CLEAN_UNITS
 override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
 override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
 endif
 endif
@@ -2708,6 +2732,9 @@ endif
 ifdef CLEANRSTFILES
 ifdef CLEANRSTFILES
 	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
 	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
 endif
 endif
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
 endif
 endif
 	-$(DELTREE) units
 	-$(DELTREE) units
 	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
 	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
@@ -2858,3 +2885,4 @@ endif
 .NOTPARALLEL:
 .NOTPARALLEL:
 cdmcmd$(EXEEXT): chmcmd.lpr
 cdmcmd$(EXEEXT): chmcmd.lpr
 chmls$(EXEEXT): chmls.lpr
 chmls$(EXEEXT): chmls.lpr
+unblockchm$(EXEEXT): unblockchm.pp

+ 4 - 0
packages/chm/Makefile.fpc

@@ -11,6 +11,8 @@ units=fasthtmlparser htmlutil paslzx paslzxcomp paslznonslide chmbase chmtypes \
       chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer \
       chmspecialfiles chmsitemap chmwriter chmfilewriter chmreader htmlindexer \
       chmfiftimain lzxcompressthread
       chmfiftimain lzxcompressthread
 programs=chmcmd chmls
 programs=chmcmd chmls
+programs_win32=unblockchm
+programs_win64=unblockchm
 examples=
 examples=
 
 
 [require]
 [require]
@@ -32,3 +34,5 @@ sourcedir=src tests
 cdmcmd$(EXEEXT): chmcmd.lpr
 cdmcmd$(EXEEXT): chmcmd.lpr
 
 
 chmls$(EXEEXT): chmls.lpr
 chmls$(EXEEXT): chmls.lpr
+
+unblockchm$(EXEEXT): unblockchm.pp

+ 11 - 1
packages/chm/src/chmbase.pas

@@ -173,12 +173,16 @@ var
 begin
 begin
   bit := 28; //((sizeof(dWord)*8)div 7)*7; // = 28
   bit := 28; //((sizeof(dWord)*8)div 7)*7; // = 28
   buf := @Value;
   buf := @Value;
+  {$undef rangeon}
+  {$ifopt R+}
+     {$define rangeon}
+  {$endif}
+  {$R-}
   while True do begin
   while True do begin
     mask := $7f shl bit;
     mask := $7f shl bit;
     if (bit = 0) or ((ANumber and mask)<>0) then break;
     if (bit = 0) or ((ANumber and mask)<>0) then break;
     Dec(bit, 7);
     Dec(bit, 7);
   end;
   end;
-
   while True do begin
   while True do begin
     buf^ := Byte(((ANumber shr bit)and $7f));
     buf^ := Byte(((ANumber shr bit)and $7f));
     if(bit = 0) then break;
     if(bit = 0) then break;
@@ -187,11 +191,17 @@ begin
     Dec(bit, 7);
     Dec(bit, 7);
     Inc(TheEnd);
     Inc(TheEnd);
   end;
   end;
+
+  {$ifdef rangeon}
+    {$R+}
+  {$endif}
   
   
   buf := @Value;
   buf := @Value;
   Result := TheEnd+1;
   Result := TheEnd+1;
   Move(Value, Buffer^, Result);
   Move(Value, Buffer^, Result);
+  {$ifdef chm_debug}
   if Result > 8 then WriteLn(' ', ANumber,' WRITE_COMPRESSED_INTEGER too big!: ', Result, ' ');
   if Result > 8 then WriteLn(' ', ANumber,' WRITE_COMPRESSED_INTEGER too big!: ', Result, ' ');
+  {$endif}
 end;
 end;
 
 
 function ChmCompareText(S1, S2: String): Integer; inline;
 function ChmCompareText(S1, S2: String): Integer; inline;

+ 3 - 1
packages/chm/src/chmfilewriter.pas

@@ -146,7 +146,8 @@ begin
     end;
     end;
     TOCStream.Free;
     TOCStream.Free;
   end;
   end;
-
+  if not assigned(sender) then
+    Writer.Free;
 end;
 end;
 
 
 constructor TChmProject.Create;
 constructor TChmProject.Create;
@@ -305,6 +306,7 @@ begin
 
 
   if Assigned(TOCStream) then TOCStream.Free;
   if Assigned(TOCStream) then TOCStream.Free;
   if Assigned(IndexStream) then IndexStream.Free;
   if Assigned(IndexStream) then IndexStream.Free;
+  Writer.Free;
 end;
 end;
 
 
 
 

+ 2 - 0
packages/chm/src/chmtypes.pas

@@ -356,7 +356,9 @@ var
   end;
   end;
 begin
 begin
   if FItemCount < 1 then begin
   if FItemCount < 1 then begin
+    {$ifdef chm_debug}
     WriteLn('WHAT ARE YOU DOING!!');
     WriteLn('WHAT ARE YOU DOING!!');
+    {$endif}
     Dec(AIndex);
     Dec(AIndex);
     Exit;
     Exit;
   end;
   end;

+ 3 - 2
packages/chm/src/chmwriter.pas

@@ -1371,7 +1371,8 @@ function TChmWriter.AddURL ( AURL: String; TopicsIndex: DWord ) : LongWord;
       FAvlUrlStr.Add(UrlStrRec);
       FAvlUrlStr.Add(UrlStrRec);
       FURLSTRStream.WriteDWord(NToLE(DWord(0))); // URL Offset for topic after the the "Local" value
       FURLSTRStream.WriteDWord(NToLE(DWord(0))); // URL Offset for topic after the the "Local" value
       FURLSTRStream.WriteDWord(NToLE(DWord(0))); // Offset of FrameName??
       FURLSTRStream.WriteDWord(NToLE(DWord(0))); // Offset of FrameName??
-      FURLSTRStream.Write(AString[1], Length(AString));
+      if Length(AString) > 0 then
+        FURLSTRStream.Write(AString[1], Length(AString));
       FURLSTRStream.WriteByte(0); //NT
       FURLSTRStream.WriteByte(0); //NT
   end;
   end;
 
 
@@ -1390,7 +1391,7 @@ function TChmWriter.AddURL ( AURL: String; TopicsIndex: DWord ) : LongWord;
 var UrlIndex : Integer;
 var UrlIndex : Integer;
 
 
 begin
 begin
-  if AURL[1] = '/' then Delete(AURL,1,1);
+  if (Length(AURL) > 0) and (AURL[1] = '/') then Delete(AURL,1,1);
   UrlIndex:=LookupUrlString(AUrl);
   UrlIndex:=LookupUrlString(AUrl);
 
 
   //if $1000 - (FURLTBLStream.Size mod $1000) = 4 then // we are at 4092
   //if $1000 - (FURLTBLStream.Size mod $1000) = 4 then // we are at 4092

+ 65 - 0
packages/chm/src/unblockchm.pp

@@ -0,0 +1,65 @@
+program unblockchm;
+
+// Marco van de Voort
+// BSD license 
+// Quick and dirty scritp to unblocks CHMs on xpsp2/vista/w7
+//
+// todo : populatefiles needs fix for when filespec contains a directory.
+//
+// based on http://stackoverflow.com/questions/1617509/unblock-a-file-with-powershell
+
+{$mode delphi}
+uses sysutils,classes;
+
+procedure usage;
+
+begin
+  writeln('unblockchm. Unblocks chms in XPsp2,vista,w7  (C) 2010 Marco van de Voort');
+  writeln;
+  Writeln('usage: unblockchm <filespec> <filespec2> ..');
+  writeln;
+  writeln('<filespec> may contain basic wildcards.');
+  writeln;
+end;
+
+procedure unblockchm(s:string);
+var f : file;
+begin
+ writeln('unblocking ',s);
+ assignfile(f,s+':Zone.Identifier');
+ rewrite(f,1);
+ truncate(f);
+ closefile(f);
+end;
+
+procedure populatefiles(files:TStringlist;filespec:string);
+var
+  searchResult : TSearchRec;
+begin
+ if FindFirst(filespec, faAnyFile, searchResult) = 0 then
+  begin
+    repeat
+      files.add(searchresult.name);
+    until FindNext(searchResult) <> 0;
+    // Must free up resources used by these successful finds
+    FindClose(searchResult);
+  end;
+end;
+
+var files : TStringList;
+    i : Integer;
+
+begin
+ if paramcount=0 then
+   begin
+     Usage;
+     halt;
+   end;
+ files :=TStringList.create;
+ for i:=1 to paramcount do
+  populatefiles(files,paramstr(i));
+ if files.count>0 then
+   for i:=0 to files.count-1 do
+     unblockchm(files[i]);
+end.
+