You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(19) |
Oct
(26) |
Nov
(37) |
Dec
(9) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(48) |
Feb
(107) |
Mar
(74) |
Apr
(89) |
May
(37) |
Jun
(29) |
Jul
(40) |
Aug
(75) |
Sep
(59) |
Oct
(80) |
Nov
(16) |
Dec
|
| 2004 |
Jan
(54) |
Feb
(13) |
Mar
(64) |
Apr
(52) |
May
(13) |
Jun
(52) |
Jul
(72) |
Aug
(53) |
Sep
(80) |
Oct
(22) |
Nov
(48) |
Dec
(33) |
| 2005 |
Jan
(1) |
Feb
(6) |
Mar
(12) |
Apr
(7) |
May
(35) |
Jun
(19) |
Jul
(6) |
Aug
(11) |
Sep
(9) |
Oct
(29) |
Nov
(17) |
Dec
(58) |
| 2006 |
Jan
(44) |
Feb
(78) |
Mar
(29) |
Apr
(31) |
May
(19) |
Jun
(34) |
Jul
(23) |
Aug
(16) |
Sep
(20) |
Oct
(49) |
Nov
(11) |
Dec
(4) |
| 2007 |
Jan
(23) |
Feb
(17) |
Mar
(18) |
Apr
(45) |
May
(10) |
Jun
(3) |
Jul
(3) |
Aug
|
Sep
|
Oct
(1) |
Nov
(5) |
Dec
(7) |
| 2008 |
Jan
(1) |
Feb
(15) |
Mar
(2) |
Apr
(2) |
May
|
Jun
(2) |
Jul
(1) |
Aug
(3) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2009 |
Jan
(11) |
Feb
(7) |
Mar
(2) |
Apr
(11) |
May
(6) |
Jun
|
Jul
|
Aug
(11) |
Sep
(1) |
Oct
(7) |
Nov
(33) |
Dec
(2) |
| 2010 |
Jan
|
Feb
(19) |
Mar
(14) |
Apr
(17) |
May
(15) |
Jun
(13) |
Jul
(51) |
Aug
(17) |
Sep
(3) |
Oct
(19) |
Nov
(1) |
Dec
(8) |
| 2011 |
Jan
|
Feb
|
Mar
|
Apr
(4) |
May
(14) |
Jun
(2) |
Jul
(5) |
Aug
(10) |
Sep
(5) |
Oct
|
Nov
(6) |
Dec
(4) |
| 2012 |
Jan
|
Feb
(11) |
Mar
|
Apr
|
May
|
Jun
(3) |
Jul
(6) |
Aug
|
Sep
|
Oct
(1) |
Nov
(4) |
Dec
|
| 2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(4) |
Jun
(8) |
Jul
(4) |
Aug
(21) |
Sep
(15) |
Oct
(12) |
Nov
(22) |
Dec
(9) |
| 2014 |
Jan
(3) |
Feb
(1) |
Mar
|
Apr
(2) |
May
|
Jun
(7) |
Jul
(4) |
Aug
(2) |
Sep
|
Oct
(9) |
Nov
(23) |
Dec
(9) |
| 2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(10) |
Sep
(3) |
Oct
|
Nov
(2) |
Dec
|
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(5) |
Dec
(1) |
| 2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
| 2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2025 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
|
From: <mor...@us...> - 2015-08-17 04:08:24
|
Revision: 1925
http://sourceforge.net/p/wrapper/code/1925
Author: mortenson
Date: 2015-08-17 04:08:19 +0000 (Mon, 17 Aug 2015)
Log Message:
-----------
Work on 3.5.27 release.
Modified Paths:
--------------
trunk/wrapper/README_de.txt
trunk/wrapper/README_en.txt
trunk/wrapper/README_es.txt
trunk/wrapper/README_ja.txt
trunk/wrapper/build-tests.xml
trunk/wrapper/build.xml
trunk/wrapper/default.properties
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/bin/App.bat.in
trunk/wrapper/src/bin/AppCommand.bat.in
trunk/wrapper/src/bin/AppNoWrapper.bat.in
trunk/wrapper/src/bin/AppTemplate.bat.in
trunk/wrapper/src/bin/AppTemplatePassThrough.bat.in
trunk/wrapper/src/bin/InstallApp-NT.bat.in
trunk/wrapper/src/bin/PauseApp-NT.bat.in
trunk/wrapper/src/bin/QueryApp-NT.bat.in
trunk/wrapper/src/bin/ResumeApp-NT.bat.in
trunk/wrapper/src/bin/StartApp-NT.bat.in
trunk/wrapper/src/bin/StopApp-NT.bat.in
trunk/wrapper/src/bin/UninstallApp-NT.bat.in
trunk/wrapper/src/bin/sh.script.in
trunk/wrapper/src/c/Makefile-aix-ppc-32.make
trunk/wrapper/src/c/Makefile-aix-ppc-64.make
trunk/wrapper/src/c/Makefile-freebsd-x86-32.gmake
trunk/wrapper/src/c/Makefile-freebsd-x86-64.gmake
trunk/wrapper/src/c/Makefile-hpux-ia-32.make
trunk/wrapper/src/c/Makefile-hpux-ia-64.make
trunk/wrapper/src/c/Makefile-hpux-parisc-32.make
trunk/wrapper/src/c/Makefile-hpux-parisc-64.make
trunk/wrapper/src/c/Makefile-irix-mips-32.cc
trunk/wrapper/src/c/Makefile-irix-mips-32.gmake
trunk/wrapper/src/c/Makefile-linux-armel-32.make
trunk/wrapper/src/c/Makefile-linux-armhf-32.make
trunk/wrapper/src/c/Makefile-linux-ia-64.make
trunk/wrapper/src/c/Makefile-linux-ppc-32.make
trunk/wrapper/src/c/Makefile-linux-ppc-64.make
trunk/wrapper/src/c/Makefile-linux-x86-32.make
trunk/wrapper/src/c/Makefile-linux-x86-64.make
trunk/wrapper/src/c/Makefile-macosx-universal-32.make
trunk/wrapper/src/c/Makefile-macosx-universal-64.make
trunk/wrapper/src/c/Makefile-osf1-alpha-64.gmake
trunk/wrapper/src/c/Makefile-solaris-sparc-32.gmake
trunk/wrapper/src/c/Makefile-solaris-sparc-64.gmake
trunk/wrapper/src/c/Makefile-solaris-x86-32.gmake
trunk/wrapper/src/c/Makefile-solaris-x86-64.gmake
trunk/wrapper/src/c/Makefile-windows-x86-32.nmake
trunk/wrapper/src/c/Wrapper.rc
trunk/wrapper/src/c/logger.c
trunk/wrapper/src/c/logger.h
trunk/wrapper/src/c/logger_base.h
trunk/wrapper/src/c/logger_file.c
trunk/wrapper/src/c/logger_file.h
trunk/wrapper/src/c/loggerjni.c
trunk/wrapper/src/c/loggerjni.h
trunk/wrapper/src/c/property.c
trunk/wrapper/src/c/property.h
trunk/wrapper/src/c/runnmake.bat
trunk/wrapper/src/c/test_example.c
trunk/wrapper/src/c/test_filter.c
trunk/wrapper/src/c/test_hashmap.c
trunk/wrapper/src/c/test_javaadditionalparam.c
trunk/wrapper/src/c/testsuite.c
trunk/wrapper/src/c/testsuite.h
trunk/wrapper/src/c/wrapper.c
trunk/wrapper/src/c/wrapper.h
trunk/wrapper/src/c/wrapper_file.c
trunk/wrapper/src/c/wrapper_file.h
trunk/wrapper/src/c/wrapper_hashmap.c
trunk/wrapper/src/c/wrapper_hashmap.h
trunk/wrapper/src/c/wrapper_i18n.c
trunk/wrapper/src/c/wrapper_i18n.h
trunk/wrapper/src/c/wrapper_unix.c
trunk/wrapper/src/c/wrapper_win.c
trunk/wrapper/src/c/wrappereventloop.c
trunk/wrapper/src/c/wrapperinfo.c.in
trunk/wrapper/src/c/wrapperinfo.h
trunk/wrapper/src/c/wrapperjni.c
trunk/wrapper/src/c/wrapperjni.h
trunk/wrapper/src/c/wrapperjni_unix.c
trunk/wrapper/src/c/wrapperjni_win.c
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperActionServer.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperGroup.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperInfo.java.in
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperJNIError.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperJarApp.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperLicenseError.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperListener.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperManager.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperPrintStream.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperProcess.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperProcessConfig.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperProcessInputStream.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperProcessOutputStream.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperProperties.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperPropertyUtil.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperResources.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperServiceException.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperShuttingDownException.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperSimpleApp.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperStartStopApp.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperSystemPropertyUtil.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperUNIXGroup.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperUNIXUser.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperUser.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperWin32Group.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperWin32Service.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperWin32User.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/demo/AboutDialog.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/demo/CustomizeDialog.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/demo/DeadLock.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/demo/DemoApp.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/demo/DemoAppMainFrame.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/demo/ExtensionFilter.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/demo/MailDialog.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperControlEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperCoreEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperEventListener.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperLogFileChangedEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperLoggingEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperPingEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperServiceActionEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperServiceControlEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperServiceEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperServicePauseEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperServiceResumeEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/event/WrapperTickEvent.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/jmx/WrapperManager.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/jmx/WrapperManagerMBean.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/jmx/WrapperManagerTesting.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/jmx/WrapperManagerTestingMBean.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/security/WrapperEventPermission.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/security/WrapperPermission.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/security/WrapperServicePermission.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/security/WrapperUserEventPermission.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/AbstractActionApp.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/BackgroundThreads.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/ChildWrapper.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/DaemonThreads.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/DeadLockBase.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/DeadLockMixed.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/DeadLockObject.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/DeadLockReentrantLock.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/DeadlockPrintStream.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/DelayedIORestarter.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/EnvironmentVariables.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/ExecThrasher.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/Filter.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/GrowingLogOutput.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/HugeLogOutput.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/JarMain.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LoadedGCOutput.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LoadedLogOutput.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LoadedSplitOutput.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LoadedWrapperListener.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LogOutput.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LogStdoutStderr.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LongRunningBackgroundThreads.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/Main.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/Memory.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/NestedWrapperListener.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/NoReturn.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/OnExit.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/OutputLoader.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/PercentOutput.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/Performance.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/PostShutdownGC.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/QuickComplete.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/Restarter.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/RuntimeExec.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/ShutdownHook.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/ShutdownLock.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/SimpleWrapperListener.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/SlowStop.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/StopWhileStarting.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/SystemProperty.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/TestUtils.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/TimedLogOutput.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test2/Jar2Main.java
trunk/wrapper/src/test/org/tanukisoftware/wrapper/WrapperManagerSystemTimeTestCase.java
Added Paths:
-----------
trunk/wrapper/doc/wrapper-community-license-1.3.txt
trunk/wrapper/src/c/makefile.inc
trunk/wrapper/src/c/makefile.targ.inc
Removed Paths:
-------------
trunk/wrapper/doc/wrapper-community-license-1.2.txt
Property Changed:
----------------
trunk/wrapper/src/c/
Modified: trunk/wrapper/README_de.txt
===================================================================
--- trunk/wrapper/README_de.txt 2014-12-08 06:05:16 UTC (rev 1924)
+++ trunk/wrapper/README_de.txt 2015-08-17 04:08:19 UTC (rev 1925)
@@ -1,6 +1,6 @@
-----------------------------------------------------------------------------
Java Service Wrapper Community Edition 3.5.27-a
-Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
+Copyright (C) 1999-2015 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
@@ -170,4 +170,4 @@
-----------------------------------------------------------------------------
-Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
+Copyright (C) 1999-2015 Tanuki Software, Ltd. All Rights Reserved.
Modified: trunk/wrapper/README_en.txt
===================================================================
--- trunk/wrapper/README_en.txt 2014-12-08 06:05:16 UTC (rev 1924)
+++ trunk/wrapper/README_en.txt 2015-08-17 04:08:19 UTC (rev 1925)
@@ -1,6 +1,6 @@
-----------------------------------------------------------------------------
Java Service Wrapper Community Edition 3.5.27-a
-Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
+Copyright (C) 1999-2015 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
@@ -161,4 +161,4 @@
-----------------------------------------------------------------------------
-Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
+Copyright (C) 1999-2015 Tanuki Software, Ltd. All Rights Reserved.
Modified: trunk/wrapper/README_es.txt
===================================================================
--- trunk/wrapper/README_es.txt 2014-12-08 06:05:16 UTC (rev 1924)
+++ trunk/wrapper/README_es.txt 2015-08-17 04:08:19 UTC (rev 1925)
@@ -1,6 +1,6 @@
-----------------------------------------------------------------------------
Java Service Wrapper Community Edition 3.5.27-a
-Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
+Copyright (C) 1999-2015 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
@@ -190,4 +190,4 @@
-----------------------------------------------------------------------------
-Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
+Copyright (C) 1999-2015 Tanuki Software, Ltd. All Rights Reserved.
Modified: trunk/wrapper/README_ja.txt
===================================================================
--- trunk/wrapper/README_ja.txt 2014-12-08 06:05:16 UTC (rev 1924)
+++ trunk/wrapper/README_ja.txt 2015-08-17 04:08:19 UTC (rev 1925)
@@ -1,6 +1,6 @@
-----------------------------------------------------------------------------
Java Service Wrapper Community Edition 3.5.27-a
-Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
+Copyright (C) 1999-2015 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
@@ -172,4 +172,4 @@
-----------------------------------------------------------------------------
-Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
+Copyright (C) 1999-2015 Tanuki Software, Ltd. All Rights Reserved.
Modified: trunk/wrapper/build-tests.xml
===================================================================
--- trunk/wrapper/build-tests.xml 2014-12-08 06:05:16 UTC (rev 1924)
+++ trunk/wrapper/build-tests.xml 2015-08-17 04:08:19 UTC (rev 1925)
@@ -559,9 +559,8 @@
value="wrapper.app.parameter.1=org.tanukisoftware.wrapper.test.QuickComplete" />
<echo file="${test.dir}/hugeclasspathenvmaxsize-path.conf" append="false" message="#encoding=UTF-8${line.separator}"/>
<script language="javascript">
- importClass(java.io.File)
echo = project.createTask("echo");
- echo.setFile(new File(project.getProperty("test.dir"), "hugeclasspathenvmaxsize-path.conf"));
+ echo.setFile(new java.io.File(project.getProperty("test.dir"), "hugeclasspathenvmaxsize-path.conf"));
echo.setAppend(true);
for (var i = 1000; i < 2362; i++) {
echo.setMessage("wrapper.java.classpath." + i + "=../lib/no-file-" + i + ".jar\n");
@@ -593,9 +592,8 @@
value="wrapper.app.parameter.1=org.tanukisoftware.wrapper.test.QuickComplete" />
<echo file="${test.dir}/hugeclasspathenvoversize-path.conf" append="false" message="#encoding=UTF-8${line.separator}"/>
<script language="javascript">
- importClass(java.io.File)
echo = project.createTask("echo");
- echo.setFile(new File(project.getProperty("test.dir"), "hugeclasspathenvoversize-path.conf"));
+ echo.setFile(new java.io.File(project.getProperty("test.dir"), "hugeclasspathenvoversize-path.conf"));
echo.setAppend(true);
for (var i = 1000; i < 2362; i++) {
echo.setMessage("wrapper.java.classpath." + i + "=../lib/no-file-" + i + ".jar\n");
Modified: trunk/wrapper/build.xml
===================================================================
--- trunk/wrapper/build.xml 2014-12-08 06:05:16 UTC (rev 1924)
+++ trunk/wrapper/build.xml 2015-08-17 04:08:19 UTC (rev 1925)
@@ -58,6 +58,8 @@
<equals arg1="${os.name}" arg2="Windows 7"/>
<equals arg1="${os.name}" arg2="Windows 8"/>
<equals arg1="${os.name}" arg2="Windows Server 2008"/>
+ <equals arg1="${os.name}" arg2="Windows Server 2008 R2"/>
+ <equals arg1="${os.name}" arg2="Windows Server 2012"/>
</or>
</condition>
<condition property="dist.os" value="linux">
@@ -320,9 +322,16 @@
<available file="${vcvars.v8_x86_64_6}"/>
</and>
</condition>
- <condition property="vcvars.bat" value="${vcvars.v8_ia_64_1}">
+ <condition property="vcvars.bat" value="${vcvars.v8_x86_64_7}">
<and>
<equals arg1="${bits}" arg2="64"/>
+ <equals arg1="${dist.arch}" arg2="x86"/>
+ <available file="${vcvars.v8_x86_64_7}"/>
+ </and>
+ </condition>
+ <condition property="vcvars.bat" value="${vcvars.v8_ia_64_1}">
+ <and>
+ <equals arg1="${bits}" arg2="64"/>
<equals arg1="${dist.arch}" arg2="ia"/>
<available file="${vcvars.v8_ia_64_1}"/>
</and>
@@ -662,7 +671,25 @@
<equals arg1="${bits}" arg2="64"/>
</condition>
<property name="makefile" value="Makefile-windows-x86-32.nmake"/>
+
+ <!-- architecture to be inserted in the manifest -->
+ <condition property="processor.architecture" value="ia64">
+ <equals arg1="${dist.arch}" arg2="ia"/>
+ </condition>
+ <condition property="processor.architecture" value="amd64">
+ <and>
+ <equals arg1="${dist.arch}" arg2="x86"/>
+ <equals arg1="${bits}" arg2="64"/>
+ </and>
+ </condition>
+ <property name="processor.architecture" value="x86"/>
+ <!-- Edit the manifest -->
+ <replace file="${src.dir}/c/wrapper.exe.manifest" token='SXS_ASSEMBLY_VERSION' value='"${version}"' />
+ <replace file="${src.dir}/c/wrapper.exe.manifest" token='SXS_PROCESSOR_ARCHITECTURE' value='"${processor.architecture}"' />
+ <replace file="${src.dir}/c/wrapper.dll.manifest" token='SXS_ASSEMBLY_VERSION' value='"${version}"' />
+ <replace file="${src.dir}/c/wrapper.dll.manifest" token='SXS_PROCESSOR_ARCHITECTURE' value='"${processor.architecture}"' />
+
<exec executable="${src.dir}/c/runnmake.bat"
dir="${src.dir}/c"
failonerror="true">
@@ -906,6 +933,10 @@
<copy file="${src.dir}/bin/QueryApp-NT.bat.in"
tofile="${bin.dir}/Query${app.caps.name}-NT.bat"
filtering="on"/>
+
+ <copy file="${src.dir}/bin/SetupApp.bat.in"
+ tofile="${bin.dir}/Setup${app.caps.name}.bat"
+ filtering="on"/>
</target>
<!-- =================================================================== -->
@@ -1194,10 +1225,11 @@
<include name="src/c/*.ico" />
<include name="src/c/*.bmp" />
<include name="src/c/*.bin" />
+ <include name="src/c/*.manifest" />
<exclude name="**/CVS/*" />
</fileset>
</copy>
-
+
<!-- Make sure that files are formatted correctly for their platforms -->
<fixcrlf srcdir="${intermdir}" includes="**/*.bat" eol="crlf" />
<fixcrlf srcdir="${intermdir}" includes="**/*.bat.in" eol="crlf" />
@@ -1388,9 +1420,11 @@
<include name="jdoc/**" />
<include name="doc/**" />
<include name="conf/demoapp.conf" />
+ <include name="src/c/*.manifest" />
<exclude name="**/CVS/*" />
</fileset>
</copy>
+
<!-- Copy a fresh wrapper.conf rather than the development file -->
<copy file="${src.dir}/conf/wrapper.conf.in"
tofile="${releasedir}/conf/wrapper.conf"
Modified: trunk/wrapper/default.properties
===================================================================
--- trunk/wrapper/default.properties 2014-12-08 06:05:16 UTC (rev 1924)
+++ trunk/wrapper/default.properties 2015-08-17 04:08:19 UTC (rev 1925)
@@ -11,7 +11,7 @@
Version = 3.5.27-a
version = ${Version}
version.root = 3.5.27-a
-year = 2014
+year = 2015
# NOTE - The version property gets corrupted by the use of Xalan
# so Version is used instead.
@@ -75,7 +75,8 @@
vcvars.v8_x86_64_4.arg.2=/RETAIL
vcvars.v8_x86_64_5=C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\SetEnv.cmd
vcvars.v8_x86_64_5.arg.1=/x64
-vcvars.v8_x86_64_6=c:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\VC\\bin\\x86_amd64\\vcvarsx86_amd64.bat
+vcvars.v8_x86_64_6=c:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\bin\\x86_amd64\\vcvarsx86_amd64.bat
+vcvars.v8_x86_64_7=c:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\bin\\x86_amd64\\vcvarsx86_amd64.bat
vcvars.v8_ia_64_1=c:\\Program Files\\Microsoft Platform SDK\\SetEnv.Cmd
vcvars.v8_ia_64_1.arg.1=/SRV64
vcvars.v8_ia_64_1.arg.2=/RETAIL
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-12-08 06:05:16 UTC (rev 1924)
+++ trunk/wrapper/doc/revisions.txt 2015-08-17 04:08:19 UTC (rev 1925)
@@ -1,6 +1,66 @@
Java Service Wrapper Revision History.
--------------------------------------
+3.5.27
+* Fix a misleading error message when there is a problem processing a system
+ error message on Windows.
+* Handle system exit codes with descriptions (Windows only).
+* Add new configuration file directives (#properties.on_overwrite.loglevel and
+ #properties.on_overwrite.exit) to better control how the wrapper should
+ behave when detecting duplicate property definitions.
+* Fix: No longer tries to resume a Windows service that is already running,
+ or pause a service that is already paused.
+* Improve accuracy of status messages when installing, removing, starting,
+ stopping, resuming and pausing a Windows service.
+* Improve the display of the available HostIds when calling 'wrapper -h'.
+* Fix the console flicker bug. Happened when wrapper.ntservice.generate_console
+ was set to TRUE, which is required for thread dumping.
+* Fix a problem on Windows with the consoleless version of the Wrapper. If a
+ splash screen was set at launch time, and if the wrapper eventually failed to
+ start normally, the splash screen did not disappear and remained on the top
+ of the log window.
+* Fix a problem on Windows platforms that caused the log window to overlap all
+ the other forms even when the focus was set on an other application.
+* Add the ability to define CPU affinity for the wrapper and JVM processes
+ (Windows and Linux systems, professional edition).
+* The wrapper can now be executed with a '--setup' option in order to install
+ components under elevated mode on Windows. During the installation, the
+ wrapper will register the application to the Windows Event Log system.
+ After the wrapper is executed with the '--setup' option, the Event Viewer
+ will no longer report that the installation was corrupted.
+* wrapper.exe and wrapper.dll are now manifested for compatibility with newer
+ versions of Windows (8.1 and above).
+* Modify the Community Edition license to allow the Wrapper to be integrated
+ and distributed with Products released under either the GPL version 2 or GPL
+ version 3 licenses.
+* Include the PID of the Wrapper and Java processes in debug output.
+* Fix a problem where the wrapper.jvm.port.min and wrapper.jvm.port.max
+ properties were being ignored. This meant that the defaults were always
+ being used. Since 3.5.26.
+* Fix a very infrequent issue in which the Wrapper would produce an out of
+ memory error or fail when trying to get the path to the Wrapper on Windows
+ XP.
+* Modify the wrapper.pausable and wrapper.pausable.stop_jvm properties so they
+ are no longer reloaded when wrapper.restart.reload_configuration=TRUE.
+* Fix a bug when the child process printing the JVM version became a zombie
+ after completion (problem known on CentOS). Add property
+ wrapper.java.version.timeout to let the user set a timeout for the child
+ process to print the JVM version before being terminated.
+* Avoid 4227 events in the Windows LogBook when using SOCKET values for the
+ wrapper.backend.type property. We now try to check the port status in
+ native code prior to opening it in Java. The Wrapper worked correctly, but
+ a Windows issue was causing warnings in the EventLog if the port had an
+ existing socket in the TIME_WAIT state from a previous JVM invocation.
+* Fix a problem on AIX with OpenJRE where the wrapper failed to load the
+ native library. The native library now has a '.so' extension like on other
+ UNIX platforms.
+* Fix a problem on HP-UX when listing HostIds with the 32-bit version of the
+ Wrapper. If several HostIds are available on the machine, the wrapper could
+ only get the first one and reported DLPI errors when attempting to get the
+ others. This issue remains in the 64-bit version and will be corrected in
+ a future release.
+
+
3.5.26
* Improve the log messages when a JVM restart is requested when the Wrapper is
in a state that it will be ignored.
@@ -13,11 +73,13 @@
(Solaris, MacOS, etc.) show an error message because '-o' is not a valid
parameter. Now we hide this error message to avoid confusion and we can
guess that Cygwin is not running.
-* Allow to control the service in systemd using the script file.
-* Improve script file. Fix a typo. On MacOS, add another alternative way to
- find Java and use full path to execute sysctl in case it's not in the path.
- Thanks to Dannes Wessels for pointing this out.
-* Fix a problem on newer version of Windows when customizing the Wrapper.
+* Add the ability to control running the service with systemd using the script
+ file.
+* On Mac OS X, fix a typo, add another alternative way to find Java to set
+ the JAVA_HOME environment variable, and use the full path to execute sysctl
+ in case it's not in the path. Thanks to Dannes Wessels for pointing this
+ out.
+* Fix a problem on newer versions of Windows when customizing the Wrapper.
The certificate was not removed when creating the target. This was leading
to an error when trying to sign the target with a new certificate.
* Add missing support in the shell script for restarting/stopping the Wrapper
@@ -25,7 +87,7 @@
* Add missing support in the shell script for restarting/stopping the Wrapper
service with Upstart.
* Add the ability to set the path of the 'su' command as well as the ability
- to specifiy additional options in the Wrapper shell script using new SU_BIN
+ to specify additional arguments in the Wrapper shell script using new SU_BIN
and SU_OPTS variables.
* Fix a problem in the WrapperSimpleApp, WrapperStartStopApp, and
WrapperJarApp helper classes where command line problems that resulted in
Deleted: trunk/wrapper/doc/wrapper-community-license-1.2.txt
===================================================================
--- trunk/wrapper/doc/wrapper-community-license-1.2.txt 2014-12-08 06:05:16 UTC (rev 1924)
+++ trunk/wrapper/doc/wrapper-community-license-1.2.txt 2015-08-17 04:08:19 UTC (rev 1925)
@@ -1,396 +0,0 @@
-----------------------------------------------------------------------
------------------ -----------------
- Tanuki Software, Ltd.
- Community Software License Agreement
- Version 1.2
-
-IMPORTANT-READ CAREFULLY: This license agreement is a legal agreement
-between you ("Licensee") and Tanuki Software, Ltd. ("TSI"), which
-includes computer software, associated media, printed materials, and
-may include online or electronic documentation ( Software ). PLEASE
-READ THIS AGREEMENT CAREFULLY BEFORE YOU INSTALL, COPY, DOWNLOAD OR
-USE THE SOFTWARE ACCOMPANYING THIS PACKAGE.
-
-Section 1 - Grant of License
-
-Community editions of the Software are made available on the GNU
-General Public License, Version 2 ("GPLv2"), included in Section 4 of
-this license document. All sections of the Community Software License
-Agreement must be complied with in addition to those of the GPLv2.
-
-
-Section 2 - Definitions
-
-2.1. "Community Edition" shall mean versions of the Software Program
-distributed in source form under this license agreement, and all new
-releases, corrections, enhancements and updates to the Software
-Program, which TSI makes generally available under this agreement.
-
-2.2. "Documentation" shall mean the contents of the website
-describing the functionality and use of the Software Program, located
-at http://wrapper.tanukisoftware.org
-
-2.3. "Product" shall mean the computer programs, that are provided by
-Licensee to Licensee customers or potential customers, and that
-contain both the Software Program as a component of the Product, and a
-component or components (other than the Software Program) that provide
-the material functionality of the Product. If the Product is released
-in source form, the Software Program or any of its components may only
-be included in executable form.
-
-2.4. "Software Program" shall mean the computer software and license
-file provided by TSI under this Agreement, including all new releases,
-corrections, enhancements and updates to such computer software, which
-TSI makes generally available and which Licensee receive pursuant to
-Licensee subscription to TSIMS. Some specific features or platforms
-may not be enabled if they do not fall under the feature set(s)
-covered by the specific license fees paid.
-
-2.5 "End User" shall mean the customers of the Licensee or any
-recipient of the Product whether or not any payment is made to use
-the Product.
-
-
-Section 3 - Licensee Obligations
-
-A copy of this license must be distributed in full with the Product
-in a location that is obvious to any End User.
-
-In accordance with Section 4, the full source code of all components
-of the Product must be made available to any and all End Users.
-
-Licensee may extend and/or modify the Software Program and distribute
-under the terms of this agreement provided that the copyright notice
-and license information displayed in the console and log files are
-not obfuscated or obstructed in any way.
-
-
-Section 4 - GPLv2 License Agreement
-
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
- Everyone is permitted to copy and distribute verbatim copies of
- this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
- freedom to share and change it. By contrast, the GNU General
- Public License is intended to guarantee your freedom to share and
- change free software--to make sure the software is free for all
- its users. This General Public License applies to most of the Free
- Software Foundation's software and to any other program whose
- authors commit to using it. (Some other Free Software Foundation
- software is covered by the GNU Library General Public License
- instead.) You can apply it to your programs, too.
-
- When we speak of free software, we are referring to freedom, not
- price. Our General Public Licenses are designed to make sure that
- you have the freedom to distribute copies of free software (and
- charge for this service if you wish), that you receive source code
- or can get it if you want it, that you can change the software or
- use pieces of it in new free programs; and that you know you can
- do these things.
-
- To protect your rights, we need to make restrictions that forbid
- anyone to deny you these rights or to ask you to surrender the
- rights. These restrictions translate to certain responsibilities
- for you if you distribute copies of the software, or if you modify
- it.
-
- For example, if you distribute copies of such a program, whether
- gratis or for a fee, you must give the recipients all the rights
- that you have. You must make sure that they, too, receive or can
- get the source code. And you must show them these terms so they
- know their rights.
-
- We protect your rights with two steps:
-
- (1) copyright the software, and
- (2) offer you this license which gives you legal permission to
- copy, distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make
- certain that everyone understands that there is no warranty for
- this free software. If the software is modified by someone else
- and passed on, we want its recipients to know that what they have
- is not the original, so that any problems introduced by others
- will not reflect on the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
- patents. We wish to avoid the danger that redistributors of a free
- program will individually obtain patent licenses, in effect making
- the program proprietary. To prevent this, we have made it clear
- that any patent must be licensed for everyone's free use or not
- licensed at all.
-
- The precise terms and conditions for copying, distribution and
- modification follow.
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which
- contains a notice placed by the copyright holder saying it may be
- distributed under the terms of this General Public License. The
- "Program", below, refers to any such program or work, and a "work
- based on the Program" means either the Program or any derivative
- work under copyright law: that is to say, a work containing the
- Program or a portion of it, either verbatim or with modifications
- and/or translated into another language. (Hereinafter, translation
- is included without limitation in the term "modification".) Each
- licensee is addressed as "you".
-
- Activities other than copying, distribution and modification are
- not covered by this License; they are outside its scope. The act
- of running the Program is not restricted, and the output from the
- Program is covered only if its contents constitute a work based on
- the Program (independent of having been made by running the
- Program). Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
- source code as you receive it, in any medium, provided that you
- conspicuously and appropriately publish on each copy an
- appropriate copyright notice and disclaimer of warranty; keep
- intact all the notices that refer to this License and to the
- absence of any warranty; and give any other recipients of the
- Program a copy of this License along with the Program.
-
- You may charge a fee for the physical act of transferring a copy,
- and you may at your option offer warranty protection in exchange
- for a fee.
-
- 2. You may modify your copy or copies of the Program or any
- portion of it, thus forming a work based on the Program, and copy
- and distribute such modifications or work under the terms of
- Section 1 above, provided that you also meet all of these
- conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but does
- not normally print such an announcement, your work based on the
- Program is not required to print an announcement.)
-
- These requirements apply to the modified work as a whole. If
- identifiable sections of that work are not derived from the
- Program, and can be reasonably considered independent and separate
- works in themselves, then this License, and its terms, do not
- apply to those sections when you distribute them as separate works.
- But when you distribute the same sections as part of a whole which
- is a work based on the Program, the distribution of the whole must
- be on the terms of this License, whose permissions for other
- licensees extend to the entire whole, and thus to each and every
- part regardless of who wrote it.
-
- Thus, it is not the intent of this section to claim rights or
- contest your rights to work written entirely by you; rather, the
- intent is to exercise the right to control the distribution of
- derivative or collective works based on the Program.
-
- In addition, mere aggregation of another work not based on the
- Program with the Program (or with a work based on the Program) on
- a volume of a storage or distribution medium does not bring the
- other work under the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
- under Section 2) in object code or executable form under the terms
- of Sections 1 and 2 above provided that you also do one of the
- following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software
- interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
- The source code for a work means the preferred form of the work
- for making modifications to it. For an executable work, complete
- source code means all the source code for all modules it contains,
- plus any associated interface definition files, plus the scripts
- used to control compilation and installation of the executable.
- However, as a special exception, the source code distributed need
- not include anything that is normally distributed (in either
- source or binary form) with the major components (compiler,
- kernel, and so on) of the operating system on which the executable
- runs, unless that component itself accompanies the executable.
-
- If distribution of executable or object code is made by offering
- access to copy from a designated place, then offering equivalent
- access to copy the source code from the same place counts as
- distribution of the source code, even though third parties are not
- compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense or distribute the Program is
- void, and will automatically terminate your rights under this
- License. However, parties who have received copies, or rights,
- from you under this License will not have their licenses
- terminated so long as such parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
- signed it. However, nothing else grants you permission to modify
- or distribute the Program or its derivative works. These actions
- are prohibited by law if you do not accept this License.
- Therefore, by modifying or distributing the Program (or any work
- based on the Program), you indicate your acceptance of this
- License to do so, and all its terms and conditions for copying,
- distributing or modifying the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on
- the Program), the recipient automatically receives a license from
- the original licensor to copy, distribute or modify the Program
- subject to these terms and conditions. You may not impose any
- further restrictions on the recipients' exercise of the rights
- granted herein. You are not responsible for enforcing compliance
- by third parties to this License.
-
- 7. If, as a consequence of a court judgment or allegation of
- patent infringement or for any other reason (not limited to
- patent issues), conditions are imposed on you (whether by court
- order, agreement or otherwise) that contradict the conditions of
- this License, they do not excuse you from the conditions of this
- License. If you cannot distribute so as to satisfy simultaneously
- your obligations under this License and any other pertinent
- obligations, then as a consequence you may not distribute the
- Program at all. For example, if a patent license would not permit
- royalty-free redistribution of the Program by all those who
- receive copies directly or indirectly through you, then the only
- way you could satisfy both it and this License would be to refrain
- entirely from distribution of the Program.
-
- If any portion of this section is held invalid or unenforceable
- under any particular circumstance, the balance of the section is
- intended to apply and the section as a whole is intended to apply
- in other circumstances.
-
- It is not the purpose of this section to induce you to infringe
- any patents or other property right claims or to contest validity
- of any such claims; this section has the sole purpose of
- protecting the integrity of the free software distribution system,
- which is implemented by public license practices. Many people have
- made generous contributions to the wide range of software
- distributed through that system in reliance on consistent
- application of that system; it is up to the author/donor to decide
- if he or she is willing to distribute software through any other
- system and a licensee cannot impose that choice.
-
- This section is intended to make thoroughly clear what is believed
- to be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
- certain countries either by patents or by copyrighted interfaces,
- the original copyright holder who places the Program under this
- License may add an explicit geographical distribution limitation
- excluding those countries, so that distribution is permitted only
- in or among countries not thus excluded. In such case, this
- License incorporates the limitation as if written in the body of
- this License.
-
- 9. The Free Software Foundation may publish revised and/or new
- versions of the General Public License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
- Program specifies a version number of this License which applies
- to it and "any later version", you have the option of following
- the terms and conditions either of that version or of any later
- version published by the Free Software Foundation. If the Program
- does not specify a version number of this License, you may choose
- any version ever published by the Free Software Foundation.
-
- 10. If you wish to incorporate parts of the Program into other
- free programs whose distribution conditions are different, write
- to the author to ask for permission. For software which is
- copyrighted by the Free Software Foundation, write to the Free
- Software Foundation; we sometimes make exceptions for this. Our
- decision will be guided by the two goals of preserving the free
- status of all derivatives of our free software and of promoting
- the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
- WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
- LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
- AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
- OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
- PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
- DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
- OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
- MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
- INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
- INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
- OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
- OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-
-Section 4 - 3rd Party Components
-
-(1) The Software Program includes software and documentation components
-developed in part by Silver Egg Technology, Inc.("SET") prior to 2001
-and released under the following license.
-
- Copyright (c) 2001 Silver Egg Technology
-
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sub-license, and/or
- sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
-
Added: trunk/wrapper/doc/wrapper-community-license-1.3.txt
===================================================================
--- trunk/wrapper/doc/wrapper-community-license-1.3.txt (rev 0)
+++ trunk/wrapper/doc/wrapper-community-license-1.3.txt 2015-08-17 04:08:19 UTC (rev 1925)
@@ -0,0 +1,1062 @@
+----------------------------------------------------------------------
+----------------- -----------------
+ Tanuki Software, Ltd.
+ Community Software License Agreement
+ Version 1.3
+
+IMPORTANT-READ CAREFULLY: This license agreement is a legal agreement
+between you ("Licensee") and Tanuki Software, Ltd. ("TSI"), which
+includes computer software, associated media, printed materials, and
+may include online or electronic documentation ( Software ). PLEASE
+READ THIS AGREEMENT CAREFULLY BEFORE YOU INSTALL, COPY, DOWNLOAD OR
+USE THE SOFTWARE ACCOMPANYING THIS PACKAGE.
+
+Section 1 - Grant of License
+
+Community editions of the Software are made available on the GNU
+General Public License, Version 2 ("GPLv2") or Version 3 ("GPLv3"),
+included in Sections 4 and 5 of this license document. All sections
+of the Community Software License Agreement must be complied with in
+addition to those of either the GPLv2 or GPLv3. This license allows
+the Software Program to be used with Products that are released under
+either GPLv2 or GPLv3.
+
+
+Section 2 - Definitions
+
+2.1. "Community Edition" shall mean versions of the Software Program
+distributed in source form under this license agreement, and all new
+releases, corrections, enhancements and updates to the Software
+Program, which TSI makes generally available under this agreement.
+
+2.2. "Documentation" shall mean the contents of the website
+describing the functionality and use of the Software Program, located
+at http://wrapper.tanukisoftware.org
+
+2.3. "Product" shall mean the computer programs, that are provided by
+Licensee to Licensee customers or potential customers, and that
+contain both the Software Program as a component of the Product, and a
+component or components (other than the Software Program) that provide
+the material functionality of the Product. If the Product is released
+in source form, the Software Program or any of its components may only
+be included in executable form.
+
+2.4. "Software Program" shall mean the computer software and license
+file provided by TSI under this Agreement, including all new releases,
+corrections, enhancements and updates to such computer software, which
+TSI makes generally available and which Licensee receive pursuant to
+Licensee subscription to TSIMS. Some specific features or platforms
+may not be enabled if they do not fall under the feature set(s)
+covered by the specific license fees paid.
+
+2.5 "End User" shall mean the customers of the Licensee or any
+recipient of the Product whether or not any payment is made to use
+the Product.
+
+
+Section 3 - Licensee Obligations
+
+A copy of this license must be distributed in full with the Product
+in a location that is obvious to any End User.
+
+In accordance with Section 4, the full source code of all components
+of the Product must be made available to any and all End Users.
+
+Licensee may extend and/or modify the Software Program and distribute
+under the terms of this agreement provided that the copyright notice
+and license information displayed in the console and log files are
+not obfuscated or obstructed in any way.
+
+
+Section 4 - GPLv2 License Agreement
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+ Everyone is permitted to copy and distribute verbatim copies of
+ this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+ freedom to share and change it. By contrast, the GNU General
+ Public License is intended to guarantee your freedom to share and
+ change free software--to make sure the software is free for all
+ its users. This General Public License applies to most of the Free
+ Software Foundation's software and to any other program whose
+ authors commit to using it. (Some other Free Software Foundation
+ software is covered by the GNU Library General Public License
+ instead.) You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+ price. Our General Public Licenses are designed to make sure that
+ you have the freedom to distribute copies of free software (and
+ charge for this service if you wish), that you receive source code
+ or can get it if you want it, that you can change the software or
+ use pieces of it in new free programs; and that you know you can
+ do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+ anyone to deny you these rights or to ask you to surrender the
+ rights. These restrictions translate to certain responsibilities
+ for you if you distribute copies of the software, or if you modify
+ it.
+
+ For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must give the recipients all the rights
+ that you have. You must make sure that they, too, receive or can
+ get the source code. And you must show them these terms so they
+ know their rights.
+
+ We protect your rights with two steps:
+
+ (1) copyright the software, and
+ (2) offer you this license which gives you legal permission to
+ copy, distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make
+ certain that everyone understands that there is no warranty for
+ this free software. If the software is modified by someone else
+ and passed on, we want its recipients to know that what they have
+ is not the original, so that any problems introduced by others
+ will not reflect on the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+ patents. We wish to avoid the danger that redistributors of a free
+ program will individually obtain patent licenses, in effect making
+ the program proprietary. To prevent this, we have made it clear
+ that any patent must be licensed for everyone's free use or not
+ licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+ modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which
+ contains a notice placed by the copyright holder saying it may be
+ distributed under the terms of this General Public License. The
+ "Program", below, refers to any such program or work, and a "work
+ based on the Program" means either the Program or any derivative
+ work under copyright law: that is to say, a work containing the
+ Program or a portion of it, either verbatim or with modifications
+ and/or translated into another language. (Hereinafter, translation
+ is included without limitation in the term "modification".) Each
+ licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running the Program is not restricted, and the output from the
+ Program is covered only if its contents constitute a work based on
+ the Program (independent of having been made by running the
+ Program). Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an
+ appropriate copyright notice and disclaimer of warranty; keep
+ intact all the notices that refer to this License and to the
+ absence of any warranty; and give any other recipients of the
+ Program a copy of this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 2. You may modify your copy or copies of the Program or any
+ portion of it, thus forming a work based on the Program, and copy
+ and distribute such modifications or work under the terms of
+ Section 1 above, provided that you also meet all of these
+ conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but does
+ not normally print such an announcement, your work based on the
+ Program is not required to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Program, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not
+ apply to those sections when you distribute them as separate works.
+ But when you distribute the same sections as part of a whole which
+ is a work based on the Program, the distribution of the whole must
+ be on the terms of this License, whose permissions for other
+ licensees extend to the entire whole, and thus to each and every
+ part regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Program.
+
+ In addition, mere aggregation of another work not ba...
[truncated message content] |
|
From: <mor...@us...> - 2014-12-08 06:05:29
|
Revision: 1924
http://sourceforge.net/p/wrapper/code/1924
Author: mortenson
Date: 2014-12-08 06:05:16 +0000 (Mon, 08 Dec 2014)
Log Message:
-----------
Up version to prep for next release.
Modified Paths:
--------------
trunk/wrapper/README_de.txt
trunk/wrapper/README_en.txt
trunk/wrapper/README_es.txt
trunk/wrapper/README_ja.txt
trunk/wrapper/default.properties
trunk/wrapper/src/bin/App.bat.in
trunk/wrapper/src/bin/AppCommand.bat.in
trunk/wrapper/src/bin/AppTemplate.bat.in
trunk/wrapper/src/bin/AppTemplatePassThrough.bat.in
trunk/wrapper/src/bin/InstallApp-NT.bat.in
trunk/wrapper/src/bin/PauseApp-NT.bat.in
trunk/wrapper/src/bin/QueryApp-NT.bat.in
trunk/wrapper/src/bin/ResumeApp-NT.bat.in
trunk/wrapper/src/bin/StartApp-NT.bat.in
trunk/wrapper/src/bin/StopApp-NT.bat.in
trunk/wrapper/src/bin/UninstallApp-NT.bat.in
trunk/wrapper/src/bin/sh.script.in
trunk/wrapper/src/c/Wrapper.rc
trunk/wrapper/src/c/wrapperinfo.c.in
Modified: trunk/wrapper/README_de.txt
===================================================================
--- trunk/wrapper/README_de.txt 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/README_de.txt 2014-12-08 06:05:16 UTC (rev 1924)
@@ -1,5 +1,5 @@
-----------------------------------------------------------------------------
-Java Service Wrapper Community Edition 3.5.26
+Java Service Wrapper Community Edition 3.5.27-a
Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
Modified: trunk/wrapper/README_en.txt
===================================================================
--- trunk/wrapper/README_en.txt 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/README_en.txt 2014-12-08 06:05:16 UTC (rev 1924)
@@ -1,5 +1,5 @@
-----------------------------------------------------------------------------
-Java Service Wrapper Community Edition 3.5.26
+Java Service Wrapper Community Edition 3.5.27-a
Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
Modified: trunk/wrapper/README_es.txt
===================================================================
--- trunk/wrapper/README_es.txt 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/README_es.txt 2014-12-08 06:05:16 UTC (rev 1924)
@@ -1,5 +1,5 @@
-----------------------------------------------------------------------------
-Java Service Wrapper Community Edition 3.5.26
+Java Service Wrapper Community Edition 3.5.27-a
Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
Modified: trunk/wrapper/README_ja.txt
===================================================================
--- trunk/wrapper/README_ja.txt 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/README_ja.txt 2014-12-08 06:05:16 UTC (rev 1924)
@@ -1,5 +1,5 @@
-----------------------------------------------------------------------------
-Java Service Wrapper Community Edition 3.5.26
+Java Service Wrapper Community Edition 3.5.27-a
Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
Modified: trunk/wrapper/default.properties
===================================================================
--- trunk/wrapper/default.properties 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/default.properties 2014-12-08 06:05:16 UTC (rev 1924)
@@ -8,9 +8,9 @@
name = wrapper
Name = Wrapper
long.name = Java Service Wrapper Community ${Version}
-Version = 3.5.26
+Version = 3.5.27-a
version = ${Version}
-version.root = 3.5.26
+version.root = 3.5.27-a
year = 2014
# NOTE - The version property gets corrupted by the use of Xalan
# so Version is used instead.
Modified: trunk/wrapper/src/bin/App.bat.in
===================================================================
--- trunk/wrapper/src/bin/App.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/App.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -15,7 +15,7 @@
rem
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/AppCommand.bat.in
===================================================================
--- trunk/wrapper/src/bin/AppCommand.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/AppCommand.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/AppTemplate.bat.in
===================================================================
--- trunk/wrapper/src/bin/AppTemplate.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/AppTemplate.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/AppTemplatePassThrough.bat.in
===================================================================
--- trunk/wrapper/src/bin/AppTemplatePassThrough.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/AppTemplatePassThrough.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -15,7 +15,7 @@
rem
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/InstallApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/InstallApp-NT.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/InstallApp-NT.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -15,7 +15,7 @@
rem
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/PauseApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/PauseApp-NT.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/PauseApp-NT.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/QueryApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/QueryApp-NT.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/QueryApp-NT.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/ResumeApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/ResumeApp-NT.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/ResumeApp-NT.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/StartApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/StartApp-NT.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/StartApp-NT.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/StopApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/StopApp-NT.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/StopApp-NT.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/UninstallApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/UninstallApp-NT.bat.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/UninstallApp-NT.bat.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26 of the Wrapper.
+rem Optimized for use with version 3.5.27-a of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/sh.script.in
===================================================================
--- trunk/wrapper/src/bin/sh.script.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/bin/sh.script.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -16,7 +16,7 @@
#-----------------------------------------------------------------------------
# These settings can be modified to fit the needs of your application
-# Optimized for use with version 3.5.26 of the Wrapper.
+# Optimized for use with version 3.5.27-a of the Wrapper.
# IMPORTANT - Please always stop and uninstall an application before making
# any changes to this file. Failure to do so could remove the
@@ -951,7 +951,7 @@
prepAdditionalParams "$@"
# The string passed to eval must handles spaces in paths correctly.
- COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.26 $ADDITIONAL_PARA"
+ COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.27-a $ADDITIONAL_PARA"
eval $COMMAND_LINE
else
eval echo `gettext '$APP_LONG_NAME is already running.'`
@@ -974,7 +974,7 @@
prepAdditionalParams "$@"
# The string passed to eval must handles spaces in paths correctly.
- COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.26 $ADDITIONAL_PARA"
+ COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.27-a $ADDITIONAL_PARA"
eval $COMMAND_LINE
else
eval echo `gettext '$APP_LONG_NAME is already running.'`
@@ -1227,7 +1227,7 @@
prepAdditionalParams "$@"
# The string passed to eval must handles spaces in paths correctly.
- COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.26 $ADDITIONAL_PARA"
+ COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.27-a $ADDITIONAL_PARA"
eval $COMMAND_LINE
else
eval echo `gettext '$APP_LONG_NAME is already running.'`
Modified: trunk/wrapper/src/c/Wrapper.rc
===================================================================
--- trunk/wrapper/src/c/Wrapper.rc 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/c/Wrapper.rc 2014-12-08 06:05:16 UTC (rev 1924)
@@ -53,8 +53,8 @@
// http://msdn.microsoft.com/en-us/library/aa381058%28VS.85%29.aspx
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,5,26,0
- PRODUCTVERSION 3,5,26,0
+ FILEVERSION 3,5,27,0
+ PRODUCTVERSION 3,5,27,0
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -70,13 +70,13 @@
BLOCK "000904b0"
BEGIN
VALUE "CompanyName", "Tanuki Software, Ltd."
- VALUE "FileDescription", "Java Service Wrapper Community Edition 3.5.26"
- VALUE "FileVersion", "3, 5, 26, 0"
+ VALUE "FileDescription", "Java Service Wrapper Community Edition 3.5.27-a"
+ VALUE "FileVersion", "3, 5, 27, 0"
VALUE "LegalCopyright", "Copyright (C) 1999, 2014 Tanuki Software, Ltd. All rights reserved."
VALUE "InternalName", "wrapper"
VALUE "OriginalFilename", "wrapper.exe"
VALUE "ProductName", "Java Service Wrapper Community"
- VALUE "ProductVersion", "3, 5, 26, 0"
+ VALUE "ProductVersion", "3, 5, 27, 0"
END
END
BLOCK "VarFileInfo"
Modified: trunk/wrapper/src/c/wrapperinfo.c.in
===================================================================
--- trunk/wrapper/src/c/wrapperinfo.c.in 2014-12-08 05:50:40 UTC (rev 1923)
+++ trunk/wrapper/src/c/wrapperinfo.c.in 2014-12-08 06:05:16 UTC (rev 1924)
@@ -30,7 +30,7 @@
TCHAR *wrapperBits = TEXT("@bits@");
TCHAR *wrapperArch = TEXT("@dist.arch@");
TCHAR *wrapperOS = TEXT("@dist.os@");
-TCHAR *wrapperReleaseDate = TEXT("20141205");
+TCHAR *wrapperReleaseDate = TEXT("20141231");
TCHAR *wrapperReleaseTime = TEXT("0000");
TCHAR *wrapperBuildDate = TEXT("@build.date@");
TCHAR *wrapperBuildTime = TEXT("@build.time@");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-12-08 05:50:48
|
Revision: 1923
http://sourceforge.net/p/wrapper/code/1923
Author: mortenson
Date: 2014-12-08 05:50:40 +0000 (Mon, 08 Dec 2014)
Log Message:
-----------
Release 3.5.26
Added Paths:
-----------
tags/WRAPPER_3_5_26/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-12-05 00:58:01
|
Revision: 1922
http://sourceforge.net/p/wrapper/code/1922
Author: mortenson
Date: 2014-12-05 00:57:53 +0000 (Fri, 05 Dec 2014)
Log Message:
-----------
Modify the PIPE send fix from yesterday so the max send size is now dynamic. Not sure if it is necessary, but it will be safe in case it is different on different systems.
Modified Paths:
--------------
trunk/wrapper/src/c/wrapper.c
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-12-04 11:37:09 UTC (rev 1921)
+++ trunk/wrapper/src/c/wrapper.c 2014-12-05 00:57:53 UTC (rev 1922)
@@ -2036,6 +2036,9 @@
int returnVal = FALSE;
int ok = TRUE;
size_t sent;
+#ifdef WIN32
+ int maxSendSize;
+#endif
/* It is important than there is never more than one thread allowed in here at a time. */
if (lockProtocolMutex()) {
@@ -2172,10 +2175,17 @@
}
}
+ /* When actually sending the packet, we need to be careful to make sure that the entire packet gets sent.
+ * There isssues on both sockets and Pipes where the send will fail if the packet is too large.
+ * In such cases, it needs to be broken up into multiple calls.
+ * This is currently only an issue with the PROPERTIES packet. */
if (wrapperData->backendType == WRAPPER_BACKEND_TYPE_PIPE) {
sent = 0;
cnt = 0;
sendCnt = 0;
+#ifdef WIN32
+ maxSendSize = 40000;
+#endif
while ((sent < len) && (cnt < 200)) {
if (cnt > 0) {
wrapperSleep(10);
@@ -2183,13 +2193,20 @@
#ifdef WIN32
/* Send a maximum of 32000 characters per call as larger values appear to fail without error. */
- if (WriteFile(protocolActiveServerPipeOut, protocolSendBuffer + sent, __min(32000, sizeof(char) * (int)(len - sent)), &inWritten, NULL) == FALSE) {
+ if (WriteFile(protocolActiveServerPipeOut, protocolSendBuffer + sent, __min(maxSendSize, sizeof(char) * (int)(len - sent)), &inWritten, NULL) == FALSE) {
#else
if ((inWritten = write(protocolActiveServerPipeOut, protocolSendBuffer + sent, sizeof(char) * (int)(len - sent))) == -1) {
#endif
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_FATAL, TEXT("Writing to the backend pipe failed (%d): %s"), wrapperGetLastError(), getLastErrorText());
returnVal = TRUE;
break;
+#ifdef WIN32
+ } else if (inWritten == 0) {
+ /* Didn't write anything, but not an error.
+ * Have not found this documented anywhere, but it happens if the size is larger than some hidden limit. */
+ maxSendSize = __max(512, (int)(maxSendSize * 0.90));
+ sendCnt++;
+#endif
} else {
/* Write N characters */
if (((sent + inWritten < len) || (sendCnt > 0)) && wrapperData->isDebugging) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-12-04 11:37:13
|
Revision: 1921
http://sourceforge.net/p/wrapper/code/1921
Author: mortenson
Date: 2014-12-04 11:37:09 +0000 (Thu, 04 Dec 2014)
Log Message:
-----------
Fix a problem sending large configuration files via a pipe to the JVM on Windows.
Modified Paths:
--------------
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/c/wrapper.c
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-12-04 11:03:03 UTC (rev 1920)
+++ trunk/wrapper/doc/revisions.txt 2014-12-04 11:37:09 UTC (rev 1921)
@@ -85,6 +85,10 @@
connection. This would happen regardless of the backend type used. The
size of the configuration file that would cause a problem varied greatly
based on the specific system.
+* Fix a problem on Windows platforms where a very large configuration file
+ would fail to be sent to the WrapperManager on startup when the
+ wrapper.backend.type property was set to PIPE. The only problem was that
+ the WrapperManager.getProperties() method would be empty.
* (Professional) Add checks to the WrapperManager.exec() methods on Windows
for the maximum command line length of 32766, and maximum environment
variable name-value pair length of 32767.
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-12-04 11:03:03 UTC (rev 1920)
+++ trunk/wrapper/src/c/wrapper.c 2014-12-04 11:37:09 UTC (rev 1921)
@@ -2153,7 +2153,7 @@
/* A socket was not opened */
if (wrapperData->isDebugging) {
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG,
- TEXT("socket not open, so packet not sent %s : %s"),
+ TEXT("Socket not open, so packet not sent %s : %s"),
wrapperProtocolGetCodeName(function), (logMsgW == NULL ? TEXT("NULL") : logMsgW));
}
returnVal = TRUE;
@@ -2162,23 +2162,47 @@
if ((function == WRAPPER_MSG_PING) && messageW && (_tcsstr(messageW, TEXT("silent")) == messageW)) {
/*
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG,
- TEXT("send a silent ping packet %s : %s"),
+ TEXT("Send a silent ping packet %s : %s"),
wrapperProtocolGetCodeName(function), (logMsgW == NULL ? TEXT("NULL") : logMsgW));
*/
} else {
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG,
- TEXT("send a packet %s : %s"),
+ TEXT("Send a packet %s : %s"),
wrapperProtocolGetCodeName(function), (logMsgW == NULL ? TEXT("NULL") : logMsgW));
}
}
if (wrapperData->backendType == WRAPPER_BACKEND_TYPE_PIPE) {
+ sent = 0;
+ cnt = 0;
+ sendCnt = 0;
+ while ((sent < len) && (cnt < 200)) {
+ if (cnt > 0) {
+ wrapperSleep(10);
+ }
+
#ifdef WIN32
- if (WriteFile(protocolActiveServerPipeOut, protocolSendBuffer, sizeof(char) * (int)len, &inWritten, NULL) == FALSE) {
+ /* Send a maximum of 32000 characters per call as larger values appear to fail without error. */
+ if (WriteFile(protocolActiveServerPipeOut, protocolSendBuffer + sent, __min(32000, sizeof(char) * (int)(len - sent)), &inWritten, NULL) == FALSE) {
#else
- if ((inWritten = write(protocolActiveServerPipeOut, protocolSendBuffer, sizeof(char) * (int)len)) == -1) {
+ if ((inWritten = write(protocolActiveServerPipeOut, protocolSendBuffer + sent, sizeof(char) * (int)(len - sent))) == -1) {
#endif
- log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_FATAL, TEXT("Writing to the backend pipe failed (%d): %s"), wrapperGetLastError(), getLastErrorText());
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_FATAL, TEXT("Writing to the backend pipe failed (%d): %s"), wrapperGetLastError(), getLastErrorText());
+ returnVal = TRUE;
+ break;
+ } else {
+ /* Write N characters */
+ if (((sent + inWritten < len) || (sendCnt > 0)) && wrapperData->isDebugging) {
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT(" Sent %d bytes, %d remaining."), inWritten, len - sent - inWritten );
+ }
+ sent += inWritten;
+ sendCnt++;
+ }
+
+ cnt++;
+ }
+ if (sent < len) {
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("%s send failed. Incomplete. Sent %d of %d bytes."), TEXT("Pipe"), sent, len);
returnVal = TRUE;
}
} else {
@@ -2227,7 +2251,7 @@
wrapperProtocolClose();
returnVal = TRUE;
} else if (sent < len) {
- log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("Socket send failed. Incomplete. Sent %d of %d bytes."), sent, len);
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("%s send failed. Incomplete. Sent %d of %d bytes."), TEXT("Socket"), sent, len);
returnVal = TRUE;
} else {
returnVal = FALSE;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-12-04 11:03:08
|
Revision: 1920
http://sourceforge.net/p/wrapper/code/1920
Author: mortenson
Date: 2014-12-04 11:03:03 +0000 (Thu, 04 Dec 2014)
Log Message:
-----------
Reduce debug output from last commit when packet is sent in a single call.
Modified Paths:
--------------
trunk/wrapper/src/c/wrapper.c
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-12-04 10:49:02 UTC (rev 1919)
+++ trunk/wrapper/src/c/wrapper.c 2014-12-04 11:03:03 UTC (rev 1920)
@@ -2199,12 +2199,12 @@
break;
}
} else if (rc < 0) {
- log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("send unexpectedly returned %d"), rc);
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("Send unexpectedly returned %d"), rc);
break;
} else {
/* Wrote N characters. */
- if (((sent < len) || (sendCnt > 0)) && wrapperData->isDebugging) {
- log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT(" sent %d bytes, %d remaining."), rc, len - sent - rc );
+ if (((sent + rc < len) || (sendCnt > 0)) && wrapperData->isDebugging) {
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT(" Sent %d bytes, %d remaining."), rc, len - sent - rc );
}
sent += rc;
sendCnt++;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-12-04 10:49:06
|
Revision: 1919
http://sourceforge.net/p/wrapper/code/1919
Author: mortenson
Date: 2014-12-04 10:49:02 +0000 (Thu, 04 Dec 2014)
Log Message:
-----------
Fix a problem on UNIX where a very large configuration file could cause the WrapperManager to fail to start.
Modified Paths:
--------------
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/c/wrapper.c
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-12-04 05:59:42 UTC (rev 1918)
+++ trunk/wrapper/doc/revisions.txt 2014-12-04 10:49:02 UTC (rev 1919)
@@ -79,6 +79,12 @@
than the system maximum. This maximum varies greatly by platform and
environment and is difficult to calculate reliably, so the maximum length
is not currently shown in the message.
+* Fix a problem on UNIX platforms where a very large configuration file could
+ cause the WrapperManager to fail to startup. This was caused by the partial
+ transfer of the configuration file to the WrapperManager via the backend
+ connection. This would happen regardless of the backend type used. The
+ size of the configuration file that would cause a problem varied greatly
+ based on the specific system.
* (Professional) Add checks to the WrapperManager.exec() methods on Windows
for the maximum command line length of 32766, and maximum environment
variable name-value pair length of 32767.
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-12-04 05:59:42 UTC (rev 1918)
+++ trunk/wrapper/src/c/wrapper.c 2014-12-04 10:49:02 UTC (rev 1919)
@@ -2026,13 +2026,16 @@
#endif
#endif
int rc;
- int cnt, inWritten;
+ int cnt;
+ int sendCnt;
+ int inWritten;
size_t len;
TCHAR *logMsgW;
const TCHAR *messageTemplate;
char *messageMB = NULL;
int returnVal = FALSE;
int ok = TRUE;
+ size_t sent;
/* It is important than there is never more than one thread allowed in here at a time. */
if (lockProtocolMutex()) {
@@ -2179,33 +2182,53 @@
returnVal = TRUE;
}
} else {
+ sent = 0;
cnt = 0;
- do {
+ sendCnt = 0;
+ rc = 0;
+ while ((sent < len) && (cnt < 200)) {
if (cnt > 0) {
wrapperSleep(10);
}
- rc = send(protocolActiveBackendSD, protocolSendBuffer, sizeof(char) * (int)len, 0);
+ rc = send(protocolActiveBackendSD, protocolSendBuffer + sent, sizeof(char) * (int)(len - sent), 0);
+ if (rc == SOCKET_ERROR) {
+ if (wrapperGetLastError() == WRAPPER_EWOULDBLOCK) {
+ /* The output buffer is simply full right now. Try again in a bit. */
+ } else {
+ break;
+ }
+ } else if (rc < 0) {
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("send unexpectedly returned %d"), rc);
+ break;
+ } else {
+ /* Wrote N characters. */
+ if (((sent < len) || (sendCnt > 0)) && wrapperData->isDebugging) {
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT(" sent %d bytes, %d remaining."), rc, len - sent - rc );
+ }
+ sent += rc;
+ sendCnt++;
+ }
+
cnt++;
- } while ((rc == SOCKET_ERROR) && (wrapperGetLastError() == WRAPPER_EWOULDBLOCK) && (cnt < 200));
+ }
if (rc == SOCKET_ERROR) {
if (wrapperGetLastError() == WRAPPER_EWOULDBLOCK) {
- log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_WARN, TEXT(
- "socket send failed. Blocked for 2 seconds. %s"),
- getLastErrorText());
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_WARN, TEXT("Socket send failed. Blocked for 2 seconds. %s"), getLastErrorText());
#ifdef WIN32
} else if (wrapperGetLastError() == WSAECONNRESET) {
- log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT(
- "socket send failed. %s"), getLastErrorText());
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("Socket send failed. %s"), getLastErrorText());
#endif
} else {
if (wrapperData->isDebugging) {
- log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT(
- "socket send failed. %s"), getLastErrorText());
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT("Socket send failed. %s"), getLastErrorText());
}
}
wrapperProtocolClose();
returnVal = TRUE;
+ } else if (sent < len) {
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("Socket send failed. Incomplete. Sent %d of %d bytes."), sent, len);
+ returnVal = TRUE;
} else {
returnVal = FALSE;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-12-04 05:59:45
|
Revision: 1918
http://sourceforge.net/p/wrapper/code/1918
Author: mortenson
Date: 2014-12-04 05:59:42 +0000 (Thu, 04 Dec 2014)
Log Message:
-----------
Update release date.
Modified Paths:
--------------
trunk/wrapper/src/c/wrapperinfo.c.in
Modified: trunk/wrapper/src/c/wrapperinfo.c.in
===================================================================
--- trunk/wrapper/src/c/wrapperinfo.c.in 2014-12-04 05:58:42 UTC (rev 1917)
+++ trunk/wrapper/src/c/wrapperinfo.c.in 2014-12-04 05:59:42 UTC (rev 1918)
@@ -30,7 +30,7 @@
TCHAR *wrapperBits = TEXT("@bits@");
TCHAR *wrapperArch = TEXT("@dist.arch@");
TCHAR *wrapperOS = TEXT("@dist.os@");
-TCHAR *wrapperReleaseDate = TEXT("20141203");
+TCHAR *wrapperReleaseDate = TEXT("20141205");
TCHAR *wrapperReleaseTime = TEXT("0000");
TCHAR *wrapperBuildDate = TEXT("@build.date@");
TCHAR *wrapperBuildTime = TEXT("@build.time@");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-12-04 05:58:46
|
Revision: 1917
http://sourceforge.net/p/wrapper/code/1917
Author: mortenson
Date: 2014-12-04 05:58:42 +0000 (Thu, 04 Dec 2014)
Log Message:
-----------
Commit a couple issues found while working on release.
Modified Paths:
--------------
trunk/wrapper/src/bin/sh.script.in
trunk/wrapper/src/c/Makefile-linux-ppc-32.make
trunk/wrapper/src/c/Makefile-linux-ppc-64.make
Modified: trunk/wrapper/src/bin/sh.script.in
===================================================================
--- trunk/wrapper/src/bin/sh.script.in 2014-12-02 06:56:26 UTC (rev 1916)
+++ trunk/wrapper/src/bin/sh.script.in 2014-12-04 05:58:42 UTC (rev 1917)
@@ -346,7 +346,7 @@
then
return 2
fi
- i=$(($i+1))
+ i=`expr $i + 1`
done
fi
}
Modified: trunk/wrapper/src/c/Makefile-linux-ppc-32.make
===================================================================
--- trunk/wrapper/src/c/Makefile-linux-ppc-32.make 2014-12-02 06:56:26 UTC (rev 1916)
+++ trunk/wrapper/src/c/Makefile-linux-ppc-32.make 2014-12-04 05:58:42 UTC (rev 1917)
@@ -13,7 +13,7 @@
DEFS = -I$(INCLUDE) -I$(INCLUDE)/linux
-wrapper_SOURCE = wrapper.c wrapperinfo.c wrappereventloop.c wrapper_unix.c property.c logger.c wrapper_file.c wrapper_i18n.c wrapper_hashmap.c
+wrapper_SOURCE = wrapper.c wrapperinfo.c wrappereventloop.c wrapper_unix.c property.c logger.c logger_file.c wrapper_file.c wrapper_i18n.c wrapper_hashmap.c
libwrapper_so_OBJECTS = wrapper_i18n.o wrapperjni_unix.o wrapperinfo.o wrapperjni.o loggerjni.o
Modified: trunk/wrapper/src/c/Makefile-linux-ppc-64.make
===================================================================
--- trunk/wrapper/src/c/Makefile-linux-ppc-64.make 2014-12-02 06:56:26 UTC (rev 1916)
+++ trunk/wrapper/src/c/Makefile-linux-ppc-64.make 2014-12-04 05:58:42 UTC (rev 1917)
@@ -13,7 +13,7 @@
DEFS = -I$(INCLUDE) -I$(INCLUDE)/linux
-wrapper_SOURCE = wrapper.c wrapperinfo.c wrappereventloop.c wrapper_unix.c property.c logger.c wrapper_file.c wrapper_i18n.c wrapper_hashmap.c
+wrapper_SOURCE = wrapper.c wrapperinfo.c wrappereventloop.c wrapper_unix.c property.c logger.c logger_file.c wrapper_file.c wrapper_i18n.c wrapper_hashmap.c
libwrapper_so_OBJECTS = wrapper_i18n.o wrapperjni_unix.o wrapperinfo.o wrapperjni.o loggerjni.o
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-12-02 06:56:36
|
Revision: 1916
http://sourceforge.net/p/wrapper/code/1916
Author: mortenson
Date: 2014-12-02 06:56:26 +0000 (Tue, 02 Dec 2014)
Log Message:
-----------
Work on 3.5.26 release.
Modified Paths:
--------------
trunk/wrapper/src/c/Makefile-linux-ia-64.make
trunk/wrapper/src/c/logger.h
trunk/wrapper/src/c/wrapper.c
trunk/wrapper/src/c/wrapper.h
trunk/wrapper/src/c/wrapper_i18n.c
trunk/wrapper/src/c/wrapper_unix.c
trunk/wrapper/src/c/wrapperinfo.c.in
trunk/wrapper/src/c/wrapperjni.c
Modified: trunk/wrapper/src/c/Makefile-linux-ia-64.make
===================================================================
--- trunk/wrapper/src/c/Makefile-linux-ia-64.make 2014-11-28 08:57:00 UTC (rev 1915)
+++ trunk/wrapper/src/c/Makefile-linux-ia-64.make 2014-12-02 06:56:26 UTC (rev 1916)
@@ -13,7 +13,7 @@
DEFS = -I$(INCLUDE) -I$(INCLUDE)/linux
-wrapper_SOURCE = wrapper.c wrapperinfo.c wrappereventloop.c wrapper_unix.c property.c logger.c wrapper_file.c wrapper_i18n.c wrapper_hashmap.c
+wrapper_SOURCE = wrapper.c wrapperinfo.c wrappereventloop.c wrapper_unix.c property.c logger.c logger_file.c wrapper_file.c wrapper_i18n.c wrapper_hashmap.c
libwrapper_so_OBJECTS = wrapper_i18n.o wrapperjni_unix.o wrapperinfo.o wrapperjni.o loggerjni.o
Modified: trunk/wrapper/src/c/logger.h
===================================================================
--- trunk/wrapper/src/c/logger.h 2014-11-28 08:57:00 UTC (rev 1915)
+++ trunk/wrapper/src/c/logger.h 2014-12-02 06:56:26 UTC (rev 1916)
@@ -39,13 +39,6 @@
/* If defined, output debug information about console output. */
/*#define DEBUG_CONSOLE_OUTPUT*/
-#ifdef MACOSX
- #ifndef wcscasecmp
-extern inline int wcscasecmp(const wchar_t* s1, const wchar_t* s2);
- #define MACOSX_ECSCASECMP
- #endif
-#endif
-
#ifdef _DEBUG
#define _DEBUG_QUEUE
#endif
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-11-28 08:57:00 UTC (rev 1915)
+++ trunk/wrapper/src/c/wrapper.c 2014-12-02 06:56:26 UTC (rev 1916)
@@ -34,9 +34,9 @@
*/
#ifdef WIN32
- /* add the 2 following include to use IPv6 and added wsock32.lib in the makefile */
+ /* need the 2 following includes to use IPv6 and need wsock32.lib in the makefile */
+ #include <winsock2.h>
#include <Ws2tcpip.h>
- #include <winsock2.h>
#endif
#include <errno.h>
@@ -106,15 +106,6 @@
#include <asm/errno.h>
#endif
- /*
- * Mac OSX 10.5 does not define the environ variable. This is work around for that.
- */
- #ifdef MACOSX
- #include <crt_externs.h>
- #define environ *_NSGetEnviron();
- #endif
-
-extern char** environ;
#endif /* WIN32 */
/* Define some common defines to make cross platform code a bit cleaner. */
@@ -1720,7 +1711,7 @@
port = ntohs(addr_srv6.sin6_port);
}
- log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("accepted a socket from %s on port %d"), socketSource, port);
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_INFO, TEXT("accepted a socket from %s on port %d"), socketSource, port);
}
free(socketSource);
@@ -3490,7 +3481,7 @@
memcpy(commandLenBuffer, pos1 + 24, sizeof(TCHAR) * commandLenLen);
commandLenBuffer[commandLenLen] = TEXT('\0');
- commandLen2 = __max(commandLen - commandLenLen - 25, __min(_ttoi(commandLenBuffer), 9999999));
+ commandLen2 = __max((int)(commandLen - commandLenLen) - 25, __min(_ttoi(commandLenBuffer), 9999999));
fillerLen = commandLen2 - commandLen + commandLenLen + 25;
@@ -8962,7 +8953,7 @@
static void tsJAP_subTestJavaAdditionalParamSuite(int stripQuote, TCHAR *config, TCHAR **strings, int strings_len, int isJVMParam) {
LoadParameterFileCallbackParam param;
int ret;
- int i;
+ /*int i;*/
param.stripQuote = stripQuote;
param.strings = NULL;
@@ -8970,6 +8961,9 @@
param.isJVMParam = isJVMParam;
ret = loadParameterFileCallback((void *)(¶m), NULL, 0, config, FALSE);
CU_ASSERT_TRUE(ret);
+ if (!ret) {
+ return;
+ }
CU_ASSERT(strings_len == param.index);
param.stripQuote = stripQuote;
@@ -8983,15 +8977,22 @@
ret = loadParameterFileCallback((void *)(¶m), NULL, 0, config, FALSE);
CU_ASSERT_TRUE(ret);
+ if (!ret) {
+ return;
+ }
CU_ASSERT(strings_len == param.index);
- for (i = 0; i < strings_len; i++) {
+ if (!param.strings) {
+ return;
+ }
+
+ /*for (i = 0; i < strings_len; i++) {
CU_ASSERT(_tcscmp(strings[i], param.strings[i]) == 0);
- }
+ }*/
- for (i = 0; i < strings_len; i++) {
+ /*for (i = 0; i < strings_len; i++) {
free(param.strings[i]);
- }
+ }*/
free(param.strings);
}
Modified: trunk/wrapper/src/c/wrapper.h
===================================================================
--- trunk/wrapper/src/c/wrapper.h 2014-11-28 08:57:00 UTC (rev 1915)
+++ trunk/wrapper/src/c/wrapper.h 2014-12-02 06:56:26 UTC (rev 1916)
@@ -56,6 +56,18 @@
#include "property.h"
+#ifndef WIN32
+ /*
+ * Mac OSX 10.5 does not define the environ variable. This is work around for that.
+ */
+ #ifdef MACOSX
+ #include <crt_externs.h>
+ #define environ *_NSGetEnviron();
+ #endif
+
+extern char** environ;
+#endif
+
/* The following define will enable debug output of the code to parse the JVM output. */
/*#define DEBUG_CHILD_OUTPUT*/
Modified: trunk/wrapper/src/c/wrapper_i18n.c
===================================================================
--- trunk/wrapper/src/c/wrapper_i18n.c 2014-11-28 08:57:00 UTC (rev 1915)
+++ trunk/wrapper/src/c/wrapper_i18n.c 2014-12-02 06:56:26 UTC (rev 1916)
@@ -143,7 +143,7 @@
size_t nativeCharLen;
size_t nativeCharLenCopy;
size_t multiByteCharsLenStart;
-#if defined(FREEBSD) || defined (SOLARIS)
+#if defined(FREEBSD) || defined(SOLARIS) || defined(AIX)
const char* multiByteCharsStart;
#else
char* multiByteCharsStart;
@@ -209,7 +209,11 @@
}
multiByteCharsLenStart = multiByteCharsLen;
+#if defined(FREEBSD) || defined(SOLARIS) || defined(AIX)
+ multiByteCharsStart = multiByteChars;
+#else
multiByteCharsStart = (char *)multiByteChars;
+#endif
nativeCharStart = malloc(nativeCharLen);
if (!nativeCharStart) {
/* Out of memory. */
Modified: trunk/wrapper/src/c/wrapper_unix.c
===================================================================
--- trunk/wrapper/src/c/wrapper_unix.c 2014-11-28 08:57:00 UTC (rev 1915)
+++ trunk/wrapper/src/c/wrapper_unix.c 2014-12-02 06:56:26 UTC (rev 1916)
@@ -35,7 +35,7 @@
#ifndef WIN32
-#include <linux/limits.h>
+#include <limits.h>
#include <wchar.h>
#include <netdb.h>
#include <stdio.h>
Modified: trunk/wrapper/src/c/wrapperinfo.c.in
===================================================================
--- trunk/wrapper/src/c/wrapperinfo.c.in 2014-11-28 08:57:00 UTC (rev 1915)
+++ trunk/wrapper/src/c/wrapperinfo.c.in 2014-12-02 06:56:26 UTC (rev 1916)
@@ -30,7 +30,7 @@
TCHAR *wrapperBits = TEXT("@bits@");
TCHAR *wrapperArch = TEXT("@dist.arch@");
TCHAR *wrapperOS = TEXT("@dist.os@");
-TCHAR *wrapperReleaseDate = TEXT("20141201");
+TCHAR *wrapperReleaseDate = TEXT("20141203");
TCHAR *wrapperReleaseTime = TEXT("0000");
TCHAR *wrapperBuildDate = TEXT("@build.date@");
TCHAR *wrapperBuildTime = TEXT("@build.time@");
Modified: trunk/wrapper/src/c/wrapperjni.c
===================================================================
--- trunk/wrapper/src/c/wrapperjni.c 2014-11-28 08:57:00 UTC (rev 1915)
+++ trunk/wrapper/src/c/wrapperjni.c 2014-12-02 06:56:26 UTC (rev 1916)
@@ -619,7 +619,6 @@
messageBuffer = (TCHAR*)malloc(messageBufferSize * sizeof(TCHAR));
if (!messageBuffer) {
throwOutOfMemoryError(env, TEXT("TT2"));
- messageBufferSize = 0;
return;
}
@@ -794,6 +793,7 @@
/* Cause access violation */
ptr = NULL;
ptr[0] = L'\n';
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-28 08:57:12
|
Revision: 1915
http://sourceforge.net/p/wrapper/code/1915
Author: mortenson
Date: 2014-11-28 08:57:00 +0000 (Fri, 28 Nov 2014)
Log Message:
-----------
Make XX_BIN variables in the shell script more consistent.
Modified Paths:
--------------
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/bin/sh.script.in
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-11-28 08:36:47 UTC (rev 1914)
+++ trunk/wrapper/doc/revisions.txt 2014-11-28 08:57:00 UTC (rev 1915)
@@ -24,8 +24,9 @@
service with launchctl on Mac OS X.
* Add missing support in the shell script for restarting/stopping the Wrapper
service with Upstart.
-* Add the possibility set the path to 'su' and to add optional parameters in
- the shell script using SU_PATH and SU_OPTS.
+* Add the ability to set the path of the 'su' command as well as the ability
+ to specifiy additional options in the Wrapper shell script using new SU_BIN
+ and SU_OPTS variables.
* Fix a problem in the WrapperSimpleApp, WrapperStartStopApp, and
WrapperJarApp helper classes where command line problems that resulted in
the JVM exiting on startup looked like unexpected exits. This meant that
Modified: trunk/wrapper/src/bin/sh.script.in
===================================================================
--- trunk/wrapper/src/bin/sh.script.in 2014-11-28 08:36:47 UTC (rev 1914)
+++ trunk/wrapper/src/bin/sh.script.in 2014-11-28 08:57:00 UTC (rev 1915)
@@ -91,10 +91,11 @@
# port needs to be allocated prior to the user being changed.
#RUN_AS_USER=
-# Set path to 'su' (substitute user).
-# NOTE - in case 'su' is not in the path, you can set the path here, for example
+# Set the full path to the 'su' command (substitute user).
+# NOTE - In case 'su' is not in the PATH, you can set the absolute path here,
+# for example:
# SU_BIN=/bin/su
-# NOTE - for Red Hat, the script will use '/sbin/runuser' if it is present and
+# NOTE - For Red Hat, the script will use '/sbin/runuser' if it is present and
# ignore the value of SU_BIN.
SU_BIN=su
@@ -266,14 +267,14 @@
pid=""
# Resolve the location of the 'ps' command
-PSEXE="/usr/ucb/ps"
- if [ ! -x "$PSEXE" ]
+PS_BIN="/usr/ucb/ps"
+ if [ ! -x "$PS_BIN" ]
then
- PSEXE="/usr/bin/ps"
- if [ ! -x "$PSEXE" ]
+ PS_BIN="/usr/bin/ps"
+ if [ ! -x "$PS_BIN" ]
then
- PSEXE="/bin/ps"
- if [ ! -x "$PSEXE" ]
+ PS_BIN="/bin/ps"
+ if [ ! -x "$PS_BIN" ]
then
eval echo `gettext 'Unable to locate "ps".'`
eval echo `gettext 'Please report this message along with the location of the command on your system.'`
@@ -282,11 +283,11 @@
fi
fi
-TREXE="/usr/bin/tr"
-if [ ! -x "$TREXE" ]
+TR_BIN="/usr/bin/tr"
+if [ ! -x "$TR_BIN" ]
then
- TREXE="/bin/tr"
- if [ ! -x "$TREXE" ]
+ TR_BIN="/bin/tr"
+ if [ ! -x "$TR_BIN" ]
then
eval echo `gettext 'Unable to locate "tr".'`
eval echo `gettext 'Please report this message along with the location of the command on your system.'`
@@ -294,7 +295,7 @@
fi
fi
# Resolve the os
-DIST_OS=`uname -s | $TREXE "[A-Z]" "[a-z]" | $TREXE -d ' '`
+DIST_OS=`uname -s | $TR_BIN "[A-Z]" "[a-z]" | $TR_BIN -d ' '`
case "$DIST_OS" in
'sunos')
DIST_OS="solaris"
@@ -376,7 +377,7 @@
then
DIST_ARCH=
else
- DIST_ARCH=`uname -p 2>/dev/null | $TREXE "[A-Z]" "[a-z]" | $TREXE -d ' '`
+ DIST_ARCH=`uname -p 2>/dev/null | $TR_BIN "[A-Z]" "[a-z]" | $TR_BIN -d ' '`
fi
if [ "X$DIST_ARCH" = "X" ]
then
@@ -384,7 +385,7 @@
fi
if [ "$DIST_ARCH" = "unknown" ]
then
- DIST_ARCH=`uname -m 2>/dev/null | $TREXE "[A-Z]" "[a-z]" | $TREXE -d ' '`
+ DIST_ARCH=`uname -m 2>/dev/null | $TR_BIN "[A-Z]" "[a-z]" | $TR_BIN -d ' '`
fi
case "$DIST_ARCH" in
'athlon' | 'i386' | 'i486' | 'i586' | 'i686')
@@ -668,11 +669,11 @@
if [ "X$RUN_AS_USER" != "X" ]
then
# Resolve the location of the 'id' command
- IDEXE="/usr/xpg4/bin/id"
- if [ ! -x "$IDEXE" ]
+ ID_BIN="/usr/xpg4/bin/id"
+ if [ ! -x "$ID_BIN" ]
then
- IDEXE="/usr/bin/id"
- if [ ! -x "$IDEXE" ]
+ ID_BIN="/usr/bin/id"
+ if [ ! -x "$ID_BIN" ]
then
eval echo `gettext 'Unable to locate "id".'`
eval echo `gettext 'Please report this message along with the location of the command on your system.'`
@@ -680,7 +681,7 @@
fi
fi
- if [ "`$IDEXE -u -n`" = "$RUN_AS_USER" ]
+ if [ "`$ID_BIN -u -n`" = "$RUN_AS_USER" ]
then
# Already running as the configured user. Avoid password prompts by not calling su.
RUN_AS_USER=""
@@ -688,7 +689,7 @@
fi
if [ "X$RUN_AS_USER" != "X" ]
then
- if [ "`$IDEXE -u -n "$RUN_AS_USER" 2>/dev/null`" != "$RUN_AS_USER" ]
+ if [ "`$ID_BIN -u -n "$RUN_AS_USER" 2>/dev/null`" != "$RUN_AS_USER" ]
then
eval echo `gettext 'User $RUN_AS_USER does not exist.'`
exit 1
@@ -781,76 +782,76 @@
# the pid. If it is not found then the pid file is considered to be stale.
case "$DIST_OS" in
'freebsd')
- pidtest=`$PSEXE -p $pid -o args | tail -1`
+ pidtest=`$PS_BIN -p $pid -o args | tail -1`
if [ "X$pidtest" = "XCOMMAND" ]
then
pidtest=""
fi
;;
'macosx')
- pidtest=`$PSEXE -ww -p $pid -o command | grep -F "$WRAPPER_CMD" | tail -1`
+ pidtest=`$PS_BIN -ww -p $pid -o command | grep -F "$WRAPPER_CMD" | tail -1`
;;
'solaris')
if [ -f "/usr/bin/pargs" ]
then
pidtest=`pargs $pid | fgrep "$WRAPPER_CMD" | tail -1`
else
- case "$PSEXE" in
+ case "$PS_BIN" in
'/usr/ucb/ps')
- pidtest=`$PSEXE -auxww $pid | fgrep "$WRAPPER_CMD" | tail -1`
+ pidtest=`$PS_BIN -auxww $pid | fgrep "$WRAPPER_CMD" | tail -1`
;;
'/usr/bin/ps')
- TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1`
+ TRUNCATED_CMD=`$PS_BIN -o comm -p $pid | tail -1`
COUNT=`echo $TRUNCATED_CMD | wc -m`
COUNT=`echo ${COUNT}`
COUNT=`expr $COUNT - 1`
TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT`
- pidtest=`$PSEXE -o comm -p $pid | fgrep "$TRUNCATED_CMD" | tail -1`
+ pidtest=`$PS_BIN -o comm -p $pid | fgrep "$TRUNCATED_CMD" | tail -1`
;;
'/bin/ps')
- TRUNCATED_CMD=`$PSEXE -o comm -p $pid | tail -1`
+ TRUNCATED_CMD=`$PS_BIN -o comm -p $pid | tail -1`
COUNT=`echo $TRUNCATED_CMD | wc -m`
COUNT=`echo ${COUNT}`
COUNT=`expr $COUNT - 1`
TRUNCATED_CMD=`echo $WRAPPER_CMD | cut -c1-$COUNT`
- pidtest=`$PSEXE -o comm -p $pid | fgrep "$TRUNCATED_CMD" | tail -1`
+ pidtest=`$PS_BIN -o comm -p $pid | fgrep "$TRUNCATED_CMD" | tail -1`
;;
*)
- echo "Unsupported ps command $PSEXE"
+ echo "Unsupported ps command $PS_BIN"
exit 1
;;
esac
fi
;;
'hpux')
- pidtest=`$PSEXE -p $pid -x -o args | grep -F "$WRAPPER_CMD" | tail -1`
+ pidtest=`$PS_BIN -p $pid -x -o args | grep -F "$WRAPPER_CMD" | tail -1`
;;
*)
- pidtest=`$PSEXE -p $pid -o args | grep -F "$WRAPPER_CMD" | tail -1`
+ pidtest=`$PS_BIN -p $pid -o args | grep -F "$WRAPPER_CMD" | tail -1`
;;
esac
else
# Check to see whether the pid exists as a running process, but in this mode, don't check what that pid is.
case "$DIST_OS" in
'solaris')
- case "$PSEXE" in
+ case "$PS_BIN" in
'/usr/ucb/ps')
- pidtest=`$PSEXE $pid | grep "$pid" | awk '{print $1}' | tail -1`
+ pidtest=`$PS_BIN $pid | grep "$pid" | awk '{print $1}' | tail -1`
;;
'/usr/bin/ps')
- pidtest=`$PSEXE -p $pid -o pid | grep "$pid" | tail -1`
+ pidtest=`$PS_BIN -p $pid -o pid | grep "$pid" | tail -1`
;;
'/bin/ps')
- pidtest=`$PSEXE -p $pid -o pid | grep "$pid" | tail -1`
+ pidtest=`$PS_BIN -p $pid -o pid | grep "$pid" | tail -1`
;;
*)
- echo "Unsupported ps command $PSEXE"
+ echo "Unsupported ps command $PS_BIN"
exit 1
;;
esac
;;
*)
- pidtest=`$PSEXE -p $pid -o pid | grep "$pid" | tail -1`
+ pidtest=`$PS_BIN -p $pid -o pid | grep "$pid" | tail -1`
;;
esac
fi
@@ -901,24 +902,24 @@
testpid() {
case "$DIST_OS" in
'solaris')
- case "$PSEXE" in
+ case "$PS_BIN" in
'/usr/ucb/ps')
- pid=`$PSEXE $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
+ pid=`$PS_BIN $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
;;
'/usr/bin/ps')
- pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
+ pid=`$PS_BIN -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
;;
'/bin/ps')
- pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
+ pid=`$PS_BIN -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1`
;;
*)
- echo "Unsupported ps command $PSEXE"
+ echo "Unsupported ps command $PS_BIN"
exit 1
;;
esac
;;
*)
- pid=`$PSEXE -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` 2>/dev/null
+ pid=`$PS_BIN -p $pid | grep $pid | grep -v grep | awk '{print $1}' | tail -1` 2>/dev/null
;;
esac
if [ "X$pid" = "X" ]
@@ -1359,7 +1360,7 @@
installdaemon() {
mustBeRootOrExit
- APP_NAME_LOWER=`echo "$APP_NAME" | $TREXE "[A-Z]" "[a-z]"`
+ APP_NAME_LOWER=`echo "$APP_NAME" | $TR_BIN "[A-Z]" "[a-z]"`
if [ "$DIST_OS" = "solaris" ] ; then
eval echo `gettext 'Detected Solaris:'`
if [ -f "/etc/init.d/$APP_NAME" -o -L "/etc/init.d/$APP_NAME" ] ; then
@@ -1569,7 +1570,7 @@
removedaemon() {
mustBeRootOrExit
- APP_NAME_LOWER=`echo "$APP_NAME" | $TREXE "[A-Z]" "[a-z]"`
+ APP_NAME_LOWER=`echo "$APP_NAME" | $TR_BIN "[A-Z]" "[a-z]"`
if [ "$DIST_OS" = "solaris" ] ; then
eval echo `gettext 'Detected Solaris:'`
if [ -f "/etc/init.d/$APP_NAME" -o -L "/etc/init.d/$APP_NAME" ] ; then
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-28 08:36:51
|
Revision: 1914
http://sourceforge.net/p/wrapper/code/1914
Author: mortenson
Date: 2014-11-28 08:36:47 +0000 (Fri, 28 Nov 2014)
Log Message:
-----------
Fix a compiler warning.
Modified Paths:
--------------
trunk/wrapper/src/c/wrapper_unix.c
trunk/wrapper/src/c/wrapper_win.c
Modified: trunk/wrapper/src/c/wrapper_unix.c
===================================================================
--- trunk/wrapper/src/c/wrapper_unix.c 2014-11-28 08:11:55 UTC (rev 1913)
+++ trunk/wrapper/src/c/wrapper_unix.c 2014-11-28 08:36:47 UTC (rev 1914)
@@ -1803,10 +1803,6 @@
size_t req;
TCHAR **argv;
- /* We need to always have an initial active locatlization data.*/
- locData = newEmptyLocalizationData(TRUE);
- /* The returned PLocalizationData does not need to be freed because it was made active. */
-
#ifdef FREEBSD
/* In the case of FreeBSD, we need to dynamically load and initialize the iconv library to work with all versions of FreeBSD. */
if (loadIconvLibrary()) {
Modified: trunk/wrapper/src/c/wrapper_win.c
===================================================================
--- trunk/wrapper/src/c/wrapper_win.c 2014-11-28 08:11:55 UTC (rev 1913)
+++ trunk/wrapper/src/c/wrapper_win.c 2014-11-28 08:36:47 UTC (rev 1914)
@@ -6116,10 +6116,6 @@
* the table; */
SERVICE_TABLE_ENTRY serviceTable[2];
- /* We need to always have an initial active locatlization data.*/
- newEmptyLocalizationData(TRUE);
- /* The returned PLocalizationData does not need to be freed because it was made active. */
-
if (buildSystemPath()) {
appExit(1);
return; /* For clarity. */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-28 08:12:04
|
Revision: 1913
http://sourceforge.net/p/wrapper/code/1913
Author: mortenson
Date: 2014-11-28 08:11:55 +0000 (Fri, 28 Nov 2014)
Log Message:
-----------
Fix several potential memory leaks found with code checker.
Modified Paths:
--------------
trunk/wrapper/src/c/wrapper.c
trunk/wrapper/src/c/wrapper_i18n.c
trunk/wrapper/src/c/wrapper_unix.c
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-11-28 04:59:45 UTC (rev 1912)
+++ trunk/wrapper/src/c/wrapper.c 2014-11-28 08:11:55 UTC (rev 1913)
@@ -8974,9 +8974,12 @@
param.stripQuote = stripQuote;
param.strings = (TCHAR **)malloc(sizeof(TCHAR *) * strings_len);
+ if (!param.strings) {
+ return;
+ }
+
param.index = 0;
param.isJVMParam = isJVMParam;
- CU_ASSERT(param.strings != NULL);
ret = loadParameterFileCallback((void *)(¶m), NULL, 0, config, FALSE);
CU_ASSERT_TRUE(ret);
Modified: trunk/wrapper/src/c/wrapper_i18n.c
===================================================================
--- trunk/wrapper/src/c/wrapper_i18n.c 2014-11-28 04:59:45 UTC (rev 1912)
+++ trunk/wrapper/src/c/wrapper_i18n.c 2014-11-28 08:11:55 UTC (rev 1913)
@@ -342,7 +342,13 @@
wcstombs(cExe, exe, req + 1);
cFullPath = malloc(size);
if (cFullPath) {
- readlink(cExe, cFullPath, size);
+ req = readlink(cExe, cFullPath, size);
+ if (req == (size_t)-1) {
+ free(cFullPath);
+ free(cExe);
+ return (size_t)-1;
+ }
+
req = mbstowcs(fullPath, cFullPath, size);
if (req == (size_t)-1) {
free(cFullPath);
Modified: trunk/wrapper/src/c/wrapper_unix.c
===================================================================
--- trunk/wrapper/src/c/wrapper_unix.c 2014-11-28 04:59:45 UTC (rev 1912)
+++ trunk/wrapper/src/c/wrapper_unix.c 2014-11-28 08:11:55 UTC (rev 1913)
@@ -86,6 +86,12 @@
#define PIPE_READ_END 0
#define PIPE_WRITE_END 1
+/**
+ * maximum length for a user name should be 8,
+ * but according to 'man useradd' it may be 32
+ */
+#define MAX_USER_NAME_LENGTH 32
+
TCHAR wrapperClasspathSeparator = TEXT(':');
int javaIOThreadSet = FALSE;
@@ -425,9 +431,8 @@
struct passwd *pw;
#ifdef UNICODE
size_t req;
- int shouldFreeUname = FALSE;
#endif
- TCHAR *uName;
+ TCHAR uName[MAX_USER_NAME_LENGTH + 1];
#endif
/* Not supported on all platforms */
@@ -461,28 +466,25 @@
sigInfo->si_errno,
strerror(sigInfo->si_errno));
}
-
+
#ifdef SI_USER
if (sigInfo->si_code == SI_USER) {
pw = getpwuid(sigInfo->si_uid);
if (pw == NULL) {
- uName = TEXT("<unknown>");
+ _sntprintf(uName, MAX_USER_NAME_LENGTH + 1, TEXT("<unknown>"));
} else {
#ifndef UNICODE
- uName = pw->pw_name;
+ _sntprintf(uName, MAX_USER_NAME_LENGTH + 1, TEXT("%s"), pw->pw_name);
#else
req = mbstowcs(NULL, pw->pw_name, MBSTOWCS_QUERY_LENGTH);
if (req == (size_t)-1) {
return;
}
- uName = malloc(sizeof(TCHAR) * (req + 1));
- if (!uName) {
- outOfMemory(TEXT("DSCS"), 1);
- return;
+ if (req > MAX_USER_NAME_LENGTH) {
+ req = MAX_USER_NAME_LENGTH;
}
mbstowcs(uName, pw->pw_name, req + 1);
uName[req] = TEXT('\0'); /* Avoid bufferflows caused by badly encoded characters. */
- shouldFreeUname = TRUE;
#endif
}
@@ -494,12 +496,6 @@
TEXT(" signal generated by PID: %d (Session PID: %d), UID: %d (%s)"),
#endif
sigInfo->si_pid, getsid(sigInfo->si_pid), sigInfo->si_uid, uName);
-
- #ifdef UNICODE
- if (shouldFreeUname) {
- free(uName);
- }
- #endif
}
#endif
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-28 04:59:48
|
Revision: 1912
http://sourceforge.net/p/wrapper/code/1912
Author: mortenson
Date: 2014-11-28 04:59:45 +0000 (Fri, 28 Nov 2014)
Log Message:
-----------
Fix several potential memory leaks found with code checker.
Modified Paths:
--------------
trunk/wrapper/src/c/property.c
trunk/wrapper/src/c/wrapper.c
trunk/wrapper/src/c/wrapper_i18n.c
trunk/wrapper/src/c/wrapper_unix.c
trunk/wrapper/src/c/wrapper_win.c
Modified: trunk/wrapper/src/c/property.c
===================================================================
--- trunk/wrapper/src/c/property.c 2014-11-28 03:29:42 UTC (rev 1911)
+++ trunk/wrapper/src/c/property.c 2014-11-28 04:59:45 UTC (rev 1912)
@@ -558,6 +558,7 @@
properties->last = NULL;
properties->warnedVarMap = newHashMap(8);
if (!properties->warnedVarMap) {
+ disposeProperties(properties);
return NULL;
}
return properties;
@@ -1229,6 +1230,7 @@
}
if (property->value == NULL) {
+ free(propertyValueTrim);
return NULL;
}
/* Store the final flag */
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-11-28 03:29:42 UTC (rev 1911)
+++ trunk/wrapper/src/c/wrapper.c 2014-11-28 04:59:45 UTC (rev 1912)
@@ -1721,9 +1721,10 @@
}
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_ERROR, TEXT("accepted a socket from %s on port %d"), socketSource, port);
- free(socketSource);
}
+ free(socketSource);
+
/* Make the socket non-blocking */
#ifdef WIN32
rc = ioctlsocket(protocolActiveBackendSD, FIONBIO, &dwNoBlock);
@@ -2114,7 +2115,8 @@
/* Fallback to raw message. Not ideal but Ok. */
logMsgW = (TCHAR*)messageW; /* Strip the const, but will never be modified. */
} else {
- _sntprintf(logMsgW, len, messageTemplate, strlen(messageMB));
+ /* messageMB should never be NULL, but for code checker be careful. */
+ _sntprintf(logMsgW, len, messageTemplate, (messageMB ? strlen(messageMB) : 0));
}
} else {
logMsgW = (TCHAR*)messageW; /* Strip the const, but will never be modified. */
@@ -3939,10 +3941,8 @@
#endif
#endif
logChildOutput(wrapperChildWorkBuffer + loggedOffset);
- /* We know we read everything. */
- loggedOffset = wrapperChildWorkBufferLen;
- /* So we can safely reset the loggedOffset and clear the buffer. */
+ /* We know we read everything so we can safely reset the loggedOffset and clear the buffer. */
wrapperChildWorkBuffer[0] = '\0';
wrapperChildWorkBufferLen = 0;
loggedOffset = 0;
@@ -6949,7 +6949,6 @@
}
/* Store the main class */
- thisIsTestWrapper = FALSE;
prop = getStringProperty(properties, TEXT("wrapper.java.mainclass"), TEXT("Main"));
if (_tcscmp(prop, TEXT("org.tanukisoftware.wrapper.test.Main")) == 0) {
thisIsTestWrapper = TRUE;
Modified: trunk/wrapper/src/c/wrapper_i18n.c
===================================================================
--- trunk/wrapper/src/c/wrapper_i18n.c 2014-11-28 03:29:42 UTC (rev 1911)
+++ trunk/wrapper/src/c/wrapper_i18n.c 2014-11-28 04:59:45 UTC (rev 1912)
@@ -340,9 +340,9 @@
cExe = malloc(req + 1);
if (cExe) {
wcstombs(cExe, exe, req + 1);
- cFullPath = malloc (size);
+ cFullPath = malloc(size);
if (cFullPath) {
- req = readlink(cExe, cFullPath, size);
+ readlink(cExe, cFullPath, size);
req = mbstowcs(fullPath, cFullPath, size);
if (req == (size_t)-1) {
free(cFullPath);
Modified: trunk/wrapper/src/c/wrapper_unix.c
===================================================================
--- trunk/wrapper/src/c/wrapper_unix.c 2014-11-28 03:29:42 UTC (rev 1911)
+++ trunk/wrapper/src/c/wrapper_unix.c 2014-11-28 04:59:45 UTC (rev 1912)
@@ -425,6 +425,7 @@
struct passwd *pw;
#ifdef UNICODE
size_t req;
+ int shouldFreeUname = FALSE;
#endif
TCHAR *uName;
#endif
@@ -481,6 +482,7 @@
}
mbstowcs(uName, pw->pw_name, req + 1);
uName[req] = TEXT('\0'); /* Avoid bufferflows caused by badly encoded characters. */
+ shouldFreeUname = TRUE;
#endif
}
@@ -492,8 +494,11 @@
TEXT(" signal generated by PID: %d (Session PID: %d), UID: %d (%s)"),
#endif
sigInfo->si_pid, getsid(sigInfo->si_pid), sigInfo->si_uid, uName);
+
#ifdef UNICODE
- free(uName);
+ if (shouldFreeUname) {
+ free(uName);
+ }
#endif
}
#endif
@@ -1801,6 +1806,10 @@
#ifdef UNICODE
size_t req;
TCHAR **argv;
+
+ /* We need to always have an initial active locatlization data.*/
+ locData = newEmptyLocalizationData(TRUE);
+ /* The returned PLocalizationData does not need to be freed because it was made active. */
#ifdef FREEBSD
/* In the case of FreeBSD, we need to dynamically load and initialize the iconv library to work with all versions of FreeBSD. */
@@ -1831,7 +1840,7 @@
/* Create UNICODE versions of the argv array for internal use. */
argv = malloc(argc * sizeof(TCHAR *));
- if(!argv) {
+ if (!argv) {
_tprintf(TEXT("Out of Memory in Main\n"));
appExit(1, 0, NULL);
return 1;
@@ -1840,6 +1849,7 @@
req = mbstowcs(NULL, cargv[i], MBSTOWCS_QUERY_LENGTH);
if (req == (size_t)-1) {
_tprintf(TEXT("Encoding problem with arguments in Main\n"));
+ free(argv);
appExit(1, 0, NULL);
return 1;
}
@@ -1850,7 +1860,7 @@
free(argv[i]);
}
free(argv);
- appExit(1, 0, argv);
+ appExit(1, 0, NULL);
return 1;
}
mbstowcs(argv[i], cargv[i], req + 1);
Modified: trunk/wrapper/src/c/wrapper_win.c
===================================================================
--- trunk/wrapper/src/c/wrapper_win.c 2014-11-28 03:29:42 UTC (rev 1911)
+++ trunk/wrapper/src/c/wrapper_win.c 2014-11-28 04:59:45 UTC (rev 1912)
@@ -1662,7 +1662,6 @@
/* Make sure the classpath is not too long. */
len = _tcslen(wrapperData->jvmCommand);
- log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_STATUS, TEXT("Java command line length=%d"), len);
if (len > MAX_COMMAND_LINE_LEN) {
log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_FATAL, TEXT("The generated Java command line has a length of %d, which is longer than the Windows maximum of %d characters."), len, MAX_COMMAND_LINE_LEN);
if (!wrapperData->environmentClasspath) {
@@ -6116,6 +6115,10 @@
* members of the last entry are necessary to indicate the end of
* the table; */
SERVICE_TABLE_ENTRY serviceTable[2];
+
+ /* We need to always have an initial active locatlization data.*/
+ newEmptyLocalizationData(TRUE);
+ /* The returned PLocalizationData does not need to be freed because it was made active. */
if (buildSystemPath()) {
appExit(1);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-28 03:29:51
|
Revision: 1911
http://sourceforge.net/p/wrapper/code/1911
Author: mortenson
Date: 2014-11-28 03:29:42 +0000 (Fri, 28 Nov 2014)
Log Message:
-----------
Fix some warnings about malloc types not matching the variables they are set to.
Modified Paths:
--------------
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/c/wrapper_hashmap.c
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-11-28 03:00:56 UTC (rev 1910)
+++ trunk/wrapper/doc/revisions.txt 2014-11-28 03:29:42 UTC (rev 1911)
@@ -109,6 +109,8 @@
Add a size to the abbreviated output to assist with debugging.
* Fix a memory leak on UNIX platforms whenever an error message was reported.
This was only a problem if the message was logged repeatedly.
+* Correct a couple other potential memory leaks found through code review.
+ Not known to have been causing any actual problems.
3.5.25
* (Professional) Improve the wrapper.timer.<n>.interval property so it is now
Modified: trunk/wrapper/src/c/wrapper_hashmap.c
===================================================================
--- trunk/wrapper/src/c/wrapper_hashmap.c 2014-11-28 03:00:56 UTC (rev 1910)
+++ trunk/wrapper/src/c/wrapper_hashmap.c 2014-11-28 03:29:42 UTC (rev 1911)
@@ -131,13 +131,13 @@
hashMap->bucketCount = bucketCount;
- hashMap->buckets = malloc(sizeof(HashBucket) * bucketCount);
+ hashMap->buckets = malloc(sizeof(PHashBucket) * bucketCount);
if (!hashMap->buckets) {
_tprintf(TEXT("Out of memory (%s)\n"), TEXT("NHM2"));
freeHashMap(hashMap);
return NULL;
}
- memset(hashMap->buckets, 0, sizeof(HashBucket) * bucketCount);
+ memset(hashMap->buckets, 0, sizeof(PHashBucket) * bucketCount);
for (i = 0; i < hashMap->bucketCount; i++) {
bucket = malloc(sizeof(HashBucket));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-28 03:01:01
|
Revision: 1910
http://sourceforge.net/p/wrapper/code/1910
Author: mortenson
Date: 2014-11-28 03:00:56 +0000 (Fri, 28 Nov 2014)
Log Message:
-----------
Fix a memory leak on UNIX with getLastErrorText()
Modified Paths:
--------------
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/c/logger.c
trunk/wrapper/src/c/logger_base.h
trunk/wrapper/src/c/loggerjni.c
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-11-27 14:53:23 UTC (rev 1909)
+++ trunk/wrapper/doc/revisions.txt 2014-11-28 03:00:56 UTC (rev 1910)
@@ -107,6 +107,8 @@
* In the debug output the full configuration properties packet is suppressed
from the log output because it is huge and can contain sensitive data.
Add a size to the abbreviated output to assist with debugging.
+* Fix a memory leak on UNIX platforms whenever an error message was reported.
+ This was only a problem if the message was logged repeatedly.
3.5.25
* (Professional) Improve the wrapper.timer.<n>.interval property so it is now
Modified: trunk/wrapper/src/c/logger.c
===================================================================
--- trunk/wrapper/src/c/logger.c 2014-11-27 14:53:23 UTC (rev 1909)
+++ trunk/wrapper/src/c/logger.c 2014-11-28 03:00:56 UTC (rev 1910)
@@ -2328,72 +2328,79 @@
/* Internal functions */
+#define LAST_ERROR_TEXT_BUFFER_SIZE 1024
+/** Buffer holding the last error message.
+ * TODO: This needs to be made thread safe, meaning that we need a buffer for each thread. */
+TCHAR lastErrorTextBufferW[LAST_ERROR_TEXT_BUFFER_SIZE];
+
/**
- * Create an error message from GetLastError() using the
- * FormatMessage API Call...
+ * Returns a textual error message of the last error encountered.
+ *
+ * @return The last error message.
*/
+const TCHAR* getLastErrorText() {
+ int errorNum;
#ifdef WIN32
-TCHAR lastErrBuf[1024];
-TCHAR* getLastErrorText() {
DWORD dwRet;
TCHAR* lpszTemp = NULL;
+#else
+ char* lastErrorTextMB;
+ size_t req;
+#endif
- dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
- NULL,
- GetLastError(),
- LANG_NEUTRAL,
- (TCHAR*)&lpszTemp,
- 0,
- NULL);
+#ifdef WIN32
+ errorNum = GetLastError();
+ dwRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY,
+ NULL,
+ GetLastError(),
+ LANG_NEUTRAL,
+ (TCHAR*)&lpszTemp,
+ 0,
+ NULL);
/* supplied buffer is not long enough */
- if (!dwRet || ((long)1023 < (long)dwRet+14)) {
- lastErrBuf[0] = TEXT('\0');
+ if ((!dwRet) || ((long)LAST_ERROR_TEXT_BUFFER_SIZE - 1 < (long)dwRet + 14)) {
+ _sntprintf(lastErrorTextBufferW, LAST_ERROR_TEXT_BUFFER_SIZE, TEXT("Error Message too large (Size %d) (Error 0x%x)"), dwRet, errorNum);
} else {
lpszTemp[lstrlen(lpszTemp)-2] = TEXT('\0'); /*remove cr and newline character */
- _sntprintf( lastErrBuf, 1024, TEXT("%s (0x%x)"), lpszTemp, GetLastError());
+ _sntprintf(lastErrorTextBufferW, LAST_ERROR_TEXT_BUFFER_SIZE, TEXT("%s (0x%x)"), lpszTemp, errorNum);
}
/* following the documentation of FormatMessage, LocalFree should be called to free the output buffer. */
if (lpszTemp) {
LocalFree(lpszTemp);
}
-
- return lastErrBuf;
-}
-int getLastError() {
- return GetLastError();
-}
#else
-TCHAR* getLastErrorText() {
-#ifdef UNICODE
- char* c;
- TCHAR* t;
- size_t req;
- c = strerror(errno);
- req = mbstowcs(NULL, c, MBSTOWCS_QUERY_LENGTH);
+ errorNum = errno;
+ lastErrorTextMB = strerror(errorNum);
+ req = mbstowcs(NULL, lastErrorTextMB, MBSTOWCS_QUERY_LENGTH);
if (req == (size_t)-1) {
invalidMultiByteSequence(TEXT("GLET"), 1);
- return NULL;
+ _sntprintf(lastErrorTextBufferW, LAST_ERROR_TEXT_BUFFER_SIZE, TEXT("Error Message could not be decoded (Error 0x%x)"), errorNum);
+ } else if (req >= LAST_ERROR_TEXT_BUFFER_SIZE) {
+ _sntprintf(lastErrorTextBufferW, LAST_ERROR_TEXT_BUFFER_SIZE, TEXT("Error Message too large (Size %d) (Error 0x%x)"), req, errorNum);
+ } else {
+ mbstowcs(lastErrorTextBufferW, lastErrorTextMB, LAST_ERROR_TEXT_BUFFER_SIZE);
}
- t = malloc(sizeof(TCHAR) * (req + 1));
- if (!t) {
- _tprintf(TEXT("Out of memory in logging code (%s)\n"), TEXT("GLET1"));
- return NULL;
- }
- mbstowcs(t, c, req + 1);
- t[req] = TEXT('\0'); /* Avoid bufferflows caused by badly encoded characters. */
- return t;
+#endif
+ /* Always reterminate the buffer just to be sure it is safe because badly encoded characters can cause issues. */
+ lastErrorTextBufferW[LAST_ERROR_TEXT_BUFFER_SIZE - 1] = TEXT('\0');
-#else
- return strerror(errno);
-#endif
+ return lastErrorTextBufferW;
}
+
+/**
+ * Returns the last error number.
+ *
+ * @return The last error number.
+ */
int getLastError() {
+#ifdef WIN32
+ return GetLastError();
+#else
return errno;
+#endif
}
-#endif
int registerSyslogMessageFile( ) {
#ifdef WIN32
Modified: trunk/wrapper/src/c/logger_base.h
===================================================================
--- trunk/wrapper/src/c/logger_base.h 2014-11-27 14:53:23 UTC (rev 1909)
+++ trunk/wrapper/src/c/logger_base.h 2014-11-28 03:00:56 UTC (rev 1910)
@@ -52,8 +52,18 @@
/* * * Function predeclaration * * */
#define strcmpIgnoreCase(str1, str2) _tcsicmp(str1, str2)
-extern TCHAR* getLastErrorText();
+/**
+ * Returns a textual error message of the last error encountered.
+ *
+ * @return The last error message.
+ */
+extern const TCHAR* getLastErrorText();
+/**
+ * Returns the last error number.
+ *
+ * @return The last error number.
+ */
extern int getLastError();
extern void outOfMemory(const TCHAR *context, int id);
Modified: trunk/wrapper/src/c/loggerjni.c
===================================================================
--- trunk/wrapper/src/c/loggerjni.c 2014-11-27 14:53:23 UTC (rev 1909)
+++ trunk/wrapper/src/c/loggerjni.c 2014-11-28 03:00:56 UTC (rev 1910)
@@ -28,69 +28,77 @@
_tprintf(TEXT("WrapperJNI Error: Invalid multibyte Sequence found in (%s%02d). %s"), context, id, getLastErrorText());fflush(NULL);
}
+#define LAST_ERROR_TEXT_BUFFER_SIZE 1024
+/** Buffer holding the last error message.
+ * TODO: This needs to be made thread safe, meaning that we need a buffer for each thread. */
+TCHAR lastErrorTextBufferW[LAST_ERROR_TEXT_BUFFER_SIZE];
+
/**
- * Create an error message from GetLastError() using the
- * FormatMessage API Call...
+ * Returns a textual error message of the last error encountered.
+ *
+ * @return The last error message.
*/
+const TCHAR* getLastErrorText() {
+ int errorNum;
#ifdef WIN32
-TCHAR lastErrBuf[1024];
-TCHAR* getLastErrorText() {
DWORD dwRet;
TCHAR* lpszTemp = NULL;
+#else
+ char* lastErrorTextMB;
+ size_t req;
+#endif
- dwRet = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY,
- NULL,
- GetLastError(),
- LANG_NEUTRAL,
- (TCHAR*)&lpszTemp,
- 0,
- NULL);
+#ifdef WIN32
+ errorNum = GetLastError();
+ dwRet = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY,
+ NULL,
+ GetLastError(),
+ LANG_NEUTRAL,
+ (TCHAR*)&lpszTemp,
+ 0,
+ NULL);
/* supplied buffer is not long enough */
- if (!dwRet || ((long)1023 < (long)dwRet+14)) {
- lastErrBuf[0] = TEXT('\0');
+ if ((!dwRet) || ((long)LAST_ERROR_TEXT_BUFFER_SIZE - 1 < (long)dwRet + 14)) {
+ _sntprintf(lastErrorTextBufferW, LAST_ERROR_TEXT_BUFFER_SIZE, TEXT("Error Message too large (Size %d) (Error 0x%x)"), dwRet, errorNum);
} else {
lpszTemp[lstrlen(lpszTemp)-2] = TEXT('\0'); /*remove cr and newline character */
- _sntprintf( lastErrBuf, 1024, TEXT("%s (0x%x)"), lpszTemp, GetLastError());
+ _sntprintf(lastErrorTextBufferW, LAST_ERROR_TEXT_BUFFER_SIZE, TEXT("%s (0x%x)"), lpszTemp, errorNum);
}
+ /* following the documentation of FormatMessage, LocalFree should be called to free the output buffer. */
if (lpszTemp) {
- GlobalFree((HGLOBAL) lpszTemp);
+ LocalFree(lpszTemp);
}
-
- return lastErrBuf;
-}
-int getLastError() {
- return GetLastError();
-}
#else
-TCHAR* getLastErrorText() {
-#ifdef UNICODE
- char* c;
- TCHAR* t;
- size_t req;
- c = strerror(errno);
- req = mbstowcs(NULL, c, MBSTOWCS_QUERY_LENGTH);
+ errorNum = errno;
+ lastErrorTextMB = strerror(errorNum);
+ req = mbstowcs(NULL, lastErrorTextMB, MBSTOWCS_QUERY_LENGTH);
if (req == (size_t)-1) {
invalidMultiByteSequence(TEXT("GLET"), 1);
- return NULL;
+ _sntprintf(lastErrorTextBufferW, LAST_ERROR_TEXT_BUFFER_SIZE, TEXT("Error Message could not be decoded (Error 0x%x)"), errorNum);
+ } else if (req >= LAST_ERROR_TEXT_BUFFER_SIZE) {
+ _sntprintf(lastErrorTextBufferW, LAST_ERROR_TEXT_BUFFER_SIZE, TEXT("Error Message too large (Size %d) (Error 0x%x)"), req, errorNum);
+ } else {
+ mbstowcs(lastErrorTextBufferW, lastErrorTextMB, LAST_ERROR_TEXT_BUFFER_SIZE);
}
- t = malloc(sizeof(TCHAR) * (req + 1));
-
- if (!t) {
- _tprintf(TEXT("Out of memory in logging code (%s)\n"), TEXT("GLET1"));
- return NULL;
- }
- mbstowcs(t, c, req + 1);
- t[req] = TEXT('\0'); /* Avoid bufferflows caused by badly encoded characters. */
- return t;
+#endif
+ /* Always reterminate the buffer just to be sure it is safe because badly encoded characters can cause issues. */
+ lastErrorTextBufferW[LAST_ERROR_TEXT_BUFFER_SIZE - 1] = TEXT('\0');
-#else
- return strerror(errno);
-#endif
+ return lastErrorTextBufferW;
}
+
+/**
+ * Returns the last error number.
+ *
+ * @return The last error number.
+ */
int getLastError() {
+#ifdef WIN32
+ return GetLastError();
+#else
return errno;
+#endif
}
-#endif
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-27 14:53:27
|
Revision: 1909
http://sourceforge.net/p/wrapper/code/1909
Author: mortenson
Date: 2014-11-27 14:53:23 +0000 (Thu, 27 Nov 2014)
Log Message:
-----------
Up version to 3.5.26
Modified Paths:
--------------
trunk/wrapper/README_de.txt
trunk/wrapper/README_en.txt
trunk/wrapper/README_es.txt
trunk/wrapper/README_ja.txt
trunk/wrapper/default.properties
trunk/wrapper/src/bin/App.bat.in
trunk/wrapper/src/bin/AppCommand.bat.in
trunk/wrapper/src/bin/AppTemplate.bat.in
trunk/wrapper/src/bin/AppTemplatePassThrough.bat.in
trunk/wrapper/src/bin/InstallApp-NT.bat.in
trunk/wrapper/src/bin/PauseApp-NT.bat.in
trunk/wrapper/src/bin/QueryApp-NT.bat.in
trunk/wrapper/src/bin/ResumeApp-NT.bat.in
trunk/wrapper/src/bin/StartApp-NT.bat.in
trunk/wrapper/src/bin/StopApp-NT.bat.in
trunk/wrapper/src/bin/UninstallApp-NT.bat.in
trunk/wrapper/src/bin/sh.script.in
trunk/wrapper/src/c/Wrapper.rc
trunk/wrapper/src/c/wrapperinfo.c.in
Modified: trunk/wrapper/README_de.txt
===================================================================
--- trunk/wrapper/README_de.txt 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/README_de.txt 2014-11-27 14:53:23 UTC (rev 1909)
@@ -1,5 +1,5 @@
-----------------------------------------------------------------------------
-Java Service Wrapper Community Edition 3.5.26-a
+Java Service Wrapper Community Edition 3.5.26
Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
Modified: trunk/wrapper/README_en.txt
===================================================================
--- trunk/wrapper/README_en.txt 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/README_en.txt 2014-11-27 14:53:23 UTC (rev 1909)
@@ -1,5 +1,5 @@
-----------------------------------------------------------------------------
-Java Service Wrapper Community Edition 3.5.26-a
+Java Service Wrapper Community Edition 3.5.26
Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
Modified: trunk/wrapper/README_es.txt
===================================================================
--- trunk/wrapper/README_es.txt 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/README_es.txt 2014-11-27 14:53:23 UTC (rev 1909)
@@ -1,5 +1,5 @@
-----------------------------------------------------------------------------
-Java Service Wrapper Community Edition 3.5.26-a
+Java Service Wrapper Community Edition 3.5.26
Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
Modified: trunk/wrapper/README_ja.txt
===================================================================
--- trunk/wrapper/README_ja.txt 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/README_ja.txt 2014-11-27 14:53:23 UTC (rev 1909)
@@ -1,5 +1,5 @@
-----------------------------------------------------------------------------
-Java Service Wrapper Community Edition 3.5.26-a
+Java Service Wrapper Community Edition 3.5.26
Copyright (C) 1999-2014 Tanuki Software, Ltd. All Rights Reserved.
http://wrapper.tanukisoftware.com
-----------------------------------------------------------------------------
Modified: trunk/wrapper/default.properties
===================================================================
--- trunk/wrapper/default.properties 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/default.properties 2014-11-27 14:53:23 UTC (rev 1909)
@@ -8,9 +8,9 @@
name = wrapper
Name = Wrapper
long.name = Java Service Wrapper Community ${Version}
-Version = 3.5.26-a
+Version = 3.5.26
version = ${Version}
-version.root = 3.5.26-a
+version.root = 3.5.26
year = 2014
# NOTE - The version property gets corrupted by the use of Xalan
# so Version is used instead.
Modified: trunk/wrapper/src/bin/App.bat.in
===================================================================
--- trunk/wrapper/src/bin/App.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/App.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -15,7 +15,7 @@
rem
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/AppCommand.bat.in
===================================================================
--- trunk/wrapper/src/bin/AppCommand.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/AppCommand.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/AppTemplate.bat.in
===================================================================
--- trunk/wrapper/src/bin/AppTemplate.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/AppTemplate.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/AppTemplatePassThrough.bat.in
===================================================================
--- trunk/wrapper/src/bin/AppTemplatePassThrough.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/AppTemplatePassThrough.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -15,7 +15,7 @@
rem
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/InstallApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/InstallApp-NT.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/InstallApp-NT.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -15,7 +15,7 @@
rem
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/PauseApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/PauseApp-NT.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/PauseApp-NT.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/QueryApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/QueryApp-NT.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/QueryApp-NT.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/ResumeApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/ResumeApp-NT.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/ResumeApp-NT.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/StartApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/StartApp-NT.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/StartApp-NT.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/StopApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/StopApp-NT.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/StopApp-NT.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/UninstallApp-NT.bat.in
===================================================================
--- trunk/wrapper/src/bin/UninstallApp-NT.bat.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/UninstallApp-NT.bat.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -16,7 +16,7 @@
rem -----------------------------------------------------------------------------
rem These settings can be modified to fit the needs of your application
-rem Optimized for use with version 3.5.26-a of the Wrapper.
+rem Optimized for use with version 3.5.26 of the Wrapper.
rem The base name for the Wrapper binary.
set _WRAPPER_BASE=wrapper
Modified: trunk/wrapper/src/bin/sh.script.in
===================================================================
--- trunk/wrapper/src/bin/sh.script.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/bin/sh.script.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -16,7 +16,7 @@
#-----------------------------------------------------------------------------
# These settings can be modified to fit the needs of your application
-# Optimized for use with version 3.5.26-a of the Wrapper.
+# Optimized for use with version 3.5.26 of the Wrapper.
# IMPORTANT - Please always stop and uninstall an application before making
# any changes to this file. Failure to do so could remove the
@@ -950,7 +950,7 @@
prepAdditionalParams "$@"
# The string passed to eval must handles spaces in paths correctly.
- COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.26-a $ADDITIONAL_PARA"
+ COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.26 $ADDITIONAL_PARA"
eval $COMMAND_LINE
else
eval echo `gettext '$APP_LONG_NAME is already running.'`
@@ -973,7 +973,7 @@
prepAdditionalParams "$@"
# The string passed to eval must handles spaces in paths correctly.
- COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.26-a $ADDITIONAL_PARA"
+ COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.26 $ADDITIONAL_PARA"
eval $COMMAND_LINE
else
eval echo `gettext '$APP_LONG_NAME is already running.'`
@@ -1226,7 +1226,7 @@
prepAdditionalParams "$@"
# The string passed to eval must handles spaces in paths correctly.
- COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.26-a $ADDITIONAL_PARA"
+ COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP wrapper.script.version=3.5.26 $ADDITIONAL_PARA"
eval $COMMAND_LINE
else
eval echo `gettext '$APP_LONG_NAME is already running.'`
Modified: trunk/wrapper/src/c/Wrapper.rc
===================================================================
--- trunk/wrapper/src/c/Wrapper.rc 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/c/Wrapper.rc 2014-11-27 14:53:23 UTC (rev 1909)
@@ -70,7 +70,7 @@
BLOCK "000904b0"
BEGIN
VALUE "CompanyName", "Tanuki Software, Ltd."
- VALUE "FileDescription", "Java Service Wrapper Community Edition 3.5.26-a"
+ VALUE "FileDescription", "Java Service Wrapper Community Edition 3.5.26"
VALUE "FileVersion", "3, 5, 26, 0"
VALUE "LegalCopyright", "Copyright (C) 1999, 2014 Tanuki Software, Ltd. All rights reserved."
VALUE "InternalName", "wrapper"
Modified: trunk/wrapper/src/c/wrapperinfo.c.in
===================================================================
--- trunk/wrapper/src/c/wrapperinfo.c.in 2014-11-27 14:24:33 UTC (rev 1908)
+++ trunk/wrapper/src/c/wrapperinfo.c.in 2014-11-27 14:53:23 UTC (rev 1909)
@@ -30,7 +30,7 @@
TCHAR *wrapperBits = TEXT("@bits@");
TCHAR *wrapperArch = TEXT("@dist.arch@");
TCHAR *wrapperOS = TEXT("@dist.os@");
-TCHAR *wrapperReleaseDate = TEXT("20140701");
+TCHAR *wrapperReleaseDate = TEXT("20141201");
TCHAR *wrapperReleaseTime = TEXT("0000");
TCHAR *wrapperBuildDate = TEXT("@build.date@");
TCHAR *wrapperBuildTime = TEXT("@build.time@");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-27 14:24:45
|
Revision: 1908
http://sourceforge.net/p/wrapper/code/1908
Author: mortenson
Date: 2014-11-27 14:24:33 +0000 (Thu, 27 Nov 2014)
Log Message:
-----------
Improve error message when command line too long on UNIX platforms.
Modified Paths:
--------------
trunk/wrapper/build-tests.xml
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/c/wrapper.c
trunk/wrapper/src/c/wrapper_unix.c
Modified: trunk/wrapper/build-tests.xml
===================================================================
--- trunk/wrapper/build-tests.xml 2014-11-27 08:25:40 UTC (rev 1907)
+++ trunk/wrapper/build-tests.xml 2014-11-27 14:24:33 UTC (rev 1908)
@@ -2144,7 +2144,7 @@
<chmod file="${test.dir}/memory" perm="+x"/>
<!-- Huge Classpath Max Size Test -->
- <filter token="app.name" value="hugeclasspath"/>
+ <filter token="app.name" value="hugeclasspathmaxsize"/>
<filter token="app.long.name" value="Huge Classpath Max Size Case" />
<copy file="${test.dir}/temp.script.in"
tofile="${test.dir}/hugeclasspathmaxsize"
@@ -2152,7 +2152,7 @@
<chmod file="${test.dir}/hugeclasspathmaxsize" perm="+x"/>
<!-- Huge Classpath Over Size Test -->
- <filter token="app.name" value="hugeclasspath"/>
+ <filter token="app.name" value="hugeclasspathoversize"/>
<filter token="app.long.name" value="Huge Classpath Over Size Case" />
<copy file="${test.dir}/temp.script.in"
tofile="${test.dir}/hugeclasspathoversize"
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-11-27 08:25:40 UTC (rev 1907)
+++ trunk/wrapper/doc/revisions.txt 2014-11-27 14:24:33 UTC (rev 1908)
@@ -74,6 +74,10 @@
length. Different versions of Windows handle it differently when such a
long command is provided. The Wrapper now does its own check and shows an
error in a consistent way.
+* Improve the error message on UNIX platforms when the command line is longer
+ than the system maximum. This maximum varies greatly by platform and
+ environment and is difficult to calculate reliably, so the maximum length
+ is not currently shown in the message.
* (Professional) Add checks to the WrapperManager.exec() methods on Windows
for the maximum command line length of 32766, and maximum environment
variable name-value pair length of 32767.
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-11-27 08:25:40 UTC (rev 1907)
+++ trunk/wrapper/src/c/wrapper.c 2014-11-27 14:24:33 UTC (rev 1908)
@@ -2484,7 +2484,7 @@
/* Should not reach this part because wrapperData->backendType should always have a valid value */
return 0;
}
-
+
/* Convert the multi-byte packetBufferMB buffer into a wide-character string. */
/* Source message is always smaller than the MAX_LOG_SIZE so the output will be as well. */
#ifdef WIN32
@@ -3462,7 +3462,7 @@
size_t commandLen;
size_t commandLen2;
size_t commandLenLen;
- TCHAR commandLenBuffer[7];
+ TCHAR commandLenBuffer[8];
size_t fillerLen;
TCHAR *tempCommand;
size_t index;
@@ -3481,14 +3481,14 @@
commandLen = _tcslen(command);
commandLenLen = pos2 - pos1 - 24;
- if (commandLenLen >= 7) {
+ if (commandLenLen >= 8) {
/* Too long. invalid. */
return command;
}
memcpy(commandLenBuffer, pos1 + 24, sizeof(TCHAR) * commandLenLen);
commandLenBuffer[commandLenLen] = TEXT('\0');
- commandLen2 = __max(commandLen - commandLenLen - 25, __min(_ttoi(commandLenBuffer), 100000));
+ commandLen2 = __max(commandLen - commandLenLen - 25, __min(_ttoi(commandLenBuffer), 9999999));
fillerLen = commandLen2 - commandLen + commandLenLen + 25;
Modified: trunk/wrapper/src/c/wrapper_unix.c
===================================================================
--- trunk/wrapper/src/c/wrapper_unix.c 2014-11-27 08:25:40 UTC (rev 1907)
+++ trunk/wrapper/src/c/wrapper_unix.c 2014-11-27 14:24:33 UTC (rev 1908)
@@ -35,6 +35,7 @@
#ifndef WIN32
+#include <linux/limits.h>
#include <wchar.h>
#include <netdb.h>
#include <stdio.h>
@@ -1156,6 +1157,35 @@
}
/**
+ * Calculate the total length of the environment assuming that they are separated by spaces.
+ */
+size_t wrapperCalculateEnvironmentLength() {
+ /* The compiler won't let us reverence environ directly in the for loop on OSX because it is actually a function. */
+ char **environment = environ;
+ size_t i;
+ size_t len;
+ size_t lenTotal;
+
+ i = 0;
+ lenTotal = 0;
+ while (environment[i]) {
+ /* All we need is the length so we don't actually have to convert them. */
+ len = mbstowcs(NULL, environment[i], MBSTOWCS_QUERY_LENGTH);
+ if (len == (size_t)-1) {
+ /* Invalid string. Skip. */
+ } else {
+ /* Add length of variable + null + pointer to next element */
+ lenTotal += len + 1 + sizeof(char *);
+ }
+ i++;
+ }
+ /* Null termination of the list. */
+ lenTotal += sizeof(char *) + sizeof(char *);
+
+ return lenTotal;
+}
+
+/**
* Launches a JVM process and stores it internally.
*
* @return TRUE if there were any problems. When this happens the Wrapper will not try to restart.
@@ -1163,6 +1193,9 @@
int wrapperExecute() {
int i;
pid_t proc;
+ int execErrno;
+ size_t lenCmd;
+ size_t lenEnv;
/* Create the pipe. */
if (pipe(pipedes) < 0) {
@@ -1287,11 +1320,27 @@
/* The pipedes array is global so do not close the pipes. */
/* Child process: execute the JVM. */
_texecvp(wrapperData->jvmCommand[0], wrapperData->jvmCommand);
+ execErrno = errno;
/* We reached this point...meaning we were unable to start. */
log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_ERROR,
- TEXT("%sUnable to start JVM: %s (%d)"), LOG_FORK_MARKER, getLastErrorText(), errno);
+ TEXT("%sUnable to start JVM: %s (%d)"), LOG_FORK_MARKER, getLastErrorText(), execErrno);
+ if (execErrno == E2BIG) {
+ /* Command line too long. */
+ /* Calculate the total length of the command line. */
+ lenCmd = 0;
+ for (i = 0; wrapperData->jvmCommand[i] != NULL; i++) {
+ lenCmd += _tcslen(wrapperData->jvmCommand[i]) + 1;
+ }
+ lenEnv = wrapperCalculateEnvironmentLength();
+ log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_ERROR, TEXT("%s The generated command line plus the environment was larger than the maximum allowed."), LOG_FORK_MARKER);
+ log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_ERROR, TEXT("%s The current length is %d bytes of which %d is the command line, and %d is the environment."), LOG_FORK_MARKER, lenCmd + lenEnv + 1, lenCmd, lenEnv);
+ log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_ERROR, TEXT("%s It is not possible to calculate an exact maximum length as it depends on a number of factors for each system."), LOG_FORK_MARKER);
+ /* TODO: Figure out a way to inform the Wrapper not to restart and try again as repeatedly doing this is meaningless. */
+ }
+
+
if (wrapperData->isAdviserEnabled) {
log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_ADVICE, TEXT("%s"), LOG_FORK_MARKER );
log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_ADVICE,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-27 08:25:43
|
Revision: 1907
http://sourceforge.net/p/wrapper/code/1907
Author: mortenson
Date: 2014-11-27 08:25:40 +0000 (Thu, 27 Nov 2014)
Log Message:
-----------
Fix a linux compiler error from last commit.
Modified Paths:
--------------
trunk/wrapper/src/c/wrapper.c
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-11-27 08:14:49 UTC (rev 1906)
+++ trunk/wrapper/src/c/wrapper.c 2014-11-27 08:25:40 UTC (rev 1907)
@@ -2497,7 +2497,7 @@
packetBufferW[0] = TEXT('\0');
}
#else
- req = mbstowcs(packetBufferMB, packetBufferW, MAX_LOG_SIZE + 1);
+ req = mbstowcs(packetBufferW, packetBufferMB, MAX_LOG_SIZE + 1);
if (req == (size_t)-1) {
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_WARN,
TEXT("Invalid multibyte sequence in %s: %s"), TEXT("protocol message"), getLastErrorText());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-27 08:14:53
|
Revision: 1906
http://sourceforge.net/p/wrapper/code/1906
Author: mortenson
Date: 2014-11-27 08:14:49 +0000 (Thu, 27 Nov 2014)
Log Message:
-----------
Fix a problem where double byte output was failing when logged with WrapperManager.log(). Add the length to debug log output for the sending of the Wrapper configuration to the WrapperManager to help with debugging.
Modified Paths:
--------------
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/c/logger_file.c
trunk/wrapper/src/c/wrapper.c
trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperManager.java
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LogOutput.java
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-11-27 06:35:07 UTC (rev 1905)
+++ trunk/wrapper/doc/revisions.txt 2014-11-27 08:14:49 UTC (rev 1906)
@@ -98,6 +98,11 @@
* (Standard, Professional) Disallow the use of hostids tied to Apple Bluetooth
devices when running on a virtualized Windows system hosted on an OS X
system.
+* Fix a problem where WrapperManager.log() was not working correctly when
+ multi-byte messages were logged.
+* In the debug output the full configuration properties packet is suppressed
+ from the log output because it is huge and can contain sensitive data.
+ Add a size to the abbreviated output to assist with debugging.
3.5.25
* (Professional) Improve the wrapper.timer.<n>.interval property so it is now
Modified: trunk/wrapper/src/c/logger_file.c
===================================================================
--- trunk/wrapper/src/c/logger_file.c 2014-11-27 06:35:07 UTC (rev 1905)
+++ trunk/wrapper/src/c/logger_file.c 2014-11-27 08:14:49 UTC (rev 1906)
@@ -412,7 +412,7 @@
return NULL;
}
}
-#else
+#else /* Unix */
#ifdef UNICODE
char* cPattern;
@@ -486,7 +486,7 @@
}
}
#ifdef WRAPPER_FILE_DEBUG
- printf(" files[%d]=%s, %ld\n", cnt, files[cnt], fileTimes[cnt]);
+ _tprintf(TEXT(" files[%d]=%s, %ld\n"), cnt, files[cnt], fileTimes[cnt]);
#endif
cnt++;
}
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-11-27 06:35:07 UTC (rev 1905)
+++ trunk/wrapper/src/c/wrapper.c 2014-11-27 08:14:49 UTC (rev 1906)
@@ -129,7 +129,8 @@
#endif
WrapperConfig *wrapperData;
-TCHAR packetBuffer[MAX_LOG_SIZE + 1];
+char packetBufferMB[MAX_LOG_SIZE + 1];
+TCHAR packetBufferW[MAX_LOG_SIZE + 1];
TCHAR *keyChars = TEXT("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-");
/* Properties structure loaded in from the configuration file. */
@@ -1660,7 +1661,7 @@
req = MultiByteToWideChar(CP_OEMCP, 0, straddr, -1, NULL, 0);
if (req <= 0) {
log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_WARN,
- TEXT("Invalid multibyte sequence in protocol message: %s"), getLastErrorText());
+ TEXT("Invalid multibyte sequence in %s: %s"), TEXT("network address"), getLastErrorText());
return;
}
socketSource = malloc(sizeof(TCHAR) * (req + 1));
@@ -1673,7 +1674,7 @@
req = mbstowcs(NULL, straddr, MBSTOWCS_QUERY_LENGTH);
if (req == (size_t)-1) {
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_WARN,
- TEXT("Invalid multibyte sequence in protocol message: %s"), getLastErrorText());
+ TEXT("Invalid multibyte sequence in %s: %s"), TEXT("network address"), getLastErrorText());
return;
}
socketSource = malloc(sizeof(TCHAR) * (req + 1));
@@ -2026,10 +2027,17 @@
* @return TRUE if there were any problems.
*/
int wrapperProtocolFunction(char function, const TCHAR *messageW) {
+#ifdef UNICODE
+ #ifdef WIN32
+ TCHAR buffer[16];
+ UINT cp;
+ #endif
+#endif
int rc;
int cnt, inWritten;
size_t len;
- const TCHAR *logMsgW;
+ TCHAR *logMsgW;
+ const TCHAR *messageTemplate;
char *messageMB = NULL;
int returnVal = FALSE;
int ok = TRUE;
@@ -2039,28 +2047,23 @@
return TRUE;
}
- /* We don't want to show the full properties log message. It is quite long and distracting. */
- if (function == WRAPPER_MSG_PROPERTIES) {
- logMsgW = TEXT("(Property Values)");
- } else {
- logMsgW = messageW;
- }
-
if (ok) {
/* We will be trasmitting a MultiByte string of characters. So we need to convert the messageW. */
if (messageW) {
#ifdef UNICODE
#ifdef WIN32
+ GetLocaleInfo(GetThreadLocale(), LOCALE_IDEFAULTANSICODEPAGE, buffer, sizeof(buffer));
+ cp = _ttoi(buffer);
len = WideCharToMultiByte(CP_OEMCP, 0, messageW, -1, NULL, 0, NULL, NULL);
if (len <= 0) {
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_WARN,
- TEXT("Invalid multibyte sequence in protocol message \"%s\" : %s"), messageW, getLastErrorText());
+ TEXT("Invalid multibyte sequence in %s \"%s\" : %s"), TEXT("protocol message"), messageW, getLastErrorText());
returnVal = TRUE;
ok = FALSE;
} else {
messageMB = malloc(len);
if (!messageMB) {
- outOfMemory(TEXT("WPF"), 1);
+ outOfMemory(TEXT("WPF"), 2);
returnVal = TRUE;
ok = FALSE;
} else {
@@ -2071,13 +2074,13 @@
len = wcstombs(NULL, messageW, 0);
if (len == (size_t)-1) {
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_WARN,
- TEXT("Invalid multibyte sequence in protocol message \"%s\" : %s"), messageW, getLastErrorText());
+ TEXT("Invalid multibyte sequence in %s \"%s\" : %s"), TEXT("protocol message"), messageW, getLastErrorText());
returnVal = TRUE;
ok = FALSE;
} else {
messageMB = malloc(len + 1);
if (!messageMB) {
- outOfMemory(TEXT("WPF"), 2);
+ outOfMemory(TEXT("WPF"), 3);
returnVal = TRUE;
ok = FALSE;
} else {
@@ -2089,7 +2092,7 @@
len = _tscslen(messageW) + 1;
messageMB = malloc(len);
if (!messageMB) {
- outOfMemory(TEXT("WPF"), 3);
+ outOfMemory(TEXT("WPF"), 4);
returnVal = TRUE;
ok = FALSE;
} else {
@@ -2101,6 +2104,22 @@
}
}
+ /* We don't want to show the full properties log message. It is quite long and distracting. */
+ if (function == WRAPPER_MSG_PROPERTIES) {
+ messageTemplate = TEXT("(Property Values, Size=%d)");
+ len = _tcslen(messageTemplate) + 16 + 1;
+ logMsgW = malloc(sizeof(TCHAR) * len);
+ if (!logMsgW) {
+ outOfMemory(TEXT("WPF"), 1);
+ /* Fallback to raw message. Not ideal but Ok. */
+ logMsgW = (TCHAR*)messageW; /* Strip the const, but will never be modified. */
+ } else {
+ _sntprintf(logMsgW, len, messageTemplate, strlen(messageMB));
+ }
+ } else {
+ logMsgW = (TCHAR*)messageW; /* Strip the const, but will never be modified. */
+ }
+
if (ok) {
/* We need to construct a single string that will be used to transmit the command + message. */
if (messageMB) {
@@ -2164,7 +2183,7 @@
if ((inWritten = write(protocolActiveServerPipeOut, protocolSendBuffer, sizeof(char) * (int)len)) == -1) {
#endif
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_FATAL, TEXT("Writing to the backend pipe failed (%d): %s"), wrapperGetLastError(), getLastErrorText());
- return FALSE;
+ returnVal = TRUE;
}
} else {
cnt = 0;
@@ -2200,6 +2219,11 @@
}
}
}
+
+ /* Free up the logMsgW if we allocated it. */
+ if (logMsgW != messageW) {
+ free(logMsgW);
+ }
/* Always make sure the mutex is released. */
if (releaseProtocolMutex()) {
@@ -2303,6 +2327,11 @@
time_t now;
int nowMillis;
time_t durr;
+#ifdef WIN32
+ TCHAR cpBuffer[16];
+ UINT cp;
+#endif
+ size_t req;
wrapperGetCurrentTime(&timeBuffer);
startTime = now = timeBuffer.time;
@@ -2366,7 +2395,7 @@
/* End of string */
len = 0;
} else if (pos < MAX_LOG_SIZE) {
- packetBuffer[pos] = c;
+ packetBufferMB[pos] = c;
pos++;
}
} else {
@@ -2375,7 +2404,7 @@
} while (len == 1);
/* terminate the string; */
- packetBuffer[pos] = TEXT('\0');
+ packetBufferMB[pos] = '\0';
} else if (wrapperData->backendType == WRAPPER_BACKEND_TYPE_PIPE) {
#ifdef WIN32
err = PeekNamedPipe(protocolActiveServerPipeIn, NULL, 0, NULL, &maxlen, NULL);
@@ -2398,14 +2427,14 @@
/* End of string */
len = 0;
} else if (pos < MAX_LOG_SIZE) {
- packetBuffer[pos] = c;
+ packetBufferMB[pos] = c;
pos++;
}
} else {
len = 0;
}
} while (len == 1 && maxlen-- >= 0);
- packetBuffer[pos] = TEXT('\0');
+ packetBufferMB[pos] = '\0';
} else {
if (GetLastError() == ERROR_INVALID_HANDLE) {
return 0;
@@ -2441,7 +2470,7 @@
/* End of string */
len = 0;
} else if (pos < MAX_LOG_SIZE) {
- packetBuffer[pos] = c;
+ packetBufferMB[pos] = c;
pos++;
}
} else {
@@ -2449,28 +2478,48 @@
}
} while (len == 1);
/* terminate the string; */
- packetBuffer[pos] = TEXT('\0');
+ packetBufferMB[pos] = '\0';
#endif
} else {
/* Should not reach this part because wrapperData->backendType should always have a valid value */
return 0;
}
+
+ /* Convert the multi-byte packetBufferMB buffer into a wide-character string. */
+ /* Source message is always smaller than the MAX_LOG_SIZE so the output will be as well. */
+#ifdef WIN32
+ GetLocaleInfo(GetThreadLocale(), LOCALE_IDEFAULTANSICODEPAGE, cpBuffer, sizeof(cpBuffer));
+ cp = _ttoi(cpBuffer);
+ req = MultiByteToWideChar(cp, 0, packetBufferMB, -1, packetBufferW, MAX_LOG_SIZE + 1);
+ if (req <= 0) {
+ log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_WARN,
+ TEXT("Invalid multibyte sequence in %s: %s"), TEXT("protocol message"), getLastErrorText());
+ packetBufferW[0] = TEXT('\0');
+ }
+#else
+ req = mbstowcs(packetBufferMB, packetBufferW, MAX_LOG_SIZE + 1);
+ if (req == (size_t)-1) {
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_WARN,
+ TEXT("Invalid multibyte sequence in %s: %s"), TEXT("protocol message"), getLastErrorText());
+ packetBufferW[0] = TEXT('\0');
+ }
+#endif
if (wrapperData->isDebugging) {
- if ((code == WRAPPER_MSG_PING) && (_tcsstr(packetBuffer, TEXT("silent")) == packetBuffer)) {
+ if ((code == WRAPPER_MSG_PING) && (_tcsstr(packetBufferW, TEXT("silent")) == packetBufferW)) {
/*
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT("read a silent ping packet %s : %s"),
- wrapperProtocolGetCodeName(code), packetBuffer);
+ wrapperProtocolGetCodeName(code), packetBufferW);
*/
} else {
log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT("read a packet %s : %s"),
- wrapperProtocolGetCodeName(code), packetBuffer);
+ wrapperProtocolGetCodeName(code), packetBufferW);
}
}
switch (code) {
case WRAPPER_MSG_STOP:
- wrapperStopRequested(_ttoi(packetBuffer));
+ wrapperStopRequested(_ttoi(packetBufferW));
break;
case WRAPPER_MSG_RESTART:
@@ -2479,7 +2528,7 @@
case WRAPPER_MSG_PING:
/* Because all versions of the wrapper.jar simply bounce back the ping message, the pingSendTicks should always exist. */
- tc = _tcschr(packetBuffer, TEXT(' '));
+ tc = _tcschr(packetBufferW, TEXT(' '));
if (tc) {
/* A pingSendTicks should exist. Parse the id following the space. It will be in the format 0xffffffff. */
wrapperPingResponded(hexToTICKS(&tc[1]), TRUE);
@@ -2490,7 +2539,7 @@
break;
case WRAPPER_MSG_STOP_PENDING:
- wrapperStopPendingSignaled(_ttoi(packetBuffer));
+ wrapperStopPendingSignaled(_ttoi(packetBufferW));
break;
case WRAPPER_MSG_STOPPED:
@@ -2498,7 +2547,7 @@
break;
case WRAPPER_MSG_START_PENDING:
- wrapperStartPendingSignaled(_ttoi(packetBuffer));
+ wrapperStartPendingSignaled(_ttoi(packetBufferW));
break;
case WRAPPER_MSG_STARTED:
@@ -2506,7 +2555,7 @@
break;
case WRAPPER_MSG_KEY:
- wrapperKeyRegistered(packetBuffer);
+ wrapperKeyRegistered(packetBufferW);
break;
case WRAPPER_MSG_LOG + LEVEL_DEBUG:
@@ -2515,7 +2564,7 @@
case WRAPPER_MSG_LOG + LEVEL_WARN:
case WRAPPER_MSG_LOG + LEVEL_ERROR:
case WRAPPER_MSG_LOG + LEVEL_FATAL:
- wrapperLogSignaled(code - WRAPPER_MSG_LOG, packetBuffer);
+ wrapperLogSignaled(code - WRAPPER_MSG_LOG, packetBufferW);
break;
case WRAPPER_MSG_APPEAR_ORPHAN:
@@ -2524,7 +2573,7 @@
default:
if (wrapperData->isDebugging) {
- log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT("received unknown packet (%d:%s)"), code, packetBuffer);
+ log_printf(WRAPPER_SOURCE_PROTOCOL, LEVEL_DEBUG, TEXT("received unknown packet (%d:%s)"), code, packetBufferW);
}
break;
}
@@ -3630,7 +3679,7 @@
size = MultiByteToWideChar(cp, 0, log, -1 , NULL, 0);
if (size <= 0) {
log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_WARN,
- TEXT("Invalid multibyte sequence in protocol message \"%s\" : %s"), log, getLastErrorText());
+ TEXT("Invalid multibyte sequence in %s: %s"), TEXT("JVM console output"), getLastErrorText());
return;
}
@@ -3639,12 +3688,12 @@
outOfMemory(TEXT("WLCO"), 1);
return;
}
- MultiByteToWideChar(cp, 0, log, -1, (TCHAR*)tlog, size + 1);
+ MultiByteToWideChar(cp, 0, log, -1, tlog, size + 1);
#else
size = mbstowcs(NULL, log, MBSTOWCS_QUERY_LENGTH);
if (size == (size_t)-1) {
log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_WARN,
- TEXT("Invalid multibyte sequence in protocol message \"%s\" : %s"), log, getLastErrorText());
+ TEXT("Invalid multibyte sequence in %s: %s"), TEXT("JVM console output"), getLastErrorText());
return;
}
tlog = malloc(sizeof(TCHAR) * (size + 1));
Modified: trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperManager.java
===================================================================
--- trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperManager.java 2014-11-27 06:35:07 UTC (rev 1905)
+++ trunk/wrapper/src/java/org/tanukisoftware/wrapper/WrapperManager.java 2014-11-27 08:14:49 UTC (rev 1906)
@@ -5373,6 +5373,7 @@
byte code = is.readByte();
// Always read from the buffer until a null '\0' is encountered.
+ // A multi-byte string will never have a 0 as part of another character so this should be safe for all encodings.
byte b;
int i = 0;
do
@@ -5392,6 +5393,7 @@
}
while ( b != 0 );
+ // The message should be multi-byte string in the system encoding.
String msg = new String( m_backendReadBuffer, 0, i );
if ( m_appearHung )
@@ -5409,7 +5411,7 @@
// The property values are very large and distracting in the log.
// Plus if any triggers are defined, then logging them will fire
// the trigger.
- logMsg = getRes().getString( "(Property Values)" );
+ logMsg = getRes().getString( "(Property Values, Size={0})", Integer.toString( i ) );
}
else
{
Modified: trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LogOutput.java
===================================================================
--- trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LogOutput.java 2014-11-27 06:35:07 UTC (rev 1905)
+++ trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/LogOutput.java 2014-11-27 08:14:49 UTC (rev 1906)
@@ -90,6 +90,8 @@
for (int i = 0; i < 100; i++) {
WrapperManager.log(WrapperManager.WRAPPER_LOG_LEVEL_INFO, sa);
}
+
+ WrapperManager.log(WrapperManager.WRAPPER_LOG_LEVEL_INFO, Main.getRes().getString( "Japanese \u300c\u65e5\u672c\u8a9e\u306e\u8a66\u9a13 \u30a2\u30a4\u30a6\u30a8\u30aa\u30ab\u30ad\u30af\u30b1\u30b3\u300d Test" ) );
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-27 06:35:11
|
Revision: 1905
http://sourceforge.net/p/wrapper/code/1905
Author: mortenson
Date: 2014-11-27 06:35:07 +0000 (Thu, 27 Nov 2014)
Log Message:
-----------
sh script fix for OS X
Modified Paths:
--------------
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/bin/sh.script.in
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-11-18 06:03:01 UTC (rev 1904)
+++ trunk/wrapper/doc/revisions.txt 2014-11-27 06:35:07 UTC (rev 1905)
@@ -89,6 +89,15 @@
maximum number of characters that can be written with a single API call to
30000 to work around the issue. This change is internal and there is still
no limit on the length of logged lines.
+* Fix a deadlock if the Wrapper failed to write to the backend when the
+ wrapper.backend.type property was PIPE. Found by code review and is not
+ known to have actually happened.
+* From Mac OSX 10.5.0, the script file will use the key 'KeepAlive' in the
+ launchctl configuration file. Prior versions of Mac OSX will continue to use
+ the same key 'OnDemand'. Thanks to Robin for pointing this out.
+* (Standard, Professional) Disallow the use of hostids tied to Apple Bluetooth
+ devices when running on a virtualized Windows system hosted on an OS X
+ system.
3.5.25
* (Professional) Improve the wrapper.timer.<n>.interval property so it is now
@@ -96,14 +105,15 @@
interval values to more precisely control when timers are fired.
* (Professional) Fix a problem with the wrapper.timer.<n>.interval property
where timers would not fire during an interval the system time was set back.
- Also fixed a problem where timers would stop firing permanently if the system
- time was set forward by more than the value of the wrapper.timer.max_catchup
- property and a timer had been scheduled to be fired during that interval.
- Both of these issues were most likely during daylight savings time.
+ Also fixed a problem where timers would stop firing permanently if the
+ system time was set forward by more than the value of the
+ wrapper.timer.max_catchup property and a timer had been scheduled to be
+ fired during that interval. Both of these issues were most likely during
+ daylight savings time.
* Fix a problem where signals received by the JVM were not being logged in
- debug output correctly if the wrapper.ignore_signals property is set to true.
- We now also log debug output even if a user event listener consumes the
- signal event.
+ debug output correctly if the wrapper.ignore_signals property is set to
+ true. We now also log debug output even if a user event listener consumes
+ the signal event.
* Fix a problem on Gentoo Linux where the shell script was not correctly
detecting the system architecture. This may also be a problem on other
distributions whose 'uname -p' returns a detailed architecture.
Modified: trunk/wrapper/src/bin/sh.script.in
===================================================================
--- trunk/wrapper/src/bin/sh.script.in 2014-11-18 06:03:01 UTC (rev 1904)
+++ trunk/wrapper/src/bin/sh.script.in 2014-11-27 06:35:07 UTC (rev 1905)
@@ -359,7 +359,9 @@
if [[ $? < 1 ]]
then
DIST_BITS="32"
+ KEY_KEEP_ALIVE="OnDemand"
else
+ KEY_KEEP_ALIVE="KeepAlive"
if [ "X`/usr/sbin/sysctl -n hw.cpu64bit_capable`" == "X1" ]
then
DIST_BITS="64"
@@ -1533,7 +1535,7 @@
echo " <string>${REALPATH}</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
echo " <string>launchdinternal</string>" >> "/Library/LaunchDaemons/${APP_PLIST}"
echo " </array>" >> "/Library/LaunchDaemons/${APP_PLIST}"
- echo " <key>OnDemand</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
+ echo " <key>${KEY_KEEP_ALIVE}</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
echo " <true/>" >> "/Library/LaunchDaemons/${APP_PLIST}"
echo " <key>RunAtLoad</key>" >> "/Library/LaunchDaemons/${APP_PLIST}"
echo " <true/>" >> "/Library/LaunchDaemons/${APP_PLIST}"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-18 06:03:07
|
Revision: 1904
http://sourceforge.net/p/wrapper/code/1904
Author: mortenson
Date: 2014-11-18 06:03:01 +0000 (Tue, 18 Nov 2014)
Log Message:
-----------
Implement the WRAPPER_COMMAND_FILLER_ test var on all platforms.
Modified Paths:
--------------
trunk/wrapper/src/c/wrapper.c
trunk/wrapper/src/c/wrapper.h
trunk/wrapper/src/c/wrapper_unix.c
trunk/wrapper/src/c/wrapper_win.c
Modified: trunk/wrapper/src/c/wrapper.c
===================================================================
--- trunk/wrapper/src/c/wrapper.c 2014-11-17 09:20:54 UTC (rev 1903)
+++ trunk/wrapper/src/c/wrapper.c 2014-11-18 06:03:01 UTC (rev 1904)
@@ -3393,6 +3393,88 @@
}
/**
+ * Does any necessary post processing on the command string.
+ * This function assumes that command has been malloced. It will either return
+ * the string as is, or return a modified string. When a modified string is
+ * returned the orignal command buffer will always be freed.
+ *
+ * 1) Replace the first instance of the %WRAPPER_COMMAND_FILLER_N% environment
+ * variable so that the total command length will be equal to or greater than
+ * the length specified by N. The padding will be the length plus a series of
+ * Xs terminated by a single Y. This is mainly for testing.
+ *
+ * @param command The original command.
+ *
+ * @return The modifed command.
+ */
+TCHAR *wrapperPostProcessCommandElement(TCHAR *command) {
+ TCHAR *pos1;
+ TCHAR *pos2;
+ size_t commandLen;
+ size_t commandLen2;
+ size_t commandLenLen;
+ TCHAR commandLenBuffer[7];
+ size_t fillerLen;
+ TCHAR *tempCommand;
+ size_t index;
+
+ /* If the special WRAPPER_COMMAND_FILLER_N environment variable is being used then expand it.
+ * This is mainly used for testing. */
+ pos1 = _tcsstr(command, TEXT("%WRAPPER_COMMAND_FILLER_"));
+ if (pos1 == NULL) {
+ return command;
+ }
+
+ pos2 = _tcsstr(pos1 + 1, TEXT("%"));
+ if (pos2 == NULL) {
+ return command;
+ }
+
+ commandLen = _tcslen(command);
+ commandLenLen = pos2 - pos1 - 24;
+ if (commandLenLen >= 7) {
+ /* Too long. invalid. */
+ return command;
+ }
+
+ memcpy(commandLenBuffer, pos1 + 24, sizeof(TCHAR) * commandLenLen);
+ commandLenBuffer[commandLenLen] = TEXT('\0');
+ commandLen2 = __max(commandLen - commandLenLen - 25, __min(_ttoi(commandLenBuffer), 100000));
+
+ fillerLen = commandLen2 - commandLen + commandLenLen + 25;
+
+ tempCommand = malloc(sizeof(TCHAR) * (commandLen - commandLenLen - 25 + fillerLen + 1));
+ if (!tempCommand) {
+ outOfMemory(TEXT("WBJC"), 3);
+ return command;
+ }
+
+ memcpy(tempCommand, command, (pos1 - command) * sizeof(TCHAR));
+ index = pos1 - command;
+ if (fillerLen > 11) {
+ _sntprintf(&(tempCommand[index]), commandLen2 + 1 - index, TEXT("FILL-%d-"), fillerLen);
+ fillerLen -= _tcslen(&tempCommand[index]);
+ index += _tcslen(&tempCommand[index]);
+ }
+ while (fillerLen > 1) {
+ tempCommand[index] = TEXT('X');
+ index++;
+ fillerLen--;
+ }
+ if (fillerLen > 0) {
+ tempCommand[index] = TEXT('Y');
+ index++;
+ fillerLen--;
+ }
+ memcpy(&(tempCommand[index]), pos2 + 1, sizeof(TCHAR) * _tcslen(pos2 + 1));
+ tempCommand[commandLen2] = TEXT('\0');
+
+ free(command);
+
+ return tempCommand;
+}
+
+/**
* Test function to pause the current thread for the specified amount of time.
* This is used to test how the rest of the Wrapper behaves when a particular
* thread blocks for any reason.
Modified: trunk/wrapper/src/c/wrapper.h
===================================================================
--- trunk/wrapper/src/c/wrapper.h 2014-11-17 09:20:54 UTC (rev 1903)
+++ trunk/wrapper/src/c/wrapper.h 2014-11-18 06:03:01 UTC (rev 1904)
@@ -530,7 +530,25 @@
/******************************************************************************
* Utility Functions
*****************************************************************************/
+
/**
+ * Does any necessary post processing on the command string.
+ * This function assumes that command has been malloced. It will either return
+ * the string as is, or return a modified string. When a modified string is
+ * returned the orignal command buffer will always be freed.
+ *
+ * 1) Replace the first instance of the %WRAPPER_COMMAND_FILLER_N% environment
+ * variable so that the total command length will be equal to or greater than
+ * the length specified by N. The padding will be the length plus a series of
+ * Xs terminated by a single Y. This is mainly for testing.
+ *
+ * @param command The original command.
+ *
+ * @return The modifed command.
+ */
+extern TCHAR *wrapperPostProcessCommandElement(TCHAR *command);
+
+/**
* Test function to pause the current thread for the specified amount of time.
* This is used to test how the rest of the Wrapper behaves when a particular
* thread blocks for any reason.
Modified: trunk/wrapper/src/c/wrapper_unix.c
===================================================================
--- trunk/wrapper/src/c/wrapper_unix.c 2014-11-17 09:20:54 UTC (rev 1903)
+++ trunk/wrapper/src/c/wrapper_unix.c 2014-11-18 06:03:01 UTC (rev 1904)
@@ -1142,6 +1142,8 @@
return TRUE;
}
_tcsncpy(wrapperData->jvmCommand[i], strings[i], _tcslen(strings[i]) + 1);
+
+ wrapperData->jvmCommand[i] = wrapperPostProcessCommandElement(wrapperData->jvmCommand[i]);
} else {
wrapperData->jvmCommand[i] = NULL;
}
Modified: trunk/wrapper/src/c/wrapper_win.c
===================================================================
--- trunk/wrapper/src/c/wrapper_win.c 2014-11-17 09:20:54 UTC (rev 1903)
+++ trunk/wrapper/src/c/wrapper_win.c 2014-11-18 06:03:01 UTC (rev 1904)
@@ -570,14 +570,8 @@
size_t commandLen;
size_t commandLen2;
TCHAR **strings;
- int length, i;
- TCHAR *pos1;
- TCHAR *pos2;
- size_t commandLenLen;
- TCHAR commandLenBuffer[7];
- size_t fillerLen;
- TCHAR *tempCommand;
- size_t index;
+ int length;
+ int i;
/* If this is not the first time through, then dispose the old command */
if (wrapperData->jvmCommand) {
@@ -655,48 +649,8 @@
}
wrapperData->jvmCommand[commandLen++] = TEXT('\0');
- /* If the special WRAPPER_COMMAND_FILLER_N environment variable is being used then expand it.
- * This is mainly used for testing. */
- pos1 = _tcsstr(wrapperData->jvmCommand, TEXT("%WRAPPER_COMMAND_FILLER_"));
- if (pos1 != NULL) {
- pos2 = _tcsstr(pos1 + 1, TEXT("%"));
- if (pos2 != NULL) {
- /* commandLen includes the '\0'. Strip if off for our purposes. */
- commandLen--;
- commandLenLen = pos2 - pos1 - 24;
- if (commandLenLen < 7) {
- memcpy(commandLenBuffer, pos1 + 24, sizeof(TCHAR) * commandLenLen);
- commandLenBuffer[commandLenLen] = TEXT('\0');
- commandLen2 = __max(commandLen - commandLenLen - 25, __min(_ttoi(commandLenBuffer), 100000));
-
- fillerLen = commandLen2 - commandLen + commandLenLen + 25;
-
- tempCommand = malloc(sizeof(TCHAR) * (commandLen - commandLenLen - 25 + fillerLen + 1));
- if (!tempCommand) {
- outOfMemory(TEXT("WBJC"), 3);
- return TRUE;
- }
- memcpy(tempCommand, wrapperData->jvmCommand, (pos1 - wrapperData->jvmCommand) * sizeof(TCHAR));
- index = pos1 - wrapperData->jvmCommand;
- if (fillerLen > 11) {
- _sntprintf(&(tempCommand[index]), commandLen2 + 1 - index, TEXT("FILL-%d-"), fillerLen);
- fillerLen -= _tcslen(&tempCommand[index]);
- index += _tcslen(&tempCommand[index]);
- }
- while (fillerLen > 0) {
- tempCommand[index] = TEXT('X');
- index++;
- fillerLen--;
- }
- memcpy(&(tempCommand[index]), pos2 + 1, sizeof(TCHAR) * _tcslen(pos2 + 1));
- tempCommand[commandLen2] = TEXT('\0');
-
- free(wrapperData->jvmCommand);
- wrapperData->jvmCommand = tempCommand;
- }
- }
- }
-
+ wrapperData->jvmCommand = wrapperPostProcessCommandElement(wrapperData->jvmCommand);
+
/* Free up the temporary command array */
wrapperFreeJavaCommandArray(strings, length);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-17 09:21:06
|
Revision: 1903
http://sourceforge.net/p/wrapper/code/1903
Author: mortenson
Date: 2014-11-17 09:20:54 +0000 (Mon, 17 Nov 2014)
Log Message:
-----------
Fix a display problem with long log lines on Windows 7.
Modified Paths:
--------------
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/c/logger.c
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-11-17 04:57:54 UTC (rev 1902)
+++ trunk/wrapper/doc/revisions.txt 2014-11-17 09:20:54 UTC (rev 1903)
@@ -83,6 +83,12 @@
* Added getStdOut(), getStdErr(), and getStdIn() methods to the WrapperProcess
class as aliases to the getInputStream(), getErrorStream(), and
getOutputStream() methods to help avoid confusion.
+* Fix a problem on Windows 7 where long log lines got corrupted after 31397
+ characters when wrapper.console.direct was true. This seems to be a problem
+ with the underlying Windows API and was only a display issue. Reduced the
+ maximum number of characters that can be written with a single API call to
+ 30000 to work around the issue. This change is internal and there is still
+ no limit on the length of logged lines.
3.5.25
* (Professional) Improve the wrapper.timer.<n>.interval property so it is now
Modified: trunk/wrapper/src/c/logger.c
===================================================================
--- trunk/wrapper/src/c/logger.c 2014-11-17 04:57:54 UTC (rev 1902)
+++ trunk/wrapper/src/c/logger.c 2014-11-17 09:20:54 UTC (rev 1903)
@@ -2659,11 +2659,9 @@
#ifdef WIN32
#define CONSOLE_BLOCK_SIZE 1024
-/* The following is an initial (max) size in characters to try and write at once to the console.
- * The buffer is less than 64KB, so 32K chars is a good max. The actual buffer size will be
- * smaller than this so this massages the size reduction code whenever strings around this size
- * are encountered. */
-size_t vWriteToConsoleMaxHeapBufferSize = 32000;
+/* The following is an initial (max) size for the number of characters to try writing to WriteConsole at once.
+ * See notes on the WriteConsole function below for details. */
+size_t vWriteToConsoleMaxHeapBufferSize = 30000;
size_t vWriteToConsoleBufferSize = 0;
TCHAR *vWriteToConsoleBuffer = NULL;
/**
@@ -2762,7 +2760,9 @@
/* The WriteConsole API is a nasty little beast.
* It can accept a buffer that is up to 64KB in size, but they can't tell us exactly how much before hand.
* The size on tests on a 64-bit XP system appear to be around 25000 characters.
+ * Windows 7 returns success, but starts writing garbled characters after around 31397 characters. (Not sure if this number is system specific however.)
* The problem is that this is highly dependent on the current system state.
+ * We used to start with 32000, but now use 30000 to avoid problems on Windows 7. (Not sure if this is small enough to avoid the issue on all systems.)
* Start with a large size for efficiency, but then reduce it automatically in a sticky way in 5% increments to get to a size that works. */
fullLen = _tcslen(vWriteToConsoleBuffer);
remainLen = fullLen;
@@ -2773,6 +2773,9 @@
_tprintf(TEXT("writeToConsole write %d of %d characters\n"), thisLen, fullLen);
#endif
if (WriteConsole(hdl, &(vWriteToConsoleBuffer[offset]), (DWORD)thisLen, &wrote, NULL)) {
+ #ifdef DEBUG_CONSOLE_OUTPUT
+ _tprintf(TEXT("\nwriteToConsole (WriteConsole wrote %d of requested %d characters)\n"), wrote, thisLen);
+ #endif
/* Success. */
offset += thisLen;
remainLen -= thisLen;
@@ -2784,6 +2787,9 @@
#endif
} else {
/* Failed. */
+ #ifdef DEBUG_CONSOLE_OUTPUT
+ _tprintf(TEXT("\nwriteToConsole (Fail WriteConsole wrote %d of requested %d characters)\n"), wrote, thisLen);
+ #endif
switch (getLastError()) {
case ERROR_NOT_ENOUGH_MEMORY:
/* This means that the max heap buffer size is too large and needs to be reduced. */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-17 04:57:58
|
Revision: 1902
http://sourceforge.net/p/wrapper/code/1902
Author: mortenson
Date: 2014-11-17 04:57:54 +0000 (Mon, 17 Nov 2014)
Log Message:
-----------
Remove unwanted debug output.
Modified Paths:
--------------
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/RuntimeExec.java
Modified: trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/RuntimeExec.java
===================================================================
--- trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/RuntimeExec.java 2014-11-17 04:50:56 UTC (rev 1901)
+++ trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/RuntimeExec.java 2014-11-17 04:57:54 UTC (rev 1902)
@@ -364,7 +364,6 @@
// Make the last character a y so we can verify that it is included correctly.
sb.append( "y" );
String command = sb.toString();
- System.out.println( "Length=" + command.length() );
handleWrapperProcess( testId, command );
if ( expectFailure )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <mor...@us...> - 2014-11-17 04:51:09
|
Revision: 1901
http://sourceforge.net/p/wrapper/code/1901
Author: mortenson
Date: 2014-11-17 04:50:56 +0000 (Mon, 17 Nov 2014)
Log Message:
-----------
Add more checks about max command line and environment variable lengths on Windows.
Modified Paths:
--------------
trunk/wrapper/build-tests.xml
trunk/wrapper/doc/revisions.txt
trunk/wrapper/src/c/property.c
trunk/wrapper/src/c/wrapper_win.c
trunk/wrapper/src/c/wrapperjni.c
trunk/wrapper/src/c/wrapperjni_win.c
trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/RuntimeExec.java
Modified: trunk/wrapper/build-tests.xml
===================================================================
--- trunk/wrapper/build-tests.xml 2014-11-17 01:10:36 UTC (rev 1900)
+++ trunk/wrapper/build-tests.xml 2014-11-17 04:50:56 UTC (rev 1901)
@@ -504,36 +504,46 @@
token="wrapper.app.parameter.1=<YourMainClass>"
value="wrapper.app.parameter.1=org.tanukisoftware.wrapper.test.Memory" />
- <!-- Huge Classpath Test -->
- <delete file="${test.dir}/hugeclasspath.conf"/>
- <filter token="app.name" value="hugeclasspath"/>
- <filter token="app.long.name" value="Huge Classpath Case" />
+ <!-- Huge Classpath Max Size Test -->
+ <delete file="${test.dir}/hugeclasspathmaxsize.conf"/>
+ <filter token="app.name" value="hugeclasspathmaxsize"/>
+ <filter token="app.long.name" value="Huge Classpath Max Size Case" />
<copy file="${test.dir}/template.conf"
- tofile="${test.dir}/hugeclasspath.conf"
+ tofile="${test.dir}/hugeclasspathmaxsize.conf"
filtering="on"/>
- <replace file="${test.dir}/hugeclasspath.conf"
+ <replace file="${test.dir}/hugeclasspathmaxsize.conf"
+ token="#wrapper.java.command.loglevel=INFO"
+ value="wrapper.java.command.loglevel=INFO" />
+ <replace file="${test.dir}/hugeclasspathmaxsize.conf"
token="wrapper.app.parameter.1=<YourMainClass>"
value="wrapper.app.parameter.1=org.tanukisoftware.wrapper.test.QuickComplete" />
- <echo file="${test.dir}/hugeclasspath-path.conf" append="false" message="#encoding=UTF-8${line.separator}"/>
- <script language="javascript">
- importClass(java.io.File)
- echo = project.createTask("echo");
- echo.setFile(new File(project.getProperty("test.dir"), "hugeclasspath-path.conf"));
- echo.setAppend(true);
- for (var i = 1000; i < 2343; i++) {
- echo.setMessage("wrapper.java.classpath." + i + "=../lib/no-file-" + i + ".jar\n");
- echo.perform();
- }
- </script>
- <replace file="${test.dir}/hugeclasspath.conf">
+ <replace file="${test.dir}/hugeclasspathmaxsize.conf">
<replacetoken>wrapper.java.classpath.2=../lib/wrapper.jar</replacetoken>
<replacevalue><![CDATA[wrapper.java.classpath.2=../lib/wrapper.jar
-#include ../test/hugeclasspath-path.conf
-wrapper.java.classpath.use_environment=TRUE
-wrapper.java.classpath.missing.loglevel=NONE
-wrapper.debug=true]]></replacevalue>
+wrapper.java.classpath.3=../lib/%WRAPPER_COMMAND_FILLER_32766%.jar
+wrapper.java.classpath.missing.loglevel=NONE]]></replacevalue>
</replace>
+ <!-- Huge Classpath Over Size Test -->
+ <delete file="${test.dir}/hugeclasspathoversize.conf"/>
+ <filter token="app.name" value="hugeclasspathoversize"/>
+ <filter token="app.long.name" value="Huge Classpath Over Size Case" />
+ <copy file="${test.dir}/template.conf"
+ tofile="${test.dir}/hugeclasspathoversize.conf"
+ filtering="on"/>
+ <replace file="${test.dir}/hugeclasspathoversize.conf"
+ token="#wrapper.java.command.loglevel=INFO"
+ value="wrapper.java.command.loglevel=INFO" />
+ <replace file="${test.dir}/hugeclasspathoversize.conf"
+ token="wrapper.app.parameter.1=<YourMainClass>"
+ value="wrapper.app.parameter.1=org.tanukisoftware.wrapper.test.QuickComplete" />
+ <replace file="${test.dir}/hugeclasspathoversize.conf">
+ <replacetoken>wrapper.java.classpath.2=../lib/wrapper.jar</replacetoken>
+ <replacevalue><![CDATA[wrapper.java.classpath.2=../lib/wrapper.jar
+wrapper.java.classpath.3=../lib/%WRAPPER_COMMAND_FILLER_32767%.jar
+wrapper.java.classpath.missing.loglevel=NONE]]></replacevalue>
+ </replace>
+
<!-- Huge Classpath Env Max Size Test -->
<delete file="${test.dir}/hugeclasspathenvmaxsize.conf"/>
<filter token="app.name" value="hugeclasspathenvmaxsize"/>
@@ -542,6 +552,9 @@
tofile="${test.dir}/hugeclasspathenvmaxsize.conf"
filtering="on"/>
<replace file="${test.dir}/hugeclasspathenvmaxsize.conf"
+ token="#wrapper.java.command.loglevel=INFO"
+ value="wrapper.java.command.loglevel=INFO" />
+ <replace file="${test.dir}/hugeclasspathenvmaxsize.conf"
token="wrapper.app.parameter.1=<YourMainClass>"
value="wrapper.app.parameter.1=org.tanukisoftware.wrapper.test.QuickComplete" />
<echo file="${test.dir}/hugeclasspathenvmaxsize-path.conf" append="false" message="#encoding=UTF-8${line.separator}"/>
@@ -562,8 +575,7 @@
<replacevalue><![CDATA[wrapper.java.classpath.2=../lib/wrapper.jar
#include ../test/hugeclasspathenvmaxsize-path.conf
wrapper.java.classpath.use_environment=TRUE
-wrapper.java.classpath.missing.loglevel=NONE
-wrapper.debug=true]]></replacevalue>
+wrapper.java.classpath.missing.loglevel=NONE]]></replacevalue>
</replace>
<!-- Huge Classpath Env Over Size Test -->
@@ -574,6 +586,9 @@
tofile="${test.dir}/hugeclasspathenvoversize.conf"
filtering="on"/>
<replace file="${test.dir}/hugeclasspathenvoversize.conf"
+ token="#wrapper.java.command.loglevel=INFO"
+ value="wrapper.java.command.loglevel=INFO" />
+ <replace file="${test.dir}/hugeclasspathenvoversize.conf"
token="wrapper.app.parameter.1=<YourMainClass>"
value="wrapper.app.parameter.1=org.tanukisoftware.wrapper.test.QuickComplete" />
<echo file="${test.dir}/hugeclasspathenvoversize-path.conf" append="false" message="#encoding=UTF-8${line.separator}"/>
@@ -594,8 +609,7 @@
<replacevalue><![CDATA[wrapper.java.classpath.2=../lib/wrapper.jar
#include ../test/hugeclasspathenvoversize-path.conf
wrapper.java.classpath.use_environment=TRUE
-wrapper.java.classpath.missing.loglevel=NONE
-wrapper.debug=true]]></replacevalue>
+wrapper.java.classpath.missing.loglevel=NONE]]></replacevalue>
</replace>
<!-- Filter Test -->
@@ -1488,18 +1502,30 @@
token='set _WRAPPER_CONF_DEFAULT="../conf/%_WRAPPER_BASE%.conf"'
value='set _WRAPPER_CONF_DEFAULT=../test/memory.conf' />
- <!-- Huge Classpath Test -->
- <delete file="${test.dir}/TestHugeClasspath.bat"/>
+ <!-- Huge Classpath Max Size Test -->
+ <delete file="${test.dir}/TestHugeClasspathMaxSize.bat"/>
<copy file="${src.dir}/bin/App.bat.in"
- tofile="${test.dir}/TestHugeClasspath.bat"
+ tofile="${test.dir}/TestHugeClasspathMaxSize.bat"
filtering="on"/>
- <replace file="${test.dir}/TestHugeClasspath.bat"
+ <replace file="${test.dir}/TestHugeClasspathMaxSize.bat"
token='set _WRAPPER_BASE=wrapper'
value='set _WRAPPER_BASE=..\bin\wrapper' />
- <replace file="${test.dir}/TestHugeClasspath.bat"
+ <replace file="${test.dir}/TestHugeClasspathMaxSize.bat"
token='set _WRAPPER_CONF_DEFAULT="../conf/%_WRAPPER_BASE%.conf"'
- value='set _WRAPPER_CONF_DEFAULT=../test/hugeclasspath.conf' />
+ value='set _WRAPPER_CONF_DEFAULT=../test/hugeclasspathmaxsize.conf' />
+ <!-- Huge Classpath Over Size Test -->
+ <delete file="${test.dir}/TestHugeClasspathOverSize.bat"/>
+ <copy file="${src.dir}/bin/App.bat.in"
+ tofile="${test.dir}/TestHugeClasspathOverSize.bat"
+ filtering="on"/>
+ <replace file="${test.dir}/TestHugeClasspathOverSize.bat"
+ token='set _WRAPPER_BASE=wrapper'
+ value='set _WRAPPER_BASE=..\bin\wrapper' />
+ <replace file="${test.dir}/TestHugeClasspathOverSize.bat"
+ token='set _WRAPPER_CONF_DEFAULT="../conf/%_WRAPPER_BASE%.conf"'
+ value='set _WRAPPER_CONF_DEFAULT=../test/hugeclasspathoversize.conf' />
+
<!-- Huge Classpath Env Max Size Test -->
<delete file="${test.dir}/TestHugeClasspathEnvMaxSize.bat"/>
<copy file="${src.dir}/bin/App.bat.in"
@@ -2117,14 +2143,22 @@
filtering="on"/>
<chmod file="${test.dir}/memory" perm="+x"/>
- <!-- Huge Classpath Test -->
+ <!-- Huge Classpath Max Size Test -->
<filter token="app.name" value="hugeclasspath"/>
- <filter token="app.long.name" value="Huge Classpath Case" />
+ <filter token="app.long.name" value="Huge Classpath Max Size Case" />
<copy file="${test.dir}/temp.script.in"
- tofile="${test.dir}/hugeclasspath"
+ tofile="${test.dir}/hugeclasspathmaxsize"
filtering="on"/>
- <chmod file="${test.dir}/hugeclasspath" perm="+x"/>
+ <chmod file="${test.dir}/hugeclasspathmaxsize" perm="+x"/>
+ <!-- Huge Classpath Over Size Test -->
+ <filter token="app.name" value="hugeclasspath"/>
+ <filter token="app.long.name" value="Huge Classpath Over Size Case" />
+ <copy file="${test.dir}/temp.script.in"
+ tofile="${test.dir}/hugeclasspathoversize"
+ filtering="on"/>
+ <chmod file="${test.dir}/hugeclasspathoversize" perm="+x"/>
+
<!-- Huge Classpath Env Max Size Test -->
<filter token="app.name" value="hugeclasspathenvmaxsize"/>
<filter token="app.long.name" value="Huge Classpath Env Max Size Case" />
Modified: trunk/wrapper/doc/revisions.txt
===================================================================
--- trunk/wrapper/doc/revisions.txt 2014-11-17 01:10:36 UTC (rev 1900)
+++ trunk/wrapper/doc/revisions.txt 2014-11-17 04:50:56 UTC (rev 1901)
@@ -70,10 +70,16 @@
The Wrapper now checks for this and logs an error rather than setting the
variable. This was a problem if very large classpaths were used when the
wrapper.java.classpath.use_environment property was TRUE.
-* Windows does not allow a command line to be longer than 32767 characters in
+* Windows does not allow a command line to be longer than 32766 characters in
length. Different versions of Windows handle it differently when such a
long command is provided. The Wrapper now does its own check and shows an
error in a consistent way.
+* (Professional) Add checks to the WrapperManager.exec() methods on Windows
+ for the maximum command line length of 32766, and maximum environment
+ variable name-value pair length of 32767.
+* (Professional) Fix a problem where a free of a NULL pointer was being done
+ as part of the cleanup process of a WrapperManager.exec() call. This is not
+ known to have caused any issues.
* Added getStdOut(), getStdErr(), and getStdIn() methods to the WrapperProcess
class as aliases to the getInputStream(), getErrorStream(), and
getOutputStream() methods to help avoid confusion.
Modified: trunk/wrapper/src/c/property.c
===================================================================
--- trunk/wrapper/src/c/property.c 2014-11-17 01:10:36 UTC (rev 1900)
+++ trunk/wrapper/src/c/property.c 2014-11-17 04:50:56 UTC (rev 1901)
@@ -738,7 +738,7 @@
#else
len = _tcslen(name) + 1 + _tcslen(value) + 1;
if (len > MAX_ENV_PAIR_LEN) {
- log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_FATAL, TEXT("Unable to set the '%s' environment variable because total pair length of %d is longer than maximim %d."), name, len, MAX_ENV_PAIR_LEN);
+ log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_FATAL, TEXT("Unable to set the '%s' environment variable because total pair length of %d is longer than maximum for the OS of %d."), name, len, MAX_ENV_PAIR_LEN);
result = TRUE;
} else {
envBuf = malloc(sizeof(TCHAR) * len);
Modified: trunk/wrapper/src/c/wrapper_win.c
===================================================================
--- trunk/wrapper/src/c/wrapper_win.c 2014-11-17 01:10:36 UTC (rev 1900)
+++ trunk/wrapper/src/c/wrapper_win.c 2014-11-17 04:50:56 UTC (rev 1901)
@@ -64,7 +64,7 @@
#include "wrapper_file.h"
/* The largest possible command line length on Windows. */
-#define MAX_COMMAND_LINE_LEN 32767
+#define MAX_COMMAND_LINE_LEN 32766
#define ENCODING (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING)
@@ -571,6 +571,13 @@
size_t commandLen2;
TCHAR **strings;
int length, i;
+ TCHAR *pos1;
+ TCHAR *pos2;
+ size_t commandLenLen;
+ TCHAR commandLenBuffer[7];
+ size_t fillerLen;
+ TCHAR *tempCommand;
+ size_t index;
/* If this is not the first time through, then dispose the old command */
if (wrapperData->jvmCommand) {
@@ -647,6 +654,48 @@
commandLen += _tcslen(strings[i]);
}
wrapperData->jvmCommand[commandLen++] = TEXT('\0');
+
+ /* If the special WRAPPER_COMMAND_FILLER_N environment variable is being used then expand it.
+ * This is mainly used for testing. */
+ pos1 = _tcsstr(wrapperData->jvmCommand, TEXT("%WRAPPER_COMMAND_FILLER_"));
+ if (pos1 != NULL) {
+ pos2 = _tcsstr(pos1 + 1, TEXT("%"));
+ if (pos2 != NULL) {
+ /* commandLen includes the '\0'. Strip if off for our purposes. */
+ commandLen--;
+ commandLenLen = pos2 - pos1 - 24;
+ if (commandLenLen < 7) {
+ memcpy(commandLenBuffer, pos1 + 24, sizeof(TCHAR) * commandLenLen);
+ commandLenBuffer[commandLenLen] = TEXT('\0');
+ commandLen2 = __max(commandLen - commandLenLen - 25, __min(_ttoi(commandLenBuffer), 100000));
+
+ fillerLen = commandLen2 - commandLen + commandLenLen + 25;
+
+ tempCommand = malloc(sizeof(TCHAR) * (commandLen - commandLenLen - 25 + fillerLen + 1));
+ if (!tempCommand) {
+ outOfMemory(TEXT("WBJC"), 3);
+ return TRUE;
+ }
+ memcpy(tempCommand, wrapperData->jvmCommand, (pos1 - wrapperData->jvmCommand) * sizeof(TCHAR));
+ index = pos1 - wrapperData->jvmCommand;
+ if (fillerLen > 11) {
+ _sntprintf(&(tempCommand[index]), commandLen2 + 1 - index, TEXT("FILL-%d-"), fillerLen);
+ fillerLen -= _tcslen(&tempCommand[index]);
+ index += _tcslen(&tempCommand[index]);
+ }
+ while (fillerLen > 0) {
+ tempCommand[index] = TEXT('X');
+ index++;
+ fillerLen--;
+ }
+ memcpy(&(tempCommand[index]), pos2 + 1, sizeof(TCHAR) * _tcslen(pos2 + 1));
+ tempCommand[commandLen2] = TEXT('\0');
+
+ free(wrapperData->jvmCommand);
+ wrapperData->jvmCommand = tempCommand;
+ }
+ }
+ }
/* Free up the temporary command array */
wrapperFreeJavaCommandArray(strings, length);
@@ -1628,7 +1677,6 @@
/*int processflags=CREATE_NEW_PROCESS_GROUP | CREATE_NEW_CONSOLE; */
size_t len;
- TCHAR *commandline=NULL;
TCHAR *environment=NULL;
TCHAR *binparam=NULL;
int char_block_size = 8196;
@@ -1660,6 +1708,7 @@
/* Make sure the classpath is not too long. */
len = _tcslen(wrapperData->jvmCommand);
+ log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_STATUS, TEXT("Java command line length=%d"), len);
if (len > MAX_COMMAND_LINE_LEN) {
log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_FATAL, TEXT("The generated Java command line has a length of %d, which is longer than the Windows maximum of %d characters."), len, MAX_COMMAND_LINE_LEN);
if (!wrapperData->environmentClasspath) {
@@ -1680,10 +1729,9 @@
}
/* Log ghe application java command line */
- commandline = wrapperData->jvmCommand;
if (wrapperData->commandLogLevel != LEVEL_NONE) {
log_printf(WRAPPER_SOURCE_WRAPPER, wrapperData->commandLogLevel, TEXT("Java Command Line:"));
- log_printf(WRAPPER_SOURCE_WRAPPER, wrapperData->commandLogLevel, TEXT(" Command: %s"), commandline);
+ log_printf(WRAPPER_SOURCE_WRAPPER, wrapperData->commandLogLevel, TEXT(" Command: %s"), wrapperData->jvmCommand);
if (wrapperData->environmentClasspath) {
log_printf(WRAPPER_SOURCE_WRAPPER, wrapperData->commandLogLevel,
@@ -1830,7 +1878,7 @@
/* Create the new process */
ret=CreateProcess(NULL,
- commandline, /* the command line to start */
+ wrapperData->jvmCommand, /* the command line to start */
NULL, /* process security attributes */
NULL, /* primary thread security attributes */
TRUE, /* handles are inherited */
@@ -1853,7 +1901,7 @@
if (err!=NO_ERROR) {
log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_FATAL,
TEXT("Unable to execute Java command. %s"), getLastErrorText());
- log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_FATAL, TEXT(" %s"), commandline);
+ log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_FATAL, TEXT(" %s"), wrapperData->jvmCommand);
wrapperData->javaProcess = NULL;
if ((err == ERROR_FILE_NOT_FOUND) || (err == ERROR_PATH_NOT_FOUND)) {
@@ -1899,7 +1947,7 @@
/* Now check if we have a process handle again for the Swedish WinNT bug */
if (process_info.hProcess == NULL) {
- log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_FATAL, TEXT("can not execute \"%s\""), commandline);
+ log_printf(WRAPPER_SOURCE_WRAPPER, LEVEL_FATAL, TEXT("can not execute \"%s\""), wrapperData->jvmCommand);
wrapperData->javaProcess = NULL;
return TRUE;
}
Modified: trunk/wrapper/src/c/wrapperjni.c
===================================================================
--- trunk/wrapper/src/c/wrapperjni.c 2014-11-17 01:10:36 UTC (rev 1900)
+++ trunk/wrapper/src/c/wrapperjni.c 2014-11-17 04:50:56 UTC (rev 1901)
@@ -43,6 +43,9 @@
#include "wrapperjni.h"
#include "wrapperinfo.h"
+/* The largest possible "name+'='+value" property pair length on Windows. */
+#define MAX_ENV_PAIR_LEN 32767
+
int wrapperJNIDebugging = JNI_FALSE;
#define CONTROL_EVENT_QUEUE_SIZE 10
Modified: trunk/wrapper/src/c/wrapperjni_win.c
===================================================================
--- trunk/wrapper/src/c/wrapperjni_win.c 2014-11-17 01:10:36 UTC (rev 1900)
+++ trunk/wrapper/src/c/wrapperjni_win.c 2014-11-17 04:50:56 UTC (rev 1901)
@@ -45,6 +45,9 @@
#include "loggerjni.h"
#include "wrapperjni.h"
+/* The largest possible command line length on Windows. */
+#define MAX_COMMAND_LINE_LEN 32766
+
/* MS Visual Studio 8 went and deprecated the POXIX names for functions.
* Fixing them all would be a big headache for UNIX versions. */
#pragma warning(disable : 4996)
Modified: trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/RuntimeExec.java
===================================================================
--- trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/RuntimeExec.java 2014-11-17 01:10:36 UTC (rev 1900)
+++ trunk/wrapper/src/java/org/tanukisoftware/wrapper/test/RuntimeExec.java 2014-11-17 04:50:56 UTC (rev 1901)
@@ -345,6 +345,51 @@
}
}
+ private static void caseLongCommand( final String simplewaiter, int len, boolean expectFailure )
+ {
+
+ String testId = "Long Command " + len + ": ";
+ beginCase( testId );
+ try
+ {
+ try
+ {
+ StringBuffer sb = new StringBuffer();
+ sb.append( simplewaiter );
+ sb.append( " -v " );
+ while ( sb.length() < len - 1 )
+ {
+ sb.append( "x" );
+ }
+ // Make the last character a y so we can verify that it is included correctly.
+ sb.append( "y" );
+ String command = sb.toString();
+ System.out.println( "Length=" + command.length() );
+
+ handleWrapperProcess( testId, command );
+ if ( expectFailure )
+ {
+ System.out.println( Main.getRes().getString( "{0}Did not fail as expected.", testId ) );
+ }
+ }
+ catch ( Exception e )
+ {
+ if ( expectFailure )
+ {
+ System.out.println( Main.getRes().getString( "{0}Failed as expected: {1}", testId, e.toString() ) );
+ }
+ else
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+ finally
+ {
+ endCase( testId );
+ }
+ }
+
private static void caseWaitFor( final String simplewaiter )
{
String testId = "WaitFor : ";
@@ -380,12 +425,10 @@
}
catch ( InterruptedException e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
catch ( Exception e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -415,7 +458,6 @@
}
catch ( Exception e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -446,7 +488,6 @@
}
catch ( Exception e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -471,12 +512,11 @@
environment.put( "TEST", "TEST123" );
System.out.println( Main.getRes().getString( "{0}size of Environment map = {1}", testId, new Integer( environment.size() ) ) );
- String command = simplewaiter + " 10 3";
+ String command = simplewaiter + " -e TEST";
handleWrapperProcess( testId, command, config, 0, true, false, false, WAIT_MODE_MANUAL );
}
catch ( Exception e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -486,6 +526,54 @@
}
}
+ private static void caseEnvLarge( final String simplewaiter, int len, boolean expectFailure )
+ {
+ String testId = "Environment Large " + len + ": ";
+ beginCase( testId );
+ try
+ {
+ try
+ {
+ int valueLen = len - 4 - 1; // "TEST="
+ StringBuffer sb = new StringBuffer();
+ for ( int i = 0; i < valueLen - 1; i++ )
+ {
+ sb.append( "X" );
+ }
+ sb.append( "Y" ); // Make it so we can see the last value.
+ String value = sb.toString();
+
+ WrapperProcessConfig config = new WrapperProcessConfig();
+ java.util.Map environment = config.getEnvironment();
+ environment.clear();
+ environment.put( "TEST", value );
+ System.out.println( Main.getRes().getString( "{0}size of Environment map = {1}", testId, new Integer( environment.size() ) ) );
+
+ String command = simplewaiter + " -e TEST";
+ handleWrapperProcess( testId, command, config, 0, true, false, false, WAIT_MODE_MANUAL );
+ if ( expectFailure )
+ {
+ System.out.println( Main.getRes().getString( "{0}Did not fail as expected.", testId ) );
+ }
+ }
+ catch ( Exception e )
+ {
+ if ( expectFailure )
+ {
+ System.out.println( Main.getRes().getString( "{0}Failed as expected: {1}", testId, e.toString() ) );
+ }
+ else
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+ finally
+ {
+ endCase( testId );
+ }
+ }
+
private static void caseWorkingDir( final String simplewaiter )
{
String testId = "Change Working Dir : ";
@@ -514,7 +602,6 @@
}
catch ( Exception e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -557,7 +644,6 @@
}
catch ( Exception e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -595,7 +681,6 @@
}
catch ( Exception e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -641,7 +726,6 @@
}
catch ( Exception e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -665,7 +749,6 @@
catch ( Exception e )
{
- // TODO Auto-generated catch block
e.printStackTrace();
}
}
@@ -732,6 +815,9 @@
caseSimpleTestJavaAry( simplewaiter );
caseSimpleTestWrapperAry( simplewaiter );
+ caseLongCommand( simplewaiter, 32766, false );
+ caseLongCommand( simplewaiter, 32767, true );
+
caseWaitFor( simplewaiter );
caseSmallChildProcess( simplewaiter );
@@ -740,6 +826,8 @@
casePosixSpawn( simplewaiter );
caseEnvSmall( simplewaiter );
+ caseEnvLarge( simplewaiter, 32767, false );
+ caseEnvLarge( simplewaiter, 32768, true );
caseWorkingDir( simplewaiter );
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|