aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoropenvcdiff <openvcdiff@132ac840-3546-0410-a738-d3f8764196be>2009-04-09 19:20:49 +0000
committeropenvcdiff <openvcdiff@132ac840-3546-0410-a738-d3f8764196be>2009-04-09 19:20:49 +0000
commitbaf44ead8ad43d5c600b7f89420905a7397489fb (patch)
tree856804c89f046f134d08c3fe872514f308138837
parentd18457863096b3685e56f5a8919959f6afbdb121 (diff)
downloadopen-vcdiff-baf44ead8ad43d5c600b7f89420905a7397489fb.tar.gz
Thu, 09 Apr 2009 09:16:58 -0700 Google Inc. <opensource@google.com>
Release version 0.6 with the following changes: * Issue #9: Add option to optimize VCDIFF decoder when VCD_TARGET will not be used as source segment. Add new interface SetAllowVcdTarget to control whether the VCD_TARGET flag may be used. If this option is set to false and the decoder finds a VCD_TARGET flag, it will issue an error and refuse to continue decoding. * Issue #19: ERROR: Length of target window (100001916) exceeds limit of 67108864 bytes Remove the limit of INT32_MAX on the value of --max_target_file_size, since the new SetAllowVcdTarget feature means that the entire target file will not need to be kept in memory. Separate vcdecoder_test into five test targets, one of which is devoted to the new SetAllowVcdTarget feature. Get rid of kMaxBufferSize and kDefaultBufferSize, which were used ambiguously. A new constant kDefaultMaxTargetSize provides the default values for the --max_target_file_size and --max_target_window_size options. The --buffersize option, if specified, should control the buffer size used, without limits on its value. * Issue #21: Fail to test on MinGW 5.1.4 The wrapper executables produced by libtool failed on MinGW with the error "File /bin/sh not found". Add the option AC_DISABLE_FAST_INSTALL to avoid creating wrapper executables. The option implies an extra link step during "make install", but the package is small enough that this does not take long. * Remove the annotated-output feature from the decoder. * Automatically detect and work around a Solaris 10 bug which causes the error "libstdc++.la is not a valid libtool archive". http://whocares.de/2006/05/solaris-10-fixup-for-libstdcla-is-not-a-valid-libtool-archive/ * Update with latest changes to gflags package. * Fix type-conversion warning in vcdiff_main.cc in 32-bit Visual Studio build. git-svn-id: http://open-vcdiff.googlecode.com/svn/trunk@25 132ac840-3546-0410-a738-d3f8764196be
-rw-r--r--ChangeLog32
-rw-r--r--Makefile.am35
-rw-r--r--Makefile.in156
-rw-r--r--aclocal.m41
-rwxr-xr-xconfigure188
-rw-r--r--configure.ac8
-rw-r--r--packages/deb/changelog73
-rw-r--r--src/config.h.in3
-rw-r--r--src/google/vcdecoder.h45
-rw-r--r--src/headerparser.cc7
-rw-r--r--src/headerparser.h4
-rw-r--r--src/mutex.h5
-rw-r--r--src/vcdecoder.cc209
-rw-r--r--src/vcdecoder1_test.cc12
-rw-r--r--src/vcdecoder2_test.cc22
-rw-r--r--src/vcdecoder3_test.cc24
-rw-r--r--src/vcdecoder4_test.cc115
-rw-r--r--src/vcdecoder5_test.cc113
-rw-r--r--src/vcdecoder_test.cc12
-rw-r--r--src/vcdecoder_test.h2
-rw-r--r--src/vcdiff_main.cc28
-rwxr-xr-xsrc/vcdiff_test.sh56
-rw-r--r--src/vcencoder_test.cc12
-rw-r--r--vsprojects/config.h6
-rw-r--r--vsprojects/open-vcdiff.sln121
-rw-r--r--vsprojects/vcdecoder1_test/vcdecoder1_test.vcproj (renamed from vsprojects/vcdecoder_test/vcdecoder_test.vcproj)26
-rw-r--r--vsprojects/vcdecoder2_test/vcdecoder2_test.vcproj211
-rw-r--r--vsprojects/vcdecoder3_test/vcdecoder3_test.vcproj211
-rw-r--r--vsprojects/vcdecoder4_test/vcdecoder4_test.vcproj211
-rw-r--r--vsprojects/vcdecoder5_test/vcdecoder5_test.vcproj211
-rw-r--r--vsprojects/vcdecoder_test_common/vcdecoder_test_common.vcproj175
31 files changed, 1815 insertions, 519 deletions
diff --git a/ChangeLog b/ChangeLog
index 9f74138..97e96a8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,35 @@
+Thu, 09 Apr 2009 09:16:58 -0700 Google Inc. <opensource@google.com>
+
+ Release version 0.6 with the following changes:
+ * Issue #9: Add option to optimize VCDIFF decoder when VCD_TARGET will not be
+ used as source segment.
+ Add new interface SetAllowVcdTarget to control whether the VCD_TARGET flag
+ may be used. If this option is set to false and the decoder finds a
+ VCD_TARGET flag, it will issue an error and refuse to continue decoding.
+ * Issue #19: ERROR: Length of target window (100001916) exceeds limit of
+ 67108864 bytes
+ Remove the limit of INT32_MAX on the value of --max_target_file_size, since
+ the new SetAllowVcdTarget feature means that the entire target file will not
+ need to be kept in memory. Separate vcdecoder_test into five test targets,
+ one of which is devoted to the new SetAllowVcdTarget feature. Get rid of
+ kMaxBufferSize and kDefaultBufferSize, which were used ambiguously. A new
+ constant kDefaultMaxTargetSize provides the default values for the
+ --max_target_file_size and --max_target_window_size options. The
+ --buffersize option, if specified, should control the buffer size used,
+ without limits on its value.
+ * Issue #21: Fail to test on MinGW 5.1.4
+ The wrapper executables produced by libtool failed on MinGW with the error
+ "File /bin/sh not found". Add the option AC_DISABLE_FAST_INSTALL to avoid
+ creating wrapper executables. The option implies an extra link step during
+ "make install", but the package is small enough that this does not take
+ long.
+ * Remove the annotated-output feature from the decoder.
+ * Automatically detect and work around a Solaris 10 bug which causes the error
+ "libstdc++.la is not a valid libtool archive".
+ http://whocares.de/2006/05/solaris-10-fixup-for-libstdcla-is-not-a-valid-libtool-archive/
+ * Update with latest changes to gflags package.
+ * Fix type-conversion warning in vcdiff_main.cc in 32-bit Visual Studio build.
+
Wed, 18 Mar 2009 14:28:23 -0700 Google Inc. <opensource@google.com>
* Issue #14: HashedDictionary may free memory twice if implicitly copied.
diff --git a/Makefile.am b/Makefile.am
index cf10cbf..1c3d4cc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -83,6 +83,11 @@ noinst_LTLIBRARIES += libgtest_main.la
libgtest_main_la_SOURCES = src/gtest/gtest_main.cc
libgtest_main_la_LIBADD = libgtest.la
+noinst_LTLIBRARIES += libvcdecoder_test_common.la
+libvcdecoder_test_common_la_SOURCES = src/vcdecoder_test.h \
+ src/vcdecoder_test.cc
+libvcdecoder_test_common_la_LIBADD = libvcddec.la libgtest_main.la
+
# libvcdcom: The open-vcdiff *common* library
lib_LTLIBRARIES += libvcdcom.la
libvcdcom_la_SOURCES = src/google/output_string.h \
@@ -172,11 +177,25 @@ check_PROGRAMS += varint_bigendian_test
varint_bigendian_test_SOURCES = src/varint_bigendian_test.cc
varint_bigendian_test_LDADD = libvcdcom.la libgtest_main.la
-check_PROGRAMS += vcdecoder_test
-vcdecoder_test_SOURCES = src/vcdecoder_test.h src/vcdecoder_test.cc \
- src/vcdecoder1_test.cc src/vcdecoder2_test.cc \
- src/vcdecoder3_test.cc src/vcdecoder4_test.cc
-vcdecoder_test_LDADD = libvcddec.la libgtest_main.la
+check_PROGRAMS += vcdecoder1_test
+vcdecoder1_test_SOURCES = src/vcdecoder1_test.cc
+vcdecoder1_test_LDADD = libvcdecoder_test_common.la
+
+check_PROGRAMS += vcdecoder2_test
+vcdecoder2_test_SOURCES = src/vcdecoder2_test.cc
+vcdecoder2_test_LDADD = libvcdecoder_test_common.la
+
+check_PROGRAMS += vcdecoder3_test
+vcdecoder3_test_SOURCES = src/vcdecoder3_test.cc
+vcdecoder3_test_LDADD = libvcdecoder_test_common.la
+
+check_PROGRAMS += vcdecoder4_test
+vcdecoder4_test_SOURCES = src/vcdecoder4_test.cc
+vcdecoder4_test_LDADD = libvcdecoder_test_common.la
+
+check_PROGRAMS += vcdecoder5_test
+vcdecoder5_test_SOURCES = src/vcdecoder5_test.cc
+vcdecoder5_test_LDADD = libvcdecoder_test_common.la
check_PROGRAMS += vcdiffengine_test
vcdiffengine_test_SOURCES = src/vcdiffengine_test.cc
@@ -232,7 +251,11 @@ EXTRA_DIST = $(check_SCRIPTS) \
vsprojects/varint_bigendian_test/varint_bigendian_test.vcproj \
vsprojects/vcdcom/vcdcom.vcproj \
vsprojects/vcddec/vcddec.vcproj \
- vsprojects/vcdecoder_test/vcdecoder_test.vcproj \
+ vsprojects/vcdecoder1_test/vcdecoder1_test.vcproj \
+ vsprojects/vcdecoder2_test/vcdecoder2_test.vcproj \
+ vsprojects/vcdecoder3_test/vcdecoder3_test.vcproj \
+ vsprojects/vcdecoder4_test/vcdecoder4_test.vcproj \
+ vsprojects/vcdecoder5_test/vcdecoder5_test.vcproj \
vsprojects/vcdenc/vcdenc.vcproj \
vsprojects/vcdiff/vcdiff.vcproj \
vsprojects/vcdiffengine_test/vcdiffengine_test.vcproj \
diff --git a/Makefile.in b/Makefile.in
index fc4a297..1fce17d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -50,7 +50,9 @@ check_PROGRAMS = addrcache_test$(EXEEXT) blockhash_test$(EXEEXT) \
encodetable_test$(EXEEXT) headerparser_test$(EXEEXT) \
instruction_map_test$(EXEEXT) output_string_test$(EXEEXT) \
rolling_hash_test$(EXEEXT) varint_bigendian_test$(EXEEXT) \
- vcdecoder_test$(EXEEXT) vcdiffengine_test$(EXEEXT) \
+ vcdecoder1_test$(EXEEXT) vcdecoder2_test$(EXEEXT) \
+ vcdecoder3_test$(EXEEXT) vcdecoder4_test$(EXEEXT) \
+ vcdecoder5_test$(EXEEXT) vcdiffengine_test$(EXEEXT) \
vcencoder_test$(EXEEXT)
noinst_PROGRAMS =
subdir = .
@@ -61,7 +63,8 @@ DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \
COPYING ChangeLog INSTALL NEWS THANKS compile config.guess \
config.sub depcomp install-sh ltmain.sh missing mkinstalldirs
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_have_attribute.m4 \
+ $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -97,6 +100,11 @@ libvcdcom_la_OBJECTS = $(am_libvcdcom_la_OBJECTS)
libvcddec_la_DEPENDENCIES = libvcdcom.la
am_libvcddec_la_OBJECTS = decodetable.lo headerparser.lo vcdecoder.lo
libvcddec_la_OBJECTS = $(am_libvcddec_la_OBJECTS)
+libvcdecoder_test_common_la_DEPENDENCIES = libvcddec.la \
+ libgtest_main.la
+am_libvcdecoder_test_common_la_OBJECTS = vcdecoder_test.lo
+libvcdecoder_test_common_la_OBJECTS = \
+ $(am_libvcdecoder_test_common_la_OBJECTS)
libvcdenc_la_DEPENDENCIES = libvcdcom.la
am_libvcdenc_la_OBJECTS = blockhash.lo encodetable.lo \
instruction_map.lo vcdiffengine.lo vcencoder.lo
@@ -133,11 +141,21 @@ rolling_hash_test_DEPENDENCIES = libvcdcom.la libgtest_main.la
am_varint_bigendian_test_OBJECTS = varint_bigendian_test.$(OBJEXT)
varint_bigendian_test_OBJECTS = $(am_varint_bigendian_test_OBJECTS)
varint_bigendian_test_DEPENDENCIES = libvcdcom.la libgtest_main.la
-am_vcdecoder_test_OBJECTS = vcdecoder_test.$(OBJEXT) \
- vcdecoder1_test.$(OBJEXT) vcdecoder2_test.$(OBJEXT) \
- vcdecoder3_test.$(OBJEXT) vcdecoder4_test.$(OBJEXT)
-vcdecoder_test_OBJECTS = $(am_vcdecoder_test_OBJECTS)
-vcdecoder_test_DEPENDENCIES = libvcddec.la libgtest_main.la
+am_vcdecoder1_test_OBJECTS = vcdecoder1_test.$(OBJEXT)
+vcdecoder1_test_OBJECTS = $(am_vcdecoder1_test_OBJECTS)
+vcdecoder1_test_DEPENDENCIES = libvcdecoder_test_common.la
+am_vcdecoder2_test_OBJECTS = vcdecoder2_test.$(OBJEXT)
+vcdecoder2_test_OBJECTS = $(am_vcdecoder2_test_OBJECTS)
+vcdecoder2_test_DEPENDENCIES = libvcdecoder_test_common.la
+am_vcdecoder3_test_OBJECTS = vcdecoder3_test.$(OBJEXT)
+vcdecoder3_test_OBJECTS = $(am_vcdecoder3_test_OBJECTS)
+vcdecoder3_test_DEPENDENCIES = libvcdecoder_test_common.la
+am_vcdecoder4_test_OBJECTS = vcdecoder4_test.$(OBJEXT)
+vcdecoder4_test_OBJECTS = $(am_vcdecoder4_test_OBJECTS)
+vcdecoder4_test_DEPENDENCIES = libvcdecoder_test_common.la
+am_vcdecoder5_test_OBJECTS = vcdecoder5_test.$(OBJEXT)
+vcdecoder5_test_OBJECTS = $(am_vcdecoder5_test_OBJECTS)
+vcdecoder5_test_DEPENDENCIES = libvcdecoder_test_common.la
am_vcdiff_OBJECTS = vcdiff_main.$(OBJEXT)
vcdiff_OBJECTS = $(am_vcdiff_OBJECTS)
vcdiff_DEPENDENCIES = libvcddec.la libvcdenc.la libgflags.la
@@ -172,24 +190,30 @@ CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
$(LDFLAGS) -o $@
SOURCES = $(libgflags_la_SOURCES) $(libgtest_la_SOURCES) \
$(libgtest_main_la_SOURCES) $(libvcdcom_la_SOURCES) \
- $(libvcddec_la_SOURCES) $(libvcdenc_la_SOURCES) \
- $(addrcache_test_SOURCES) $(blockhash_test_SOURCES) \
- $(codetable_test_SOURCES) $(decodetable_test_SOURCES) \
- $(encodetable_test_SOURCES) $(headerparser_test_SOURCES) \
- $(instruction_map_test_SOURCES) $(output_string_test_SOURCES) \
- $(rolling_hash_test_SOURCES) $(varint_bigendian_test_SOURCES) \
- $(vcdecoder_test_SOURCES) $(vcdiff_SOURCES) \
- $(vcdiffengine_test_SOURCES) $(vcencoder_test_SOURCES)
+ $(libvcddec_la_SOURCES) $(libvcdecoder_test_common_la_SOURCES) \
+ $(libvcdenc_la_SOURCES) $(addrcache_test_SOURCES) \
+ $(blockhash_test_SOURCES) $(codetable_test_SOURCES) \
+ $(decodetable_test_SOURCES) $(encodetable_test_SOURCES) \
+ $(headerparser_test_SOURCES) $(instruction_map_test_SOURCES) \
+ $(output_string_test_SOURCES) $(rolling_hash_test_SOURCES) \
+ $(varint_bigendian_test_SOURCES) $(vcdecoder1_test_SOURCES) \
+ $(vcdecoder2_test_SOURCES) $(vcdecoder3_test_SOURCES) \
+ $(vcdecoder4_test_SOURCES) $(vcdecoder5_test_SOURCES) \
+ $(vcdiff_SOURCES) $(vcdiffengine_test_SOURCES) \
+ $(vcencoder_test_SOURCES)
DIST_SOURCES = $(libgflags_la_SOURCES) $(libgtest_la_SOURCES) \
$(libgtest_main_la_SOURCES) $(libvcdcom_la_SOURCES) \
- $(libvcddec_la_SOURCES) $(libvcdenc_la_SOURCES) \
- $(addrcache_test_SOURCES) $(blockhash_test_SOURCES) \
- $(codetable_test_SOURCES) $(decodetable_test_SOURCES) \
- $(encodetable_test_SOURCES) $(headerparser_test_SOURCES) \
- $(instruction_map_test_SOURCES) $(output_string_test_SOURCES) \
- $(rolling_hash_test_SOURCES) $(varint_bigendian_test_SOURCES) \
- $(vcdecoder_test_SOURCES) $(vcdiff_SOURCES) \
- $(vcdiffengine_test_SOURCES) $(vcencoder_test_SOURCES)
+ $(libvcddec_la_SOURCES) $(libvcdecoder_test_common_la_SOURCES) \
+ $(libvcdenc_la_SOURCES) $(addrcache_test_SOURCES) \
+ $(blockhash_test_SOURCES) $(codetable_test_SOURCES) \
+ $(decodetable_test_SOURCES) $(encodetable_test_SOURCES) \
+ $(headerparser_test_SOURCES) $(instruction_map_test_SOURCES) \
+ $(output_string_test_SOURCES) $(rolling_hash_test_SOURCES) \
+ $(varint_bigendian_test_SOURCES) $(vcdecoder1_test_SOURCES) \
+ $(vcdecoder2_test_SOURCES) $(vcdecoder3_test_SOURCES) \
+ $(vcdecoder4_test_SOURCES) $(vcdecoder5_test_SOURCES) \
+ $(vcdiff_SOURCES) $(vcdiffengine_test_SOURCES) \
+ $(vcencoder_test_SOURCES)
man1dir = $(mandir)/man1
NROFF = nroff
MANS = $(dist_man1_MANS)
@@ -352,7 +376,8 @@ noinst_SCRIPTS =
# gtest (Google Test): Used for unit tests only
# Please refer to http://code.google.com/p/googletest/ for details
-noinst_LTLIBRARIES = libgflags.la libgtest.la libgtest_main.la
+noinst_LTLIBRARIES = libgflags.la libgtest.la libgtest_main.la \
+ libvcdecoder_test_common.la
libgflags_la_SOURCES = src/gflags/gflags.h \
src/mutex.h \
src/gflags.cc \
@@ -378,6 +403,10 @@ libgtest_la_SOURCES = src/gtest/gtest.h \
libgtest_main_la_SOURCES = src/gtest/gtest_main.cc
libgtest_main_la_LIBADD = libgtest.la
+libvcdecoder_test_common_la_SOURCES = src/vcdecoder_test.h \
+ src/vcdecoder_test.cc
+
+libvcdecoder_test_common_la_LIBADD = libvcddec.la libgtest_main.la
libvcdcom_la_SOURCES = src/google/output_string.h \
src/addrcache.h \
src/checksum.h \
@@ -440,11 +469,16 @@ rolling_hash_test_SOURCES = src/rolling_hash_test.cc
rolling_hash_test_LDADD = libvcdcom.la libgtest_main.la
varint_bigendian_test_SOURCES = src/varint_bigendian_test.cc
varint_bigendian_test_LDADD = libvcdcom.la libgtest_main.la
-vcdecoder_test_SOURCES = src/vcdecoder_test.h src/vcdecoder_test.cc \
- src/vcdecoder1_test.cc src/vcdecoder2_test.cc \
- src/vcdecoder3_test.cc src/vcdecoder4_test.cc
-
-vcdecoder_test_LDADD = libvcddec.la libgtest_main.la
+vcdecoder1_test_SOURCES = src/vcdecoder1_test.cc
+vcdecoder1_test_LDADD = libvcdecoder_test_common.la
+vcdecoder2_test_SOURCES = src/vcdecoder2_test.cc
+vcdecoder2_test_LDADD = libvcdecoder_test_common.la
+vcdecoder3_test_SOURCES = src/vcdecoder3_test.cc
+vcdecoder3_test_LDADD = libvcdecoder_test_common.la
+vcdecoder4_test_SOURCES = src/vcdecoder4_test.cc
+vcdecoder4_test_LDADD = libvcdecoder_test_common.la
+vcdecoder5_test_SOURCES = src/vcdecoder5_test.cc
+vcdecoder5_test_LDADD = libvcdecoder_test_common.la
vcdiffengine_test_SOURCES = src/vcdiffengine_test.cc
vcdiffengine_test_LDADD = libvcdenc.la libgtest_main.la
vcencoder_test_SOURCES = src/vcencoder_test.cc
@@ -480,7 +514,11 @@ EXTRA_DIST = $(check_SCRIPTS) \
vsprojects/varint_bigendian_test/varint_bigendian_test.vcproj \
vsprojects/vcdcom/vcdcom.vcproj \
vsprojects/vcddec/vcddec.vcproj \
- vsprojects/vcdecoder_test/vcdecoder_test.vcproj \
+ vsprojects/vcdecoder1_test/vcdecoder1_test.vcproj \
+ vsprojects/vcdecoder2_test/vcdecoder2_test.vcproj \
+ vsprojects/vcdecoder3_test/vcdecoder3_test.vcproj \
+ vsprojects/vcdecoder4_test/vcdecoder4_test.vcproj \
+ vsprojects/vcdecoder5_test/vcdecoder5_test.vcproj \
vsprojects/vcdenc/vcdenc.vcproj \
vsprojects/vcdiff/vcdiff.vcproj \
vsprojects/vcdiffengine_test/vcdiffengine_test.vcproj \
@@ -587,6 +625,8 @@ libvcdcom.la: $(libvcdcom_la_OBJECTS) $(libvcdcom_la_DEPENDENCIES)
$(CXXLINK) -rpath $(libdir) $(libvcdcom_la_OBJECTS) $(libvcdcom_la_LIBADD) $(LIBS)
libvcddec.la: $(libvcddec_la_OBJECTS) $(libvcddec_la_DEPENDENCIES)
$(CXXLINK) -rpath $(libdir) $(libvcddec_la_OBJECTS) $(libvcddec_la_LIBADD) $(LIBS)
+libvcdecoder_test_common.la: $(libvcdecoder_test_common_la_OBJECTS) $(libvcdecoder_test_common_la_DEPENDENCIES)
+ $(CXXLINK) $(libvcdecoder_test_common_la_OBJECTS) $(libvcdecoder_test_common_la_LIBADD) $(LIBS)
libvcdenc.la: $(libvcdenc_la_OBJECTS) $(libvcdenc_la_DEPENDENCIES)
$(CXXLINK) -rpath $(libdir) $(libvcdenc_la_OBJECTS) $(libvcdenc_la_LIBADD) $(LIBS)
install-binPROGRAMS: $(bin_PROGRAMS)
@@ -661,9 +701,21 @@ rolling_hash_test$(EXEEXT): $(rolling_hash_test_OBJECTS) $(rolling_hash_test_DEP
varint_bigendian_test$(EXEEXT): $(varint_bigendian_test_OBJECTS) $(varint_bigendian_test_DEPENDENCIES)
@rm -f varint_bigendian_test$(EXEEXT)
$(CXXLINK) $(varint_bigendian_test_OBJECTS) $(varint_bigendian_test_LDADD) $(LIBS)
-vcdecoder_test$(EXEEXT): $(vcdecoder_test_OBJECTS) $(vcdecoder_test_DEPENDENCIES)
- @rm -f vcdecoder_test$(EXEEXT)
- $(CXXLINK) $(vcdecoder_test_OBJECTS) $(vcdecoder_test_LDADD) $(LIBS)
+vcdecoder1_test$(EXEEXT): $(vcdecoder1_test_OBJECTS) $(vcdecoder1_test_DEPENDENCIES)
+ @rm -f vcdecoder1_test$(EXEEXT)
+ $(CXXLINK) $(vcdecoder1_test_OBJECTS) $(vcdecoder1_test_LDADD) $(LIBS)
+vcdecoder2_test$(EXEEXT): $(vcdecoder2_test_OBJECTS) $(vcdecoder2_test_DEPENDENCIES)
+ @rm -f vcdecoder2_test$(EXEEXT)
+ $(CXXLINK) $(vcdecoder2_test_OBJECTS) $(vcdecoder2_test_LDADD) $(LIBS)
+vcdecoder3_test$(EXEEXT): $(vcdecoder3_test_OBJECTS) $(vcdecoder3_test_DEPENDENCIES)
+ @rm -f vcdecoder3_test$(EXEEXT)
+ $(CXXLINK) $(vcdecoder3_test_OBJECTS) $(vcdecoder3_test_LDADD) $(LIBS)
+vcdecoder4_test$(EXEEXT): $(vcdecoder4_test_OBJECTS) $(vcdecoder4_test_DEPENDENCIES)
+ @rm -f vcdecoder4_test$(EXEEXT)
+ $(CXXLINK) $(vcdecoder4_test_OBJECTS) $(vcdecoder4_test_LDADD) $(LIBS)
+vcdecoder5_test$(EXEEXT): $(vcdecoder5_test_OBJECTS) $(vcdecoder5_test_DEPENDENCIES)
+ @rm -f vcdecoder5_test$(EXEEXT)
+ $(CXXLINK) $(vcdecoder5_test_OBJECTS) $(vcdecoder5_test_LDADD) $(LIBS)
vcdiff$(EXEEXT): $(vcdiff_OBJECTS) $(vcdiff_DEPENDENCIES)
@rm -f vcdiff$(EXEEXT)
$(CXXLINK) $(vcdiff_OBJECTS) $(vcdiff_LDADD) $(LIBS)
@@ -712,7 +764,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcdecoder2_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcdecoder3_test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcdecoder4_test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcdecoder_test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcdecoder5_test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcdecoder_test.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcdiff_main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcdiffengine.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vcdiffengine_test.Po@am__quote@
@@ -866,6 +919,13 @@ vcdecoder.lo: src/vcdecoder.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vcdecoder.lo `test -f 'src/vcdecoder.cc' || echo '$(srcdir)/'`src/vcdecoder.cc
+vcdecoder_test.lo: src/vcdecoder_test.cc
+@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vcdecoder_test.lo -MD -MP -MF $(DEPDIR)/vcdecoder_test.Tpo -c -o vcdecoder_test.lo `test -f 'src/vcdecoder_test.cc' || echo '$(srcdir)/'`src/vcdecoder_test.cc
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/vcdecoder_test.Tpo $(DEPDIR)/vcdecoder_test.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vcdecoder_test.cc' object='vcdecoder_test.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vcdecoder_test.lo `test -f 'src/vcdecoder_test.cc' || echo '$(srcdir)/'`src/vcdecoder_test.cc
+
blockhash.lo: src/blockhash.cc
@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blockhash.lo -MD -MP -MF $(DEPDIR)/blockhash.Tpo -c -o blockhash.lo `test -f 'src/blockhash.cc' || echo '$(srcdir)/'`src/blockhash.cc
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/blockhash.Tpo $(DEPDIR)/blockhash.Plo
@@ -1041,20 +1101,6 @@ varint_bigendian_test.obj: src/varint_bigendian_test.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o varint_bigendian_test.obj `if test -f 'src/varint_bigendian_test.cc'; then $(CYGPATH_W) 'src/varint_bigendian_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/varint_bigendian_test.cc'; fi`
-vcdecoder_test.o: src/vcdecoder_test.cc
-@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vcdecoder_test.o -MD -MP -MF $(DEPDIR)/vcdecoder_test.Tpo -c -o vcdecoder_test.o `test -f 'src/vcdecoder_test.cc' || echo '$(srcdir)/'`src/vcdecoder_test.cc
-@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/vcdecoder_test.Tpo $(DEPDIR)/vcdecoder_test.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vcdecoder_test.cc' object='vcdecoder_test.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vcdecoder_test.o `test -f 'src/vcdecoder_test.cc' || echo '$(srcdir)/'`src/vcdecoder_test.cc
-
-vcdecoder_test.obj: src/vcdecoder_test.cc
-@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vcdecoder_test.obj -MD -MP -MF $(DEPDIR)/vcdecoder_test.Tpo -c -o vcdecoder_test.obj `if test -f 'src/vcdecoder_test.cc'; then $(CYGPATH_W) 'src/vcdecoder_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/vcdecoder_test.cc'; fi`
-@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/vcdecoder_test.Tpo $(DEPDIR)/vcdecoder_test.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vcdecoder_test.cc' object='vcdecoder_test.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vcdecoder_test.obj `if test -f 'src/vcdecoder_test.cc'; then $(CYGPATH_W) 'src/vcdecoder_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/vcdecoder_test.cc'; fi`
-
vcdecoder1_test.o: src/vcdecoder1_test.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vcdecoder1_test.o -MD -MP -MF $(DEPDIR)/vcdecoder1_test.Tpo -c -o vcdecoder1_test.o `test -f 'src/vcdecoder1_test.cc' || echo '$(srcdir)/'`src/vcdecoder1_test.cc
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/vcdecoder1_test.Tpo $(DEPDIR)/vcdecoder1_test.Po
@@ -1111,6 +1157,20 @@ vcdecoder4_test.obj: src/vcdecoder4_test.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vcdecoder4_test.obj `if test -f 'src/vcdecoder4_test.cc'; then $(CYGPATH_W) 'src/vcdecoder4_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/vcdecoder4_test.cc'; fi`
+vcdecoder5_test.o: src/vcdecoder5_test.cc
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vcdecoder5_test.o -MD -MP -MF $(DEPDIR)/vcdecoder5_test.Tpo -c -o vcdecoder5_test.o `test -f 'src/vcdecoder5_test.cc' || echo '$(srcdir)/'`src/vcdecoder5_test.cc
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/vcdecoder5_test.Tpo $(DEPDIR)/vcdecoder5_test.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vcdecoder5_test.cc' object='vcdecoder5_test.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vcdecoder5_test.o `test -f 'src/vcdecoder5_test.cc' || echo '$(srcdir)/'`src/vcdecoder5_test.cc
+
+vcdecoder5_test.obj: src/vcdecoder5_test.cc
+@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vcdecoder5_test.obj -MD -MP -MF $(DEPDIR)/vcdecoder5_test.Tpo -c -o vcdecoder5_test.obj `if test -f 'src/vcdecoder5_test.cc'; then $(CYGPATH_W) 'src/vcdecoder5_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/vcdecoder5_test.cc'; fi`
+@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/vcdecoder5_test.Tpo $(DEPDIR)/vcdecoder5_test.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vcdecoder5_test.cc' object='vcdecoder5_test.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vcdecoder5_test.obj `if test -f 'src/vcdecoder5_test.cc'; then $(CYGPATH_W) 'src/vcdecoder5_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/vcdecoder5_test.cc'; fi`
+
vcdiff_main.o: src/vcdiff_main.cc
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vcdiff_main.o -MD -MP -MF $(DEPDIR)/vcdiff_main.Tpo -c -o vcdiff_main.o `test -f 'src/vcdiff_main.cc' || echo '$(srcdir)/'`src/vcdiff_main.cc
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/vcdiff_main.Tpo $(DEPDIR)/vcdiff_main.Po
diff --git a/aclocal.m4 b/aclocal.m4
index 1d4ddbf..27fd4bb 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -7530,3 +7530,4 @@ AC_SUBST([am__tar])
AC_SUBST([am__untar])
]) # _AM_PROG_TAR
+m4_include([m4/ac_have_attribute.m4])
diff --git a/configure b/configure
index 2696d3b..f6d4714 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for open-vcdiff 0.5.
+# Generated by GNU Autoconf 2.61 for open-vcdiff 0.6.
#
# Report bugs to <opensource@google.com>.
#
@@ -728,8 +728,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='open-vcdiff'
PACKAGE_TARNAME='open-vcdiff'
-PACKAGE_VERSION='0.5'
-PACKAGE_STRING='open-vcdiff 0.5'
+PACKAGE_VERSION='0.6'
+PACKAGE_STRING='open-vcdiff 0.6'
PACKAGE_BUGREPORT='opensource@google.com'
ac_unique_file="README"
@@ -1397,7 +1397,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures open-vcdiff 0.5 to adapt to many kinds of systems.
+\`configure' configures open-vcdiff 0.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1467,7 +1467,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of open-vcdiff 0.5:";;
+ short | recursive ) echo "Configuration of open-vcdiff 0.6:";;
esac
cat <<\_ACEOF
@@ -1476,10 +1476,10 @@ Optional Features:
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=no]
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
Optional Packages:
@@ -1569,7 +1569,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-open-vcdiff configure 0.5
+open-vcdiff configure 0.6
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1583,7 +1583,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by open-vcdiff $as_me 0.5, which was
+It was created by open-vcdiff $as_me 0.6, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
@@ -2274,7 +2274,7 @@ fi
# Define the identity of the package.
PACKAGE='open-vcdiff'
- VERSION='0.5'
+ VERSION='0.6'
cat >>confdefs.h <<_ACEOF
@@ -4307,75 +4307,81 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-# Check whether --enable-shared was given.
-if test "${enable_shared+set}" = set; then
- enableval=$enable_shared; p=${PACKAGE-default}
+# Issue #21: Fail to test on MinGW 5.1.4
+# Disabling fast install keeps libtool from creating wrapper scripts around
+# the executables it builds. Such scripts have caused failures on MinGW.
+# Using this option means an extra link step is executed during "make install".
+# Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+ enableval=$enable_fast_install; p=${PACKAGE-default}
case $enableval in
- yes) enable_shared=yes ;;
- no) enable_shared=no ;;
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
*)
- enable_shared=no
+ enable_fast_install=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
- enable_shared=yes
+ enable_fast_install=yes
fi
done
IFS="$lt_save_ifs"
;;
esac
else
- enable_shared=yes
+ enable_fast_install=no
fi
-# Check whether --enable-static was given.
-if test "${enable_static+set}" = set; then
- enableval=$enable_static; p=${PACKAGE-default}
+
+
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+ enableval=$enable_shared; p=${PACKAGE-default}
case $enableval in
- yes) enable_static=yes ;;
- no) enable_static=no ;;
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
*)
- enable_static=no
+ enable_shared=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
- enable_static=yes
+ enable_shared=yes
fi
done
IFS="$lt_save_ifs"
;;
esac
else
- enable_static=yes
+ enable_shared=yes
fi
-# Check whether --enable-fast-install was given.
-if test "${enable_fast_install+set}" = set; then
- enableval=$enable_fast_install; p=${PACKAGE-default}
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then
+ enableval=$enable_static; p=${PACKAGE-default}
case $enableval in
- yes) enable_fast_install=yes ;;
- no) enable_fast_install=no ;;
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
*)
- enable_fast_install=no
+ enable_static=no
# Look at the argument we got. We use all the common list separators.
lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
for pkg in $enableval; do
IFS="$lt_save_ifs"
if test "X$pkg" = "X$p"; then
- enable_fast_install=yes
+ enable_static=yes
fi
done
IFS="$lt_save_ifs"
;;
esac
else
- enable_fast_install=yes
+ enable_static=yes
fi
@@ -5032,7 +5038,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 5035 "configure"' > conftest.$ac_ext
+ echo '#line 5041 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
@@ -7387,11 +7393,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7390: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7396: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7394: \$? = $ac_status" >&5
+ echo "$as_me:7400: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -7677,11 +7683,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7680: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7686: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:7684: \$? = $ac_status" >&5
+ echo "$as_me:7690: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -7781,11 +7787,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:7784: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:7790: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:7788: \$? = $ac_status" >&5
+ echo "$as_me:7794: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -10158,7 +10164,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10161 "configure"
+#line 10167 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10258,7 +10264,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<EOF
-#line 10261 "configure"
+#line 10267 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12659,11 +12665,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12662: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12668: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:12666: \$? = $ac_status" >&5
+ echo "$as_me:12672: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -12763,11 +12769,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:12766: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:12772: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:12770: \$? = $ac_status" >&5
+ echo "$as_me:12776: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -14361,11 +14367,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14364: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14370: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:14368: \$? = $ac_status" >&5
+ echo "$as_me:14374: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -14465,11 +14471,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:14468: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:14474: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:14472: \$? = $ac_status" >&5
+ echo "$as_me:14478: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -16685,11 +16691,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16688: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16694: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:16692: \$? = $ac_status" >&5
+ echo "$as_me:16698: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -16975,11 +16981,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:16978: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:16984: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
- echo "$as_me:16982: \$? = $ac_status" >&5
+ echo "$as_me:16988: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@@ -17079,11 +17085,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
- (eval echo "\"\$as_me:17082: $lt_compile\"" >&5)
+ (eval echo "\"\$as_me:17088: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
- echo "$as_me:17086: \$? = $ac_status" >&5
+ echo "$as_me:17092: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@@ -21835,7 +21841,69 @@ _ACEOF
fi
-AX_C___ATTRIBUTE__
+
+ { echo "$as_me:$LINENO: checking for __attribute__" >&5
+echo $ECHO_N "checking for __attribute__... $ECHO_C" >&6; }
+ if test "${ac_cv___attribute__+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+ static void foo(void) __attribute__ ((unused));
+ void foo(void) { exit(1); }
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv___attribute__=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv___attribute__=no
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test "$ac_cv___attribute__" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE___ATTRIBUTE__ 1
+_ACEOF
+
+ fi
+ { echo "$as_me:$LINENO: result: $ac_cv___attribute__" >&5
+echo "${ECHO_T}$ac_cv___attribute__" >&6; }
+
# End of definitions needed by gflags package
@@ -22274,7 +22342,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by open-vcdiff $as_me 0.5, which was
+This file was extended by open-vcdiff $as_me 0.6, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -22327,7 +22395,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-open-vcdiff config.status 0.5
+open-vcdiff config.status 0.6
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
diff --git a/configure.ac b/configure.ac
index 399351e..b47421c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@
# make sure we're interpreted by some minimal autoconf
AC_PREREQ(2.57)
-AC_INIT(open-vcdiff, 0.5, opensource@google.com)
+AC_INIT(open-vcdiff, 0.6, opensource@google.com)
AC_CONFIG_SRCDIR(README)
AM_INIT_AUTOMAKE
AM_CONFIG_HEADER(src/config.h)
@@ -16,6 +16,12 @@ AC_PROG_CXX
AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc
AC_CANONICAL_HOST
+# Issue #21: Fail to test on MinGW 5.1.4
+# Disabling fast install keeps libtool from creating wrapper scripts around
+# the executables it builds. Such scripts have caused failures on MinGW.
+# Using this option means an extra link step is executed during "make install".
+AC_DISABLE_FAST_INSTALL
+
AC_PROG_LIBTOOL
AC_SUBST(LIBTOOL_DEPS)
diff --git a/packages/deb/changelog b/packages/deb/changelog
index 0885f22..cd17567 100644
--- a/packages/deb/changelog
+++ b/packages/deb/changelog
@@ -1,83 +1,30 @@
+open-vcdiff (0.6-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Google Inc. <opensource@google.com> Thu, 09 Apr 2009 09:16:58 -0700
+
open-vcdiff (0.5-1) unstable; urgency=low
- * Issue #14: HashedDictionary may free memory twice if implicitly copied.
- * Add private copy constructor and assignment operator for HashedDictionary.
- * Issue #18: Building RPM package fails on Fedora 9: Installed (but
- unpackaged) file vcdiff.1.gz.
- * Some OS, including Fedora 9, automatically compress man pages that are
- installed using /usr/bin/install. This confuses the RPM packager, which
- expects a file named "vcdiff.1" and finds one named "vcdiff.1.gz" instead.
- Use a wild-card character to accept either of these two alternatives.
- * Change the VCDIFF block size to 16, but have the encoder discard all matches
- smaller than 32 bytes. This doubles the CPU and memory needed by the
- encoder, but finds better string matches, producing a more efficient
- encoding. Loosen the timing test limit in blockhash_test.cc for the debug
- build only.
- * Make the code table writer a virtual interface.
- * Add an interface SetTargetMatching() to the simple encoder class
- VCDEncoder.
- * Remove all references to LOG and logging.h from the unit tests and
- command-line client.
- * Remove all special cases for kBlockSize < 4. kBlockSize must be a multiple
- of the machine word size (see blockhash.cc), so it will never be smaller
- than 4.
- * Use version 1.10 of Automake.
- * Incorporate recent changes to gflags package
- (http://code.google.com/p/google-gflags/)
- * Fix Visual Studio type-mismatch warning in vcdecoder4_test.cc.
- * Use address cache helper functions IsSameMode(), IsHereMode(), etc. to
- simplify test code.
- * Add contributor's name to THANKS file.
+ * New upstream release.
-- Google Inc. <opensource@google.com> Wed, 18 Mar 2009 14:28:23 -0700
open-vcdiff (0.4-1) unstable; urgency=low
- * Issue #15: open-vcdiff fails to compile on Fedora 9
- * Apply patch sent by Daniel Kegel
- * Add header <string.h> to src/vcdiffengine.cc, which uses memcpy.
- * Remove const qualifier from integral return types to fix gcc 4.3.1
- warning.
- * Issue #6: vcdiff crashes with zero-size dictionary
- * Add special cases for empty dictionary file in vcdiff_main.cc.
- * Issue #7: vcdiff incorrect binary I/O on Windows
- * Change stdin/stdout file type to binary in vcdiff_main.cc.
- * Issue #13: Add unit test for vcdiff command-line executable
- * Unit test vcdiff_test.bat added for Visual Studio testing of vcdiff.exe.
- Includes regression tests for issues #6 and #7.
- * Add contributors' names to THANKS file.
+ * New upstream release.
-- Google Inc. <opensource@google.com> Thu, 23 Oct 2008 09:03:56 -0700
open-vcdiff (0.3-1) unstable; urgency=low
- * Issue #15: open-vcdiff fails to compile on Fedora 9
- * Add header <string.h> to source files that use memcmp, memset, memcpy,
- and/or strlen.
- * Change C++-style includes like <cstdlib> to C-style includes like
- <stdlib.h> so that function names are guaranteed to be defined in the
- global namespace.
- * Issue #8: Decoder should not crash if it runs out of memory
- * Add a new interface that places a limit on the maximum bytes allowed in
- a single target window or a target file.
- * Issue #13: Add unit test for vcdiff command-line executable
- * Unit test vcdiff_test.sh added for Linux and Mac builds.
- * Still need to add a Windows version of this test.
+ * New upstream release.
-- Google Inc. <opensource@google.com> Fri, 10 Oct 2008 11:16:23 -0700
open-vcdiff (0.2-1) unstable; urgency=low
- * Fix problems found on OpenBSD platform.
- * Issue #1: vcdiff command-line executable crashes on startup.
- This was a problem with the stub intended to replace pthread_once if the
- package was not linked with the pthreads library. Simplify gflags.cc to
- assume single-threaded execution.
- * Issue #2: Unit test blockhash_test fails.
- Define VCDIFF_USE_BLOCK_COMPARE_WORDS for BSD platforms to ensure that
- the most efficient version of memcmp is used in the encoder's inner loop.
- * Fix compilation warnings in gtest-filepath.cc: "warning: missing
- initializer for member 'stat::...'"
+ * New upstream release.
-- Google Inc. <opensource@google.com> Tue, 2 Sep 2008 09:20:20 -0700
diff --git a/src/config.h.in b/src/config.h.in
index 8881344..1694022 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -78,6 +78,9 @@
/* Define to 1 if you have the <windows.h> header file. */
#undef HAVE_WINDOWS_H
+/* define if your compiler has __attribute__ */
+#undef HAVE___ATTRIBUTE__
+
/* Define to 1 if the system has the type `__int16'. */
#undef HAVE___INT16
diff --git a/src/google/vcdecoder.h b/src/google/vcdecoder.h
index 72c2ed7..c834517 100644
--- a/src/google/vcdecoder.h
+++ b/src/google/vcdecoder.h
@@ -118,44 +118,13 @@ class VCDiffStreamingDecoder {
// than this limit, it will log an error and stop decoding.
bool SetMaximumTargetWindowSize(size_t new_maximum_target_window_size);
- // *** Diagnostic interfaces ***
-
- // The decoder can create a version of the output target string with XML tags
- // added to indicate where each section of the decoded text came from. This
- // can assist in debugging the decoder and/or determining the effectiveness of
- // a particular dictionary. The following XML tags will be added. Despite
- // the formatting of this example, newlines will not be added between tags.
- // <dmatch>This text matched with the dictionary</dmatch>
- // <bmatch>This text matched earlier target output</bmatch>
- // <literal>This text found no match</literal>
- //
- // Calling EnableAnnotatedOutput() will enable this feature. The interface
- // GetAnnotatedOutput() can be used to retrieve the annotated text. It is
- // recommended to use this feature only when the target data consists of HTML
- // or other human-readable text.
-
- // Enables the annotated output feature. After this method is called, new
- // target windows added to output_string by DecodeChunk() will also be added
- // to the annotated output, and can be retrieved using GetAnnotatedOutput().
- // If annotated output is already enabled, this function has no effect.
- void EnableAnnotatedOutput();
-
- // Disables the annotated output feature. After calling this method,
- // GetAnnotatedOutput() will produce an empty string until
- // EnableAnnotatedOutput() is called again.
- void DisableAnnotatedOutput();
-
- // Replaces annotated_output with a copy of the annotated output string.
- // Annotated output collection begins when EnableAnnotatedOutput() is called.
- // The annotated output will be cleared each time StartDecoding() is called,
- // but not when FinishDecoding() is called.
- template<class OutputType>
- void GetAnnotatedOutput(OutputType* annotated_output) {
- OutputString<OutputType> output_string(annotated_output);
- GetAnnotatedOutputToInterface(&output_string);
- }
-
- void GetAnnotatedOutputToInterface(OutputStringInterface* annotated_output);
+ // This interface must be called before StartDecoding(). If its argument
+ // is true, then the VCD_TARGET flag can be specified to allow the source
+ // segment to be chosen from the previously-decoded target data. (This is the
+ // default behavior.) If it is false, then specifying the VCD_TARGET flag is
+ // considered an error, and the decoder does not need to keep in memory any
+ // decoded target data prior to the current window.
+ void SetAllowVcdTarget(bool allow_vcd_target);
private:
VCDiffStreamingDecoderImpl* const impl_;
diff --git a/src/headerparser.cc b/src/headerparser.cc
index ead4f44..02f7f31 100644
--- a/src/headerparser.cc
+++ b/src/headerparser.cc
@@ -205,6 +205,7 @@ bool VCDiffHeaderParser::ParseSourceSegmentLengthAndPosition(
bool VCDiffHeaderParser::ParseWinIndicatorAndSourceSegment(
size_t dictionary_size,
size_t decoded_target_size,
+ bool allow_vcd_target,
unsigned char* win_indicator,
size_t* source_segment_length,
size_t* source_segment_position) {
@@ -221,6 +222,12 @@ bool VCDiffHeaderParser::ParseWinIndicatorAndSourceSegment(
source_segment_length,
source_segment_position);
case VCD_TARGET:
+ if (!allow_vcd_target) {
+ LOG(ERROR) << "Delta file contains VCD_TARGET flag, which is not "
+ "allowed by current decoder settings" << LOG_ENDL;
+ return_code_ = RESULT_ERROR;
+ return false;
+ }
return ParseSourceSegmentLengthAndPosition(decoded_target_size,
"current target position",
"target file",
diff --git a/src/headerparser.h b/src/headerparser.h
index c74fa25..eb0ea8e 100644
--- a/src/headerparser.h
+++ b/src/headerparser.h
@@ -257,6 +257,9 @@ class VCDiffHeaderParser {
// source_segment_length and source_segment_position if the source segment
// is taken from the target (i.e., if the parsed *win_indicator equals
// VCD_TARGET.)
+ // allow_vcd_target: If this argument is false, and the parsed *win_indicator
+ // is VCD_TARGET, then an error is produced; if true, VCD_TARGET is
+ // allowed.
// win_indicator (output): Points to a single unsigned char (not an array)
// that will receive the parsed value of Win_Indicator.
// source_segment_length (output): The parsed length of the source segment.
@@ -264,6 +267,7 @@ class VCDiffHeaderParser {
// source/target file from which the source segment is to be taken.
bool ParseWinIndicatorAndSourceSegment(size_t dictionary_size,
size_t decoded_target_size,
+ bool allow_vcd_target,
unsigned char* win_indicator,
size_t* source_segment_length,
size_t* source_segment_position);
diff --git a/src/mutex.h b/src/mutex.h
index d15579e..eda1f4e 100644
--- a/src/mutex.h
+++ b/src/mutex.h
@@ -167,7 +167,7 @@ class Mutex {
inline void SetIsSafe() { is_safe_ = true; }
// Catch the error of writing Mutex when intending MutexLock.
- Mutex(Mutex *ignored) {}
+ Mutex(Mutex* /*ignored*/) {}
// Disallow "evil" constructors
Mutex(const Mutex&);
void operator=(const Mutex&);
@@ -226,7 +226,8 @@ void Mutex::Lock() { SAFE_PTHREAD(pthread_rwlock_wrlock); }
void Mutex::Unlock() { SAFE_PTHREAD(pthread_rwlock_unlock); }
#ifdef GMUTEX_TRYLOCK
bool Mutex::TryLock() { return is_safe_ ?
- pthread_rwlock_trywrlock(&mutex_) == 0 : true; }
+ pthread_rwlock_trywrlock(&mutex_) == 0 :
+ true; }
#endif
void Mutex::ReaderLock() { SAFE_PTHREAD(pthread_rwlock_rdlock); }
void Mutex::ReaderUnlock() { SAFE_PTHREAD(pthread_rwlock_unlock); }
diff --git a/src/vcdecoder.cc b/src/vcdecoder.cc
index 02afa87..5454e24 100644
--- a/src/vcdecoder.cc
+++ b/src/vcdecoder.cc
@@ -46,28 +46,6 @@
namespace open_vcdiff {
-namespace {
-
-enum VCDiffAnnotationType {
- VCD_ANNOTATION_LITERAL,
- VCD_ANNOTATION_DMATCH,
- VCD_ANNOTATION_BMATCH
-};
-
-static const char* kAnnotationStartTags[] = {
- "<literal>",
- "<dmatch>",
- "<bmatch>"
-};
-
-static const char* kAnnotationEndTags[] = {
- "</literal>",
- "</dmatch>",
- "</bmatch>"
-};
-
-} // anonymous namespace
-
// This class is used to parse delta file windows as described
// in RFC sections 4.2 and 4.3. Its methods are not thread-safe.
//
@@ -133,10 +111,9 @@ class VCDiffDeltaFileWindow {
// Decodes as many delta windows as possible using the input data from
// *parseable_chunk. Appends the decoded target windows to
- // parent_->decoded_target(). If annotated output is enabled, appends
- // annotated output to parent_->annotated_output(). Returns RESULT_SUCCESS on
- // success, or RESULT_END_OF_DATA if the end of input was reached before the
- // entire window could be decoded and more input is expected (only possible if
+ // parent_->decoded_target(). Returns RESULT_SUCCESS on success, or
+ // RESULT_END_OF_DATA if the end of input was reached before the entire window
+ // could be decoded and more input is expected (only possible if
// IsInterleaved() is true), or RESULT_ERROR if an error occurred during
// decoding. In the RESULT_ERROR case, the value of parseable_chunk->pointer_
// is undefined; otherwise, parseable_chunk->Advance() is called to point to
@@ -166,19 +143,15 @@ class VCDiffDeltaFileWindow {
return IsInterleaved() && (interleaved_bytes_expected_ > 0);
}
- // Returns the number of bytes remaining to be decoded in the target window.
- // If not in the process of decoding a window, returns 0.
- size_t TargetBytesRemaining();
+ size_t target_window_start_pos() const { return target_window_start_pos_; }
- void EnableAnnotatedOutput() {
- if (!annotated_output_.get()) {
- annotated_output_.reset(new string);
- }
+ void set_target_window_start_pos(size_t new_start_pos) {
+ target_window_start_pos_ = new_start_pos;
}
- void DisableAnnotatedOutput() {
- annotated_output_.reset(NULL);
- }
+ // Returns the number of bytes remaining to be decoded in the target window.
+ // If not in the process of decoding a window, returns 0.
+ size_t TargetBytesRemaining();
private:
// Reads the header of the window section as described in RFC sections 4.2 and
@@ -271,20 +244,12 @@ class VCDiffDeltaFileWindow {
// Executes a single COPY or ADD instruction, appending data to
// parent_->decoded_target().
- void CopyBytes(const char* data,
- size_t size,
- VCDiffAnnotationType annotation_type);
+ void CopyBytes(const char* data, size_t size);
// Executes a single RUN instruction, appending data to
// parent_->decoded_target().
void RunByte(unsigned char byte, size_t size);
- void AppendAnnotatedOutput(string* annotated_output) {
- if (annotated_output_.get()) {
- annotated_output->append(*annotated_output_.get());
- }
- }
-
// Advance *parseable_chunk to point to the current position in the
// instructions/sizes section. If interleaved format is used, then
// decrement the number of expected bytes in the instructions/sizes section
@@ -335,12 +300,6 @@ class VCDiffDeltaFileWindow {
VCDiffCodeTableReader reader_;
- // This value is initialized to NULL, which means that annotated output is
- // disabled. If EnableAnnotatedOutput() is called, it will be set to point
- // to a new string object, and annotated output will be gathered into that
- // string.
- std::auto_ptr<string> annotated_output_;
-
// Making these private avoids implicit copy constructor & assignment operator
VCDiffDeltaFileWindow(const VCDiffDeltaFileWindow&); // NOLINT
void operator=(const VCDiffDeltaFileWindow&);
@@ -368,9 +327,8 @@ class VCDiffStreamingDecoderImpl {
// SetMaximumTargetFileSize() is not called.
static const size_t kDefaultMaximumTargetFileSize = 67108864U; // 64 MB
- // The largest value that can be passed to SetMaximumTargetFileSize() or
- // SetMaximumTargetWindowSize(). Using a larger value will result in an
- // error.
+ // The largest value that can be passed to SetMaximumTargetWindowSize().
+ // Using a larger value will result in an error.
static const size_t kTargetSizeLimit = 2147483647U; // INT32_MAX
// A constant that is the default value for planned_target_file_size_,
@@ -419,12 +377,6 @@ class VCDiffStreamingDecoderImpl {
bool AllowChecksum() const { return vcdiff_version_code_ == 'S'; }
bool SetMaximumTargetFileSize(size_t new_maximum_target_file_size) {
- if (new_maximum_target_file_size > kTargetSizeLimit) {
- LOG(ERROR) << "Specified maximum target file size "
- << new_maximum_target_file_size << " exceeds limit of "
- << kTargetSizeLimit << " bytes" << LOG_ENDL;
- return false;
- }
maximum_target_file_size_ = new_maximum_target_file_size;
return true;
}
@@ -449,6 +401,10 @@ class VCDiffStreamingDecoderImpl {
planned_target_file_size_ = planned_target_file_size;
}
+ void AddToTotalTargetWindowSize(size_t window_size) {
+ total_of_target_window_sizes_ += window_size;
+ }
+
// Checks to see whether the decoded target data has reached its planned size.
bool ReachedPlannedTargetFileSize() const {
if (!HasPlannedTargetFileSize()) {
@@ -459,14 +415,14 @@ class VCDiffStreamingDecoderImpl {
// each target window would not make the target file exceed that limit, and
// DecodeBody() will return RESULT_ERROR if the actual decoded output ever
// exceeds the advertised target window size.
- if (decoded_target_.size() > planned_target_file_size_) {
+ if (total_of_target_window_sizes_ > planned_target_file_size_) {
LOG(DFATAL) << "Internal error: Decoded data size "
- << decoded_target_.size()
+ << total_of_target_window_sizes_
<< " exceeds planned target file size "
<< planned_target_file_size_ << LOG_ENDL;
return true;
}
- return decoded_target_.size() == planned_target_file_size_;
+ return total_of_target_window_sizes_ == planned_target_file_size_;
}
// Checks to see whether adding a new target window of the specified size
@@ -521,27 +477,20 @@ class VCDiffStreamingDecoderImpl {
string* decoded_target() { return &decoded_target_; }
- string* annotated_output() { return &annotated_output_; }
+ bool allow_vcd_target() const { return allow_vcd_target_; }
- // The variable that determines whether annotated output is enabled is
- // delta_window_.annotated_output_. If that member is NULL, then the feature
- // is disabled.
- void EnableAnnotatedOutput() {
- delta_window_.EnableAnnotatedOutput();
+ void SetAllowVcdTarget(bool allow_vcd_target) {
+ if (start_decoding_was_called_) {
+ LOG(DFATAL) << "SetAllowVcdTarget() called after StartDecoding()"
+ << LOG_ENDL;
+ return;
+ }
+ allow_vcd_target_ = allow_vcd_target;
}
- void DisableAnnotatedOutput() {
- delta_window_.DisableAnnotatedOutput();
- }
-
- void GetAnnotatedOutput(OutputStringInterface* annotated_output) {
- // We could use annotated_output->assign(), but that method is not defined
- // for some output string types, so use clear() + append() to accomplish the
- // same thing.
- annotated_output->clear();
- annotated_output->append(annotated_output_.data(),
- annotated_output_.size());
- }
+ // Removes the contents of decoded_target_ that precede the beginning of the
+ // current window.
+ void TruncateToBeginningOfWindow();
private:
// Reads the VCDiff delta file header section as described in RFC section 4.1,
@@ -634,11 +583,10 @@ class VCDiffStreamingDecoderImpl {
size_t maximum_target_window_size_;
- // This string will always be empty until EnableAnnotatedOutput() is called,
- // at which point it will start to accumulate annotated delta windows each
- // time DecodeChunk() finishes a window. It will be cleared each time that
- // StartDecoding() is called.
- string annotated_output_;
+ // Contains the sum of the decoded sizes of all target windows seen so far,
+ // including the expected total size of the current target window in progress
+ // (even if some of the current target window has not yet been decoded.)
+ size_t total_of_target_window_sizes_;
// This value is used to ensure the correct order of calls to the interface
// functions, i.e., a single call to StartDecoding(), followed by zero or
@@ -646,6 +594,13 @@ class VCDiffStreamingDecoderImpl {
// FinishDecoding().
bool start_decoding_was_called_;
+ // If this value is true then the VCD_TARGET flag can be specified to allow
+ // the source segment to be chosen from the previously-decoded target data.
+ // (This is the default behavior.) If it is false, then specifying the
+ // VCD_TARGET flag is considered an error, and the decoder does not need to
+ // keep in memory any decoded target data prior to the current window.
+ bool allow_vcd_target_;
+
// Making these private avoids implicit copy constructor & assignment operator
VCDiffStreamingDecoderImpl(const VCDiffStreamingDecoderImpl&); // NOLINT
void operator=(const VCDiffStreamingDecoderImpl&);
@@ -658,7 +613,8 @@ const size_t VCDiffStreamingDecoderImpl::kUnlimitedBytes;
VCDiffStreamingDecoderImpl::VCDiffStreamingDecoderImpl()
: maximum_target_file_size_(kDefaultMaximumTargetFileSize),
- maximum_target_window_size_(kDefaultMaximumTargetFileSize) {
+ maximum_target_window_size_(kDefaultMaximumTargetFileSize),
+ allow_vcd_target_(true) {
delta_window_.Init(this);
Reset();
}
@@ -672,12 +628,19 @@ void VCDiffStreamingDecoderImpl::Reset() {
dictionary_size_ = 0;
vcdiff_version_code_ = '\0';
planned_target_file_size_ = kUnlimitedBytes;
+ total_of_target_window_sizes_ = 0;
addr_cache_.reset();
custom_code_table_.reset();
custom_code_table_decoder_.reset();
delta_window_.Reset();
}
+void VCDiffStreamingDecoderImpl::TruncateToBeginningOfWindow() {
+ // Conserve the data for the current window that has been partially decoded.
+ decoded_target_.erase(0, delta_window_.target_window_start_pos());
+ delta_window_.set_target_window_start_pos(0);
+}
+
void VCDiffStreamingDecoderImpl::StartDecoding(const char* dictionary_ptr,
size_t dictionary_size) {
if (start_decoding_was_called_) {
@@ -687,7 +650,6 @@ void VCDiffStreamingDecoderImpl::StartDecoding(const char* dictionary_ptr,
}
unparsed_bytes_.clear();
decoded_target_.clear(); // delta_window_.Reset() depends on this
- annotated_output_.clear();
Reset();
dictionary_ptr_ = dictionary_ptr;
dictionary_size_ = dictionary_size;
@@ -933,6 +895,11 @@ bool VCDiffStreamingDecoderImpl::DecodeChunk(
parseable_chunk.UnparsedSize());
output_tracker.AppendNewOutputText(delta_window_.TargetBytesRemaining(),
output_string);
+ if (!allow_vcd_target()) {
+ // VCD_TARGET will never be used to reference target data beyond the start
+ // of the current window, so throw away any earlier target data.
+ TruncateToBeginningOfWindow();
+ }
return true;
}
@@ -966,26 +933,28 @@ bool VCDiffStreamingDecoderImpl::TargetWindowWouldExceedSizeLimits(
if (HasPlannedTargetFileSize()) {
// The logical expression to check would be:
//
- // decoded_target_.size() + window_size > planned_target_file_size_
+ // total_of_target_window_sizes_ + window_size > planned_target_file_size_
//
// but the addition might cause an integer overflow if target_bytes_to_add
// is very large. So it is better to check target_bytes_to_add against
// the remaining planned target bytes.
size_t remaining_planned_target_file_size =
- planned_target_file_size_ - decoded_target_.size();
+ planned_target_file_size_ - total_of_target_window_sizes_;
if (window_size > remaining_planned_target_file_size) {
LOG(ERROR) << "Length of target window (" << window_size
- << " bytes) plus previous windows (" << decoded_target_.size()
+ << " bytes) plus previous windows ("
+ << total_of_target_window_sizes_
<< " bytes) would exceed planned size of "
<< planned_target_file_size_ << " bytes" << LOG_ENDL;
return true;
}
}
size_t remaining_maximum_target_bytes =
- maximum_target_file_size_ - decoded_target_.size();
+ maximum_target_file_size_ - total_of_target_window_sizes_;
if (window_size > remaining_maximum_target_bytes) {
LOG(ERROR) << "Length of target window (" << window_size
- << " bytes) plus previous windows (" << decoded_target_.size()
+ << " bytes) plus previous windows ("
+ << total_of_target_window_sizes_
<< " bytes) would exceed maximum target file size of "
<< maximum_target_file_size_ << " bytes" << LOG_ENDL;
return true;
@@ -1013,9 +982,6 @@ void VCDiffDeltaFileWindow::Reset() {
has_checksum_ = false;
expected_checksum_ = 0;
- if (annotated_output_.get()) {
- annotated_output_->clear();
- }
}
VCDiffResult VCDiffDeltaFileWindow::SetUpWindowSections(
@@ -1093,6 +1059,7 @@ VCDiffResult VCDiffDeltaFileWindow::ReadHeader(
if (!header_parser.ParseWinIndicatorAndSourceSegment(
parent_->dictionary_size(),
decoded_target->size(),
+ parent_->allow_vcd_target(),
&win_indicator,
&source_segment_length_,
&source_segment_position)) {
@@ -1125,6 +1092,7 @@ VCDiffResult VCDiffDeltaFileWindow::ReadHeader(
// The whole window header was found and parsed successfully.
found_header_ = true;
parseable_chunk->Advance(header_parser.ParsedSize());
+ parent_->AddToTotalTargetWindowSize(target_window_length_);
return RESULT_SUCCESS;
}
@@ -1138,7 +1106,7 @@ void VCDiffDeltaFileWindow::UpdateInstructionPointer(
}
}
-size_t VCDiffDeltaFileWindow::TargetBytesDecoded() {
+inline size_t VCDiffDeltaFileWindow::TargetBytesDecoded() {
return parent_->decoded_target()->size() - target_window_start_pos_;
}
@@ -1151,24 +1119,12 @@ size_t VCDiffDeltaFileWindow::TargetBytesRemaining() {
}
}
-void VCDiffDeltaFileWindow::CopyBytes(const char* data,
- size_t size,
- VCDiffAnnotationType annotation_type) {
+inline void VCDiffDeltaFileWindow::CopyBytes(const char* data, size_t size) {
parent_->decoded_target()->append(data, size);
- if (annotated_output_.get()) {
- annotated_output_->append(kAnnotationStartTags[annotation_type]);
- annotated_output_->append(data, size);
- annotated_output_->append(kAnnotationEndTags[annotation_type]);
- }
}
-void VCDiffDeltaFileWindow::RunByte(unsigned char byte, size_t size) {
+inline void VCDiffDeltaFileWindow::RunByte(unsigned char byte, size_t size) {
parent_->decoded_target()->append(size, byte);
- if (annotated_output_.get()) {
- annotated_output_->append(kAnnotationStartTags[VCD_ANNOTATION_LITERAL]);
- annotated_output_->append(size, byte);
- annotated_output_->append(kAnnotationEndTags[VCD_ANNOTATION_LITERAL]);
- }
}
VCDiffResult VCDiffDeltaFileWindow::DecodeAdd(size_t size) {
@@ -1176,7 +1132,7 @@ VCDiffResult VCDiffDeltaFileWindow::DecodeAdd(size_t size) {
return RESULT_END_OF_DATA;
}
// Write the next "size" data bytes
- CopyBytes(data_for_add_and_run_.UnparsedData(), size, VCD_ANNOTATION_LITERAL);
+ CopyBytes(data_for_add_and_run_.UnparsedData(), size);
data_for_add_and_run_.Advance(size);
return RESULT_SUCCESS;
}
@@ -1221,16 +1177,14 @@ VCDiffResult VCDiffDeltaFileWindow::DecodeCopy(size_t size,
size_t address = static_cast<size_t>(decoded_address);
if ((address + size) <= source_segment_length_) {
// Copy all data from source segment
- CopyBytes(&source_segment_ptr_[address], size, VCD_ANNOTATION_DMATCH);
+ CopyBytes(&source_segment_ptr_[address], size);
return RESULT_SUCCESS;
}
// Copy some data from target window...
if (address < source_segment_length_) {
// ... plus some data from source segment
const size_t partial_copy_size = source_segment_length_ - address;
- CopyBytes(&source_segment_ptr_[address],
- partial_copy_size,
- VCD_ANNOTATION_DMATCH);
+ CopyBytes(&source_segment_ptr_[address], partial_copy_size);
target_bytes_decoded += partial_copy_size;
address += partial_copy_size;
size -= partial_copy_size;
@@ -1242,14 +1196,12 @@ VCDiffResult VCDiffDeltaFileWindow::DecodeCopy(size_t size,
while (size > (target_bytes_decoded - address)) {
// Recursive copy that extends into the yet-to-be-copied target data
const size_t partial_copy_size = target_bytes_decoded - address;
- CopyBytes(&target_segment_ptr[address],
- partial_copy_size,
- VCD_ANNOTATION_BMATCH);
+ CopyBytes(&target_segment_ptr[address], partial_copy_size);
target_bytes_decoded += partial_copy_size;
address += partial_copy_size;
size -= partial_copy_size;
}
- CopyBytes(&target_segment_ptr[address], size, VCD_ANNOTATION_BMATCH);
+ CopyBytes(&target_segment_ptr[address], size);
return RESULT_SUCCESS;
}
@@ -1353,8 +1305,7 @@ int VCDiffDeltaFileWindow::DecodeBody(ParseableChunk* parseable_chunk) {
// end of the addresses section, which is the last section in the window.
parseable_chunk->SetPosition(addresses_for_copy_.End());
} else {
- // Interleaved format is being used. The window may have been only
- // partially decoded.
+ // Interleaved format is being used.
UpdateInstructionPointer(parseable_chunk);
}
return RESULT_SUCCESS;
@@ -1409,7 +1360,6 @@ VCDiffResult VCDiffDeltaFileWindow::DecodeWindows(
default:
break; // DecodeBody succeeded
}
- AppendAnnotatedOutput(parent_->annotated_output());
// Get ready to read a new delta window
Reset();
if (parent_->ReachedPlannedTargetFileSize()) {
@@ -1452,17 +1402,8 @@ bool VCDiffStreamingDecoder::SetMaximumTargetWindowSize(
return impl_->SetMaximumTargetWindowSize(new_maximum_target_window_size);
}
-void VCDiffStreamingDecoder::EnableAnnotatedOutput() {
- impl_->EnableAnnotatedOutput();
-}
-
-void VCDiffStreamingDecoder::DisableAnnotatedOutput() {
- impl_->DisableAnnotatedOutput();
-}
-
-void VCDiffStreamingDecoder::GetAnnotatedOutputToInterface(
- OutputStringInterface* annotated_output) {
- impl_->GetAnnotatedOutput(annotated_output);
+void VCDiffStreamingDecoder::SetAllowVcdTarget(bool allow_vcd_target) {
+ impl_->SetAllowVcdTarget(allow_vcd_target);
}
bool VCDiffDecoder::DecodeToInterface(const char* dictionary_ptr,
diff --git a/src/vcdecoder1_test.cc b/src/vcdecoder1_test.cc
index 7c825d7..7eef598 100644
--- a/src/vcdecoder1_test.cc
+++ b/src/vcdecoder1_test.cc
@@ -131,18 +131,6 @@ TEST_F(VCDiffStandardDecoderTest, FuzzBits) {
}
}
-TEST_F(VCDiffStandardDecoderTest, CheckAnnotatedOutput) {
- decoder_.EnableAnnotatedOutput();
- decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
- EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(),
- delta_file_.size(),
- &output_));
- EXPECT_TRUE(decoder_.FinishDecoding());
- string annotated_output;
- decoder_.GetAnnotatedOutput(&annotated_output);
- EXPECT_EQ(expected_annotated_target_, annotated_output);
-}
-
// Change each element of the delta file window to an erroneous value
// and make sure it's caught as an error.
diff --git a/src/vcdecoder2_test.cc b/src/vcdecoder2_test.cc
index 7f24a78..74dc3f8 100644
--- a/src/vcdecoder2_test.cc
+++ b/src/vcdecoder2_test.cc
@@ -46,6 +46,16 @@ TEST_F(VCDiffStandardDecoderTestByteByByte, Decode) {
EXPECT_EQ(expected_target_, output_);
}
+TEST_F(VCDiffStandardDecoderTestByteByByte, DecodeNoVcdTarget) {
+ decoder_.SetAllowVcdTarget(false);
+ decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
+ for (size_t i = 0; i < delta_file_.size(); ++i) {
+ EXPECT_TRUE(decoder_.DecodeChunk(&delta_file_[i], 1, &output_));
+ }
+ EXPECT_TRUE(decoder_.FinishDecoding());
+ EXPECT_EQ(expected_target_, output_);
+}
+
// Remove one byte from the length of the chunk to process, and
// verify that an error is returned for FinishDecoding().
TEST_F(VCDiffStandardDecoderTestByteByByte, FinishAfterDecodingPartialWindow) {
@@ -164,18 +174,6 @@ TEST_F(VCDiffStandardDecoderTestByteByByte, FuzzBits) {
}
}
-TEST_F(VCDiffStandardDecoderTestByteByByte, CheckAnnotatedOutput) {
- decoder_.EnableAnnotatedOutput();
- decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
- for (size_t i = 0; i < delta_file_.size(); ++i) {
- EXPECT_TRUE(decoder_.DecodeChunk(&delta_file_[i], 1, &output_));
- }
- EXPECT_TRUE(decoder_.FinishDecoding());
- string annotated_output;
- decoder_.GetAnnotatedOutput(&annotated_output);
- EXPECT_EQ(expected_annotated_target_, annotated_output);
-}
-
// Change each element of the delta file window to an erroneous value
// and make sure it's caught as an error.
diff --git a/src/vcdecoder3_test.cc b/src/vcdecoder3_test.cc
index 3a0673c..62b47be 100644
--- a/src/vcdecoder3_test.cc
+++ b/src/vcdecoder3_test.cc
@@ -235,18 +235,6 @@ TEST_F(VCDiffInterleavedDecoderTest, FuzzBitsWithChecksum) {
}
}
-TEST_F(VCDiffInterleavedDecoderTest, CheckAnnotatedOutput) {
- decoder_.EnableAnnotatedOutput();
- decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
- EXPECT_TRUE(decoder_.DecodeChunk(delta_file_.data(),
- delta_file_.size(),
- &output_));
- EXPECT_TRUE(decoder_.FinishDecoding());
- string annotated_output;
- decoder_.GetAnnotatedOutput(&annotated_output);
- EXPECT_EQ(expected_annotated_target_, annotated_output);
-}
-
TEST_F(VCDiffInterleavedDecoderTest, CopyMoreThanExpectedTarget) {
delta_file_[delta_file_header_.size() + 0x0C] =
FirstByteOfStringLength(kExpectedTarget);
@@ -793,18 +781,6 @@ TEST_F(VCDiffInterleavedDecoderTestByteByByte, FuzzBitsWithChecksum) {
}
}
-TEST_F(VCDiffInterleavedDecoderTestByteByByte, CheckAnnotatedOutput) {
- decoder_.EnableAnnotatedOutput();
- decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
- for (size_t i = 0; i < delta_file_.size(); ++i) {
- EXPECT_TRUE(decoder_.DecodeChunk(&delta_file_[i], 1, &output_));
- }
- EXPECT_TRUE(decoder_.FinishDecoding());
- string annotated_output;
- decoder_.GetAnnotatedOutput(&annotated_output);
- EXPECT_EQ(expected_annotated_target_, annotated_output);
-}
-
TEST_F(VCDiffInterleavedDecoderTestByteByByte,
CopyInstructionsShouldFailIfNoSourceSegment) {
// Replace the Win_Indicator and the source size and source offset with a
diff --git a/src/vcdecoder4_test.cc b/src/vcdecoder4_test.cc
index fa8cb43..e1fc90f 100644
--- a/src/vcdecoder4_test.cc
+++ b/src/vcdecoder4_test.cc
@@ -121,7 +121,6 @@ class VCDiffStandardWindowDecoderTest : public VCDiffDecoderTest {
virtual ~VCDiffStandardWindowDecoderTest() {}
private:
- static const char kExpectedAnnotatedTarget[];
static const char kWindowBody[];
};
@@ -241,26 +240,8 @@ const char VCDiffStandardWindowDecoderTest::kWindowBody[] = {
// No addresses for COPYs
};
-// The window encoding should produce the same target file as the standard
-// encoding, but the annotated target will be different because some of the
-// <bmatch> tags (copying from the previously decoded data in the current target
-// window) are changed to <dmatch> (copying from the previously decoded data in
-// another target window, which is used as the source window for the current
-// delta window.)
-const char VCDiffStandardWindowDecoderTest::kExpectedAnnotatedTarget[] =
- "<dmatch>\"Just the place for a Snark!</dmatch>"
- "<literal> I have said it twice:\n"
- "That alone should encourage the crew.\n</literal>"
- "<dmatch>Just the place for a Snark! I have said it t</dmatch>"
- "<literal>hr</literal>"
- "<dmatch>ice:\n</dmatch>"
- "<literal>What I te</literal>"
- "<literal>ll</literal>"
- "<literal> you three times is true.\"\n</literal>";
-
VCDiffStandardWindowDecoderTest::VCDiffStandardWindowDecoderTest() {
UseStandardFileHeader();
- expected_annotated_target_.assign(kExpectedAnnotatedTarget);
delta_window_body_.assign(kWindowBody, sizeof(kWindowBody));
}
@@ -301,6 +282,21 @@ TEST_F(VCDiffStandardWindowDecoderTest, DecodeBreakInFourthWindowHeader) {
EXPECT_EQ(expected_target_, output_chunk1 + output_chunk2 + output_chunk3);
}
+TEST_F(VCDiffStandardWindowDecoderTest, DecodeChunkNoVcdTargetAllowed) {
+ decoder_.SetAllowVcdTarget(false);
+ // Parse file header + first two windows.
+ const size_t chunk_1_size = delta_file_header_.size() + 83;
+ // The third window begins with Win_Indicator = VCD_TARGET which is not
+ // allowed.
+ CHECK_EQ(VCD_TARGET, static_cast<unsigned char>(delta_file_[chunk_1_size]));
+ decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
+ EXPECT_TRUE(decoder_.DecodeChunk(&delta_file_[0], chunk_1_size, &output_));
+ // Just parsing one more byte (the VCD_TARGET) should result in an error.
+ EXPECT_FALSE(decoder_.DecodeChunk(&delta_file_[chunk_1_size], 1, &output_));
+ // The target data for the first two windows should have been output.
+ EXPECT_EQ(expected_target_.substr(0, 89), output_);
+}
+
TEST_F(VCDiffStandardWindowDecoderTest, DecodeInTwoParts) {
const size_t delta_file_size = delta_file_.size();
for (size_t i = 1; i < delta_file_size; i++) {
@@ -382,6 +378,7 @@ TEST_F(VCDiffStandardWindowDecoderTest, TargetExceedsFileSizeLimit) {
typedef VCDiffStandardWindowDecoderTest
VCDiffStandardWindowDecoderTestByteByByte;
+
TEST_F(VCDiffStandardWindowDecoderTestByteByByte, Decode) {
decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
for (size_t i = 0; i < delta_file_.size(); ++i) {
@@ -391,6 +388,32 @@ TEST_F(VCDiffStandardWindowDecoderTestByteByByte, Decode) {
EXPECT_EQ(expected_target_, output_);
}
+TEST_F(VCDiffStandardWindowDecoderTestByteByByte, DecodeExplicitVcdTarget) {
+ decoder_.SetAllowVcdTarget(true);
+ decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
+ for (size_t i = 0; i < delta_file_.size(); ++i) {
+ EXPECT_TRUE(decoder_.DecodeChunk(&delta_file_[i], 1, &output_));
+ }
+ EXPECT_TRUE(decoder_.FinishDecoding());
+ EXPECT_EQ(expected_target_, output_);
+}
+
+// Windows 3 and 4 use the VCD_TARGET flag, so decoder should signal an error.
+TEST_F(VCDiffStandardWindowDecoderTestByteByByte, DecodeNoVcdTarget) {
+ decoder_.SetAllowVcdTarget(false);
+ decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
+ size_t i = 0;
+ for (; i < delta_file_.size(); ++i) {
+ if (!decoder_.DecodeChunk(&delta_file_[i], 1, &output_)) {
+ break;
+ }
+ }
+ // The failure should occur just at the position of the first VCD_TARGET.
+ EXPECT_EQ(delta_file_header_.size() + 83, i);
+ // The target data for the first two windows should have been output.
+ EXPECT_EQ(expected_target_.substr(0, 89), output_);
+}
+
// Divides up the interleaved encoding into eight separate delta file windows.
class VCDiffInterleavedWindowDecoderTest
: public VCDiffStandardWindowDecoderTest {
@@ -561,6 +584,22 @@ TEST_F(VCDiffInterleavedWindowDecoderTestByteByByte, Decode) {
EXPECT_EQ(expected_target_, output_);
}
+// Windows 3 and 4 use the VCD_TARGET flag, so decoder should signal an error.
+TEST_F(VCDiffInterleavedWindowDecoderTestByteByByte, DecodeNoVcdTarget) {
+ decoder_.SetAllowVcdTarget(false);
+ decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
+ size_t i = 0;
+ for (; i < delta_file_.size(); ++i) {
+ if (!decoder_.DecodeChunk(&delta_file_[i], 1, &output_)) {
+ break;
+ }
+ }
+ // The failure should occur just at the position of the first VCD_TARGET.
+ EXPECT_EQ(delta_file_header_.size() + 83, i);
+ // The target data for the first two windows should have been output.
+ EXPECT_EQ(expected_target_.substr(0, 89), output_);
+}
+
// The original version of VCDiffDecoder did not allow the caller to modify the
// contents of output_string between calls to DecodeChunk(). That restriction
// has been removed. Verify that the same result is still produced if the
@@ -596,7 +635,6 @@ TEST_F(VCDiffInterleavedWindowDecoderTest, OutputStringIsPreserved) {
class VCDiffStandardCrossDecoderTest : public VCDiffDecoderTest {
protected:
static const char kExpectedTarget[];
- static const char kExpectedAnnotatedTarget[];
static const char kWindowHeader[];
static const char kWindowBody[];
@@ -637,19 +675,11 @@ const char VCDiffStandardCrossDecoderTest::kExpectedTarget[] =
"Spiders in his hair.\n"
"Spiders in the air.\n";
-const char VCDiffStandardCrossDecoderTest::kExpectedAnnotatedTarget[] =
- "<literal>Spiders</literal>"
- "<dmatch> in his hair.\n</dmatch>" // crosses source-target boundary
- "<bmatch>Spiders in </bmatch>"
- "<dmatch>the </dmatch>"
- "<bmatch>air.\n</bmatch>";
-
VCDiffStandardCrossDecoderTest::VCDiffStandardCrossDecoderTest() {
UseStandardFileHeader();
delta_window_header_.assign(kWindowHeader, sizeof(kWindowHeader));
delta_window_body_.assign(kWindowBody, sizeof(kWindowBody));
expected_target_.assign(kExpectedTarget);
- expected_annotated_target_.assign(kExpectedAnnotatedTarget);
}
TEST_F(VCDiffStandardCrossDecoderTest, Decode) {
@@ -979,6 +1009,16 @@ TEST_F(VCDiffCustomCodeTableDecoderTestByteByByte, IncompleteCustomCodeTable) {
EXPECT_EQ("", output_);
}
+TEST_F(VCDiffCustomCodeTableDecoderTestByteByByte, CustomTableNoVcdTarget) {
+ decoder_.SetAllowVcdTarget(false);
+ decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
+ for (size_t i = 0; i < delta_file_.size(); ++i) {
+ EXPECT_TRUE(decoder_.DecodeChunk(&delta_file_[i], 1, &output_));
+ }
+ EXPECT_TRUE(decoder_.FinishDecoding());
+ EXPECT_EQ(expected_target_, output_);
+}
+
#ifdef GTEST_HAS_DEATH_TEST
typedef VCDiffCustomCodeTableDecoderTest VCDiffCustomCodeTableDecoderDeathTest;
@@ -998,6 +1038,25 @@ TEST_F(VCDiffCustomCodeTableDecoderDeathTest, BadCustomCacheSizes) {
"cache");
EXPECT_EQ("", output_);
}
+
+TEST_F(VCDiffCustomCodeTableDecoderDeathTest, BadCustomCacheSizesNoVcdTarget) {
+ decoder_.SetAllowVcdTarget(false);
+ delta_file_header_.assign(kFileHeader, sizeof(kFileHeader));
+ delta_file_header_.push_back(0x81); // NEAR cache size (top bit)
+ delta_file_header_.push_back(0x10); // NEAR cache size (custom value 0x90)
+ delta_file_header_.push_back(0x81); // SAME cache size (top bit)
+ delta_file_header_.push_back(0x10); // SAME cache size (custom value 0x90)
+ delta_file_header_.append(kEncodedCustomCodeTable,
+ sizeof(kEncodedCustomCodeTable));
+ InitializeDeltaFile();
+ decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
+ EXPECT_DEBUG_DEATH(EXPECT_FALSE(decoder_.DecodeChunk(delta_file_.data(),
+ delta_file_.size(),
+ &output_)),
+ "cache");
+ EXPECT_EQ("", output_);
+}
+
#endif // GTEST_HAS_DEATH_TEST
} // namespace open_vcdiff
diff --git a/src/vcdecoder5_test.cc b/src/vcdecoder5_test.cc
new file mode 100644
index 0000000..641a0d7
--- /dev/null
+++ b/src/vcdecoder5_test.cc
@@ -0,0 +1,113 @@
+// Copyright 2008 Google Inc.
+// Author: Lincoln Smith
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <config.h>
+#include "google/vcdecoder.h"
+#include <string>
+#include "codetable.h"
+#include "testing.h"
+#include "vcdecoder_test.h"
+
+namespace open_vcdiff {
+namespace {
+
+
+// Decode an encoding that uses a RUN instruction to allocate 64MB.
+class VCDiffLargeTargetTest : public VCDiffDecoderTest {
+ protected:
+ VCDiffLargeTargetTest();
+ virtual ~VCDiffLargeTargetTest() {}
+
+ static const char kLargeRunWindow[];
+};
+
+const char VCDiffLargeTargetTest::kLargeRunWindow[] = {
+ 0x00, // Win_Indicator: no source segment
+ 0x0E, // Length of the delta encoding
+ 0xA0, // Size of the target window (0x4000000)
+ 0x80, // Size of the target window cont'd
+ 0x80, // Size of the target window cont'd
+ 0x00, // Size of the target window cont'd
+ 0x00, // Delta_indicator (no compression)
+ 0x00, // length of data for ADDs and RUNs
+ 0x06, // length of instructions section
+ 0x00, // length of addresses for COPYs
+ // Interleaved segment
+ 0x00, // VCD_RUN size 0
+ 0xA0, // Size of RUN (0x4000000)
+ 0x80, // Size of RUN cont'd
+ 0x80, // Size of RUN cont'd
+ 0x00, // Size of RUN cont'd
+ 0xBE, // Data for RUN
+};
+
+VCDiffLargeTargetTest::VCDiffLargeTargetTest() {
+ UseInterleavedFileHeader();
+}
+
+// Ensure that, with allow_vcd_target set to false, we can decode any number of
+// 64MB windows without running out of memory.
+TEST_F(VCDiffLargeTargetTest, Decode) {
+ // 50 x 64MB = 3.2GB, which should be too large if memory usage accumulates
+ // during each iteration.
+ const int kIterations = 50;
+ decoder_.SetAllowVcdTarget(false);
+ decoder_.SetMaximumTargetFileSize(0x4000000UL * 50);
+ decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
+ EXPECT_TRUE(decoder_.DecodeChunk(delta_file_header_.data(),
+ delta_file_header_.size(),
+ &output_));
+ EXPECT_EQ("", output_);
+ for (int i = 0; i < kIterations; i++) {
+ EXPECT_TRUE(decoder_.DecodeChunk(kLargeRunWindow, sizeof(kLargeRunWindow),
+ &output_));
+ EXPECT_EQ(0x4000000U, output_.size());
+ EXPECT_EQ(static_cast<char>(0xBE), output_[0]);
+ EXPECT_EQ(static_cast<char>(0xBE),
+ output_[output_.size() / 2]); // middle element
+ EXPECT_EQ(static_cast<char>(0xBE),
+ output_[output_.size() - 1]); // last element
+ output_.clear();
+ }
+ EXPECT_TRUE(decoder_.FinishDecoding());
+}
+
+// If we don't increase the maximum target file size first, the same test should
+// produce an error.
+TEST_F(VCDiffLargeTargetTest, DecodeReachesMaxFileSize) {
+ decoder_.SetAllowVcdTarget(false);
+ decoder_.StartDecoding(dictionary_.data(), dictionary_.size());
+ EXPECT_TRUE(decoder_.DecodeChunk(delta_file_header_.data(),
+ delta_file_header_.size(),
+ &output_));
+ EXPECT_EQ("", output_);
+ // The default maximum target file size is 64MB, which just matches the target
+ // data produced by a single iteration.
+ EXPECT_TRUE(decoder_.DecodeChunk(kLargeRunWindow, sizeof(kLargeRunWindow),
+ &output_));
+ EXPECT_EQ(0x4000000U, output_.size());
+ EXPECT_EQ(static_cast<char>(0xBE), output_[0]);
+ EXPECT_EQ(static_cast<char>(0xBE),
+ output_[output_.size() / 2]); // middle element
+ EXPECT_EQ(static_cast<char>(0xBE),
+ output_[output_.size() - 1]); // last element
+ output_.clear();
+ // Trying to decode a second window should exceed the target file size limit.
+ EXPECT_FALSE(decoder_.DecodeChunk(kLargeRunWindow, sizeof(kLargeRunWindow),
+ &output_));
+}
+
+} // unnamed namespace
+} // namespace open_vcdiff
diff --git a/src/vcdecoder_test.cc b/src/vcdecoder_test.cc
index 0faa248..e4681a9 100644
--- a/src/vcdecoder_test.cc
+++ b/src/vcdecoder_test.cc
@@ -52,21 +52,9 @@ const char VCDiffDecoderTest::kExpectedTarget[] =
"Just the place for a Snark! I have said it thrice:\n"
"What I tell you three times is true.\"\n";
-const char VCDiffDecoderTest::kExpectedAnnotatedTarget[] =
- "<dmatch>\"Just the place for a Snark!</dmatch>"
- "<literal> I have said it twice:\n"
- "That alone should encourage the crew.\n</literal>"
- "<bmatch>Just the place for a Snark! I have said it t</bmatch>"
- "<literal>hr</literal>"
- "<bmatch>ice:\n</bmatch>"
- "<literal>What I te</literal>"
- "<literal>ll</literal>"
- "<literal> you three times is true.\"\n</literal>";
-
VCDiffDecoderTest::VCDiffDecoderTest() : fuzzer_(0), fuzzed_byte_position_(0) {
dictionary_ = kDictionary;
expected_target_ = kExpectedTarget;
- expected_annotated_target_ = kExpectedAnnotatedTarget;
}
void VCDiffDecoderTest::SetUp() {
diff --git a/src/vcdecoder_test.h b/src/vcdecoder_test.h
index 3748c0d..59ba703 100644
--- a/src/vcdecoder_test.h
+++ b/src/vcdecoder_test.h
@@ -35,7 +35,6 @@ class VCDiffDecoderTest : public testing::Test {
static const char kDictionary[];
static const char kExpectedTarget[];
- static const char kExpectedAnnotatedTarget[];
VCDiffDecoderTest();
@@ -119,7 +118,6 @@ class VCDiffDecoderTest : public testing::Test {
// kDictionary, kExpectedTarget, etc.)
string dictionary_;
string expected_target_;
- string expected_annotated_target_;
// The components that will be used to construct delta_file_.
string delta_file_header_;
diff --git a/src/vcdiff_main.cc b/src/vcdiff_main.cc
index b36b4b4..d1500df 100644
--- a/src/vcdiff_main.cc
+++ b/src/vcdiff_main.cc
@@ -38,12 +38,7 @@ using std::string;
using google::GetCommandLineFlagInfoOrDie;
using google::ShowUsageWithFlagsRestrict;
-// The buffer size, which determines the maximum allowable size
-// of a target window, based on how much memory can be allocated.
-// Both of these can be increased (and the default can be decreased)
-// using the --buffersize flag.
-static const size_t kDefaultBufferSize = 1 << 20; // 1 MB
-static const size_t kMaxBufferSize = 1 << 26; // 64 MB
+static const size_t kDefaultMaxTargetSize = 1 << 26; // 64 MB
// Definitions of command-line flags
DEFINE_string(dictionary, "",
@@ -53,17 +48,22 @@ DEFINE_string(target, "",
DEFINE_string(delta, "",
"Encoded delta file (default is stdout for encode, "
"stdin for decode");
-DEFINE_uint64(buffersize, kDefaultBufferSize,
+// --buffersize is the maximum allowable size of a target window.
+// This value may be increased if there is sufficient memory available.
+DEFINE_uint64(buffersize, 1 << 20, // 1 MB
"Buffer size for reading input file");
+DEFINE_bool(allow_vcd_target, true,
+ "If false, the decoder issues an error when the VCD_TARGET flag "
+ "is encountered");
DEFINE_bool(checksum, false,
"Include an Adler32 checksum of the target data when encoding");
DEFINE_bool(interleaved, false, "Use interleaved format");
DEFINE_bool(stats, false, "Report compression percentage");
DEFINE_bool(target_matches, false, "Find duplicate strings in target data"
" as well as dictionary data");
-DEFINE_uint64(max_target_file_size, kMaxBufferSize,
+DEFINE_uint64(max_target_file_size, kDefaultMaxTargetSize,
"Maximum target file size allowed by decoder");
-DEFINE_uint64(max_target_window_size, kMaxBufferSize,
+DEFINE_uint64(max_target_window_size, kDefaultMaxTargetSize,
"Maximum target window size allowed by decoder");
static const char* const kUsageString =
@@ -177,8 +177,7 @@ class VCDiffFileBasedCoder {
// input_buffer_ will be the value specified by the --buffersize option.
// If the input comes from a file, then the buffer will be allocated to match
// the file size, if possible. However, the buffer will not exceed
- // kMaxBufferSize bytes in length, unless the user specifies the --buffersize
- // option to override that limit.
+ // --buffersize bytes in length.
std::vector<char> input_buffer_;
// A memory buffer used to load the output file into memory for comparison
@@ -276,10 +275,7 @@ bool VCDiffFileBasedCoder::OpenFileForReading(const string& file_name,
<< file_name << "': " << strerror(errno) << std::endl;
return false;
}
- buffer_size = kMaxBufferSize;
- if (FLAGS_buffersize > buffer_size) {
- buffer_size = static_cast<size_t>(FLAGS_buffersize);
- }
+ buffer_size = static_cast<size_t>(FLAGS_buffersize);
if (file_size < buffer_size) {
// Allocate just enough memory to store the entire file
buffer_size = file_size;
@@ -455,6 +451,7 @@ bool VCDiffFileBasedCoder::Decode() {
static_cast<size_t>(FLAGS_max_target_file_size));
decoder.SetMaximumTargetWindowSize(
static_cast<size_t>(FLAGS_max_target_window_size));
+ decoder.SetAllowVcdTarget(FLAGS_allow_vcd_target);
string output;
size_t input_size = 0;
size_t output_size = 0;
@@ -518,6 +515,7 @@ bool VCDiffFileBasedCoder::DecodeAndCompare() {
static_cast<size_t>(FLAGS_max_target_file_size));
decoder.SetMaximumTargetWindowSize(
static_cast<size_t>(FLAGS_max_target_window_size));
+ decoder.SetAllowVcdTarget(FLAGS_allow_vcd_target);
string output;
size_t input_size = 0;
size_t output_size = 0;
diff --git a/src/vcdiff_test.sh b/src/vcdiff_test.sh
index 8d474a9..6b5179b 100755
--- a/src/vcdiff_test.sh
+++ b/src/vcdiff_test.sh
@@ -433,10 +433,13 @@ echo "Test 33 ok";
# open-vcdiff bug 8 (http://code.google.com/p/open-vcdiff/issues/detail?id=8)
# A malicious encoding that tries to produce a 4GB target file made up of 64
# windows, each window having a size of 64MB.
-# Start by limiting memory usage to 96MB per process, so the test doesn't take
-# forever to run out of memory.
-ulimit -d 98304
-ulimit -m 98304
+# Limit memory usage to 256MB per process, so the test doesn't take forever
+# to run out of memory.
+OLD_ULIMIT=$(ulimit -v)
+echo "Old ulimit: $OLD_ULIMIT"
+ulimit -S -v 262144
+echo "New ulimit: $(ulimit -v)"
+
$VCDIFF $VCD_OPTIONS \
decode -dictionary $DICTIONARY_FILE \
-delta $MALICIOUS_ENCODING \
@@ -455,6 +458,8 @@ $VCDIFF $VCD_OPTIONS \
exit 1; }
echo "Test 35 ok";
+ulimit -S -v $OLD_ULIMIT
+
# Decoding a small target with the -max_target_file_size option should succeed.
$VCDIFF $VCD_OPTIONS \
test -dictionary $DICTIONARY_FILE \
@@ -477,4 +482,47 @@ echo "Test 37 ok";
rm $DELTA_FILE
+# Test using -allow_vcd_target=false
+$VCDIFF $VCD_OPTIONS \
+ encode -dictionary $DICTIONARY_FILE \
+ -target $TARGET_FILE \
+ -delta $DELTA_FILE \
+ -allow_vcd_target=false \
+|| { echo "Encode with -allow_vcd_target=false failed"; \
+ exit 1; }
+$VCDIFF $VCD_OPTIONS \
+ decode -dictionary $DICTIONARY_FILE \
+ -delta $DELTA_FILE \
+ -target $OUTPUT_TARGET_FILE \
+ -allow_vcd_target=false \
+|| { echo "Decode with -allow_vcd_target=false failed"; \
+ exit 1; }
+cmp $TARGET_FILE $OUTPUT_TARGET_FILE \
+|| { echo "Decoded target does not match original"; \
+ exit 1; }
+echo "Test 38 ok";
+
+rm $DELTA_FILE
+rm $OUTPUT_TARGET_FILE
+
+# Test using -allow_vcd_target=true
+$VCDIFF $VCD_OPTIONS \
+ encode -dictionary $DICTIONARY_FILE \
+ -target $TARGET_FILE \
+ -delta $DELTA_FILE \
+ -allow_vcd_target=true \
+|| { echo "Encode with -allow_vcd_target=true failed"; \
+ exit 1; }
+$VCDIFF $VCD_OPTIONS \
+ decode -dictionary $DICTIONARY_FILE \
+ -delta $DELTA_FILE \
+ -target $OUTPUT_TARGET_FILE \
+ -allow_vcd_target=true \
+|| { echo "Decode with -allow_vcd_target=true failed"; \
+ exit 1; }
+cmp $TARGET_FILE $OUTPUT_TARGET_FILE \
+|| { echo "Decoded target does not match original"; \
+ exit 1; }
+echo "Test 39 ok";
+
echo "PASS"
diff --git a/src/vcencoder_test.cc b/src/vcencoder_test.cc
index 752ab80..b32c42a 100644
--- a/src/vcencoder_test.cc
+++ b/src/vcencoder_test.cc
@@ -348,6 +348,18 @@ TEST_F(VCDiffEncoderTest, EncodeDecodeFixedChunkSizes) {
}
}
+// If --allow_vcd_target=false is specified, the decoder will throw away some of
+// the internally-stored decoded target beyond the current window. Try
+// different numbers of encoded window sizes to make sure that this behavior
+// does not affect the results.
+TEST_F(VCDiffEncoderTest, EncodeDecodeFixedChunkSizesNoVcdTarget) {
+ decoder_.SetAllowVcdTarget(false);
+ // Loop through all possible chunk sizes
+ for (size_t chunk_size = 1; chunk_size < strlen(kTarget); ++chunk_size) {
+ TestWithFixedChunkSize(chunk_size);
+ }
+}
+
// Splits the text to be encoded into fixed-size chunks. Encodes each
// chunk and puts it into a vector of strings. Then decodes each string
// in the vector and appends the result into result_target_.
diff --git a/vsprojects/config.h b/vsprojects/config.h
index b4a8984..0c5ef01 100644
--- a/vsprojects/config.h
+++ b/vsprojects/config.h
@@ -45,19 +45,19 @@
#define PACKAGE_NAME "open-vcdiff"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "open-vcdiff 0.5"
+#define PACKAGE_STRING "open-vcdiff 0.6"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "open-vcdiff"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "0.5"
+#define PACKAGE_VERSION "0.6"
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Version number of package */
-#define VERSION "0.5"
+#define VERSION "0.6"
// These functions have different names, but the same behavior,
// for Visual Studio.
diff --git a/vsprojects/open-vcdiff.sln b/vsprojects/open-vcdiff.sln
index ec1defd..116d632 100644
--- a/vsprojects/open-vcdiff.sln
+++ b/vsprojects/open-vcdiff.sln
@@ -15,99 +15,92 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdenc", "vcdenc\vcdenc.vcp
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdiff", "vcdiff\vcdiff.vcproj", "{D11A04C5-0B05-4E08-AAB2-8BC64DE56A84}"
ProjectSection(ProjectDependencies) = postProject
- {C498DA26-B014-44BD-A387-EB6C3CE16FCF} = {C498DA26-B014-44BD-A387-EB6C3CE16FCF}
- {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
{A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
+ {C498DA26-B014-44BD-A387-EB6C3CE16FCF} = {C498DA26-B014-44BD-A387-EB6C3CE16FCF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "addrcache_test", "addrcache_test\addrcache_test.vcproj", "{23DDE803-E417-41CE-9D24-B823A990D0FC}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
{A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "headerparser_test", "headerparser_test\headerparser_test.vcproj", "{B1995AAE-F24B-4079-8F6B-8333ED6B13A6}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
- {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
- {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdecoder_test", "vcdecoder_test\vcdecoder_test.vcproj", "{BA30F970-A2B3-4D04-81D5-B5C73794BEDE}"
- ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
{A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
{1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcencoder_test", "vcencoder_test\vcencoder_test.vcproj", "{CB30C697-D33C-4410-94DE-D7CC481A5284}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
- {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
- {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
{C498DA26-B014-44BD-A387-EB6C3CE16FCF} = {C498DA26-B014-44BD-A387-EB6C3CE16FCF}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "output_string_test", "output_string_test\output_string_test.vcproj", "{3E9B97B7-7C57-44EB-BBBC-2C3B56595F0E}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
{A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blockhash_test", "blockhash_test\blockhash_test.vcproj", "{11C53677-B705-42C2-B50F-87F5E599ABF1}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
- {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
{C498DA26-B014-44BD-A387-EB6C3CE16FCF} = {C498DA26-B014-44BD-A387-EB6C3CE16FCF}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "codetable_test", "codetable_test\codetable_test.vcproj", "{43DD2BA4-493D-49B7-825E-10279C89F0F9}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
{A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "decodetable_test", "decodetable_test\decodetable_test.vcproj", "{CCA8B377-0D14-4AD3-B5D8-7DD935A2D6D8}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
- {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
{1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "encodetable_test", "encodetable_test\encodetable_test.vcproj", "{893DCA29-2740-4C49-993F-42A9B1EF365B}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
- {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
{C498DA26-B014-44BD-A387-EB6C3CE16FCF} = {C498DA26-B014-44BD-A387-EB6C3CE16FCF}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rolling_hash_test", "rolling_hash_test\rolling_hash_test.vcproj", "{A9879052-0DD1-413D-B631-A82044BFCF1A}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
- {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
{C498DA26-B014-44BD-A387-EB6C3CE16FCF} = {C498DA26-B014-44BD-A387-EB6C3CE16FCF}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "varint_bigendian_test", "varint_bigendian_test\varint_bigendian_test.vcproj", "{9A887AB5-E053-4ED6-870B-3330A1F4ED83}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
{A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdiffengine_test", "vcdiffengine_test\vcdiffengine_test.vcproj", "{890398AC-020D-48C7-A054-6E03B1403AC7}"
ProjectSection(ProjectDependencies) = postProject
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
- {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
{C498DA26-B014-44BD-A387-EB6C3CE16FCF} = {C498DA26-B014-44BD-A387-EB6C3CE16FCF}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "gtest\gtest.vcproj", "{429392EB-55A9-4344-913C-DEE5F02B538D}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "instruction_map_test", "instruction_map_test\instruction_map_test.vcproj", "{ABFF6897-3B7F-41FB-BB70-15E47AC81856}"
ProjectSection(ProjectDependencies) = postProject
- {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
- {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
{C498DA26-B014-44BD-A387-EB6C3CE16FCF} = {C498DA26-B014-44BD-A387-EB6C3CE16FCF}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdiff_test", "vcdiff_test\vcdiff_test.vcproj", "{EDC1569F-95B3-4536-9674-6AD9A0ADAAF4}"
@@ -115,6 +108,48 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdiff_test", "vcdiff_test\
{D11A04C5-0B05-4E08-AAB2-8BC64DE56A84} = {D11A04C5-0B05-4E08-AAB2-8BC64DE56A84}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdecoder1_test", "vcdecoder1_test\vcdecoder1_test.vcproj", "{BA30F970-A2B3-4D04-81D5-B5C73794BEDE}"
+ ProjectSection(ProjectDependencies) = postProject
+ {30B18111-3E93-4EA5-BEA9-17B08BC8E49D} = {30B18111-3E93-4EA5-BEA9-17B08BC8E49D}
+ {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdecoder2_test", "vcdecoder2_test\vcdecoder2_test.vcproj", "{DD8527B2-44B9-46A8-9E65-3A83A10418C9}"
+ ProjectSection(ProjectDependencies) = postProject
+ {30B18111-3E93-4EA5-BEA9-17B08BC8E49D} = {30B18111-3E93-4EA5-BEA9-17B08BC8E49D}
+ {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdecoder3_test", "vcdecoder3_test\vcdecoder3_test.vcproj", "{6927AEDE-A96D-42FD-9431-2007EAB11CB4}"
+ ProjectSection(ProjectDependencies) = postProject
+ {30B18111-3E93-4EA5-BEA9-17B08BC8E49D} = {30B18111-3E93-4EA5-BEA9-17B08BC8E49D}
+ {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdecoder4_test", "vcdecoder4_test\vcdecoder4_test.vcproj", "{02A1361F-ED8F-4280-8475-E79C8605D5A2}"
+ ProjectSection(ProjectDependencies) = postProject
+ {30B18111-3E93-4EA5-BEA9-17B08BC8E49D} = {30B18111-3E93-4EA5-BEA9-17B08BC8E49D}
+ {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdecoder5_test", "vcdecoder5_test\vcdecoder5_test.vcproj", "{033F203E-3AB6-4444-874A-F0EEE6938FEC}"
+ ProjectSection(ProjectDependencies) = postProject
+ {30B18111-3E93-4EA5-BEA9-17B08BC8E49D} = {30B18111-3E93-4EA5-BEA9-17B08BC8E49D}
+ {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD} = {1066F2E6-3F29-4D3D-9BBA-FD1D360099DD}
+ {429392EB-55A9-4344-913C-DEE5F02B538D} = {429392EB-55A9-4344-913C-DEE5F02B538D}
+ {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246} = {A49D16EE-E69E-4B5D-9CB7-ABEF79BB4246}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vcdecoder_test_common", "vcdecoder_test_common\vcdecoder_test_common.vcproj", "{30B18111-3E93-4EA5-BEA9-17B08BC8E49D}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -145,10 +180,6 @@ Global
{B1995AAE-F24B-4079-8F6B-8333ED6B13A6}.Debug|Win32.Build.0 = Debug|Win32
{B1995AAE-F24B-4079-8F6B-8333ED6B13A6}.Release|Win32.ActiveCfg = Release|Win32
{B1995AAE-F24B-4079-8F6B-8333ED6B13A6}.Release|Win32.Build.0 = Release|Win32
- {BA30F970-A2B3-4D04-81D5-B5C73794BEDE}.Debug|Win32.ActiveCfg = Debug|Win32
- {BA30F970-A2B3-4D04-81D5-B5C73794BEDE}.Debug|Win32.Build.0 = Debug|Win32
- {BA30F970-A2B3-4D04-81D5-B5C73794BEDE}.Release|Win32.ActiveCfg = Release|Win32
- {BA30F970-A2B3-4D04-81D5-B5C73794BEDE}.Release|Win32.Build.0 = Release|Win32
{CB30C697-D33C-4410-94DE-D7CC481A5284}.Debug|Win32.ActiveCfg = Debug|Win32
{CB30C697-D33C-4410-94DE-D7CC481A5284}.Debug|Win32.Build.0 = Debug|Win32
{CB30C697-D33C-4410-94DE-D7CC481A5284}.Release|Win32.ActiveCfg = Release|Win32
@@ -197,6 +228,30 @@ Global
{EDC1569F-95B3-4536-9674-6AD9A0ADAAF4}.Debug|Win32.Build.0 = Debug|Win32
{EDC1569F-95B3-4536-9674-6AD9A0ADAAF4}.Release|Win32.ActiveCfg = Release|Win32
{EDC1569F-95B3-4536-9674-6AD9A0ADAAF4}.Release|Win32.Build.0 = Release|Win32
+ {BA30F970-A2B3-4D04-81D5-B5C73794BEDE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BA30F970-A2B3-4D04-81D5-B5C73794BEDE}.Debug|Win32.Build.0 = Debug|Win32
+ {BA30F970-A2B3-4D04-81D5-B5C73794BEDE}.Release|Win32.ActiveCfg = Release|Win32
+ {BA30F970-A2B3-4D04-81D5-B5C73794BEDE}.Release|Win32.Build.0 = Release|Win32
+ {DD8527B2-44B9-46A8-9E65-3A83A10418C9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DD8527B2-44B9-46A8-9E65-3A83A10418C9}.Debug|Win32.Build.0 = Debug|Win32
+ {DD8527B2-44B9-46A8-9E65-3A83A10418C9}.Release|Win32.ActiveCfg = Release|Win32
+ {DD8527B2-44B9-46A8-9E65-3A83A10418C9}.Release|Win32.Build.0 = Release|Win32
+ {6927AEDE-A96D-42FD-9431-2007EAB11CB4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6927AEDE-A96D-42FD-9431-2007EAB11CB4}.Debug|Win32.Build.0 = Debug|Win32
+ {6927AEDE-A96D-42FD-9431-2007EAB11CB4}.Release|Win32.ActiveCfg = Release|Win32
+ {6927AEDE-A96D-42FD-9431-2007EAB11CB4}.Release|Win32.Build.0 = Release|Win32
+ {02A1361F-ED8F-4280-8475-E79C8605D5A2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {02A1361F-ED8F-4280-8475-E79C8605D5A2}.Debug|Win32.Build.0 = Debug|Win32
+ {02A1361F-ED8F-4280-8475-E79C8605D5A2}.Release|Win32.ActiveCfg = Release|Win32
+ {02A1361F-ED8F-4280-8475-E79C8605D5A2}.Release|Win32.Build.0 = Release|Win32
+ {033F203E-3AB6-4444-874A-F0EEE6938FEC}.Debug|Win32.ActiveCfg = Debug|Win32
+ {033F203E-3AB6-4444-874A-F0EEE6938FEC}.Debug|Win32.Build.0 = Debug|Win32
+ {033F203E-3AB6-4444-874A-F0EEE6938FEC}.Release|Win32.ActiveCfg = Release|Win32
+ {033F203E-3AB6-4444-874A-F0EEE6938FEC}.Release|Win32.Build.0 = Release|Win32
+ {30B18111-3E93-4EA5-BEA9-17B08BC8E49D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {30B18111-3E93-4EA5-BEA9-17B08BC8E49D}.Debug|Win32.Build.0 = Debug|Win32
+ {30B18111-3E93-4EA5-BEA9-17B08BC8E49D}.Release|Win32.ActiveCfg = Release|Win32
+ {30B18111-3E93-4EA5-BEA9-17B08BC8E49D}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/vsprojects/vcdecoder_test/vcdecoder_test.vcproj b/vsprojects/vcdecoder1_test/vcdecoder1_test.vcproj
index 5f496b4..37a59e9 100644
--- a/vsprojects/vcdecoder_test/vcdecoder_test.vcproj
+++ b/vsprojects/vcdecoder1_test/vcdecoder1_test.vcproj
@@ -2,9 +2,9 @@
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
- Name="vcdecoder_test"
+ Name="vcdecoder1_test"
ProjectGUID="{BA30F970-A2B3-4D04-81D5-B5C73794BEDE}"
- RootNamespace="vcdecoder_test"
+ RootNamespace="vcdecoder1_test"
Keyword="Win32Proj"
>
<Platforms>
@@ -64,6 +64,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
LinkIncremental="2"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
@@ -143,6 +144,7 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
LinkIncremental="1"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
@@ -187,35 +189,15 @@
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
- RelativePath="..\..\src\vcdecoder_test.cc"
- >
- </File>
- <File
RelativePath="..\..\src\vcdecoder1_test.cc"
>
</File>
- <File
- RelativePath="..\..\src\vcdecoder2_test.cc"
- >
- </File>
- <File
- RelativePath="..\..\src\vcdecoder3_test.cc"
- >
- </File>
- <File
- RelativePath="..\..\src\vcdecoder4_test.cc"
- >
- </File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
- <File
- RelativePath="..\..\src\vcdecoder_test.h"
- >
- </File>
</Filter>
<Filter
Name="Resource Files"
diff --git a/vsprojects/vcdecoder2_test/vcdecoder2_test.vcproj b/vsprojects/vcdecoder2_test/vcdecoder2_test.vcproj
new file mode 100644
index 0000000..50f8018
--- /dev/null
+++ b/vsprojects/vcdecoder2_test/vcdecoder2_test.vcproj
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="vcdecoder2_test"
+ ProjectGUID="{DD8527B2-44B9-46A8-9E65-3A83A10418C9}"
+ RootNamespace="vcdecoder2_test"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="$(OutDir)\$(ProjectName).exe"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="$(OutDir)\$(ProjectName).exe"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\src\vcdecoder2_test.cc"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/vsprojects/vcdecoder3_test/vcdecoder3_test.vcproj b/vsprojects/vcdecoder3_test/vcdecoder3_test.vcproj
new file mode 100644
index 0000000..b0110cd
--- /dev/null
+++ b/vsprojects/vcdecoder3_test/vcdecoder3_test.vcproj
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="vcdecoder3_test"
+ ProjectGUID="{6927AEDE-A96D-42FD-9431-2007EAB11CB4}"
+ RootNamespace="vcdecoder3_test"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="$(OutDir)\$(ProjectName).exe"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="$(OutDir)\$(ProjectName).exe"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\src\vcdecoder3_test.cc"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/vsprojects/vcdecoder4_test/vcdecoder4_test.vcproj b/vsprojects/vcdecoder4_test/vcdecoder4_test.vcproj
new file mode 100644
index 0000000..81f7374
--- /dev/null
+++ b/vsprojects/vcdecoder4_test/vcdecoder4_test.vcproj
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="vcdecoder4_test"
+ ProjectGUID="{02A1361F-ED8F-4280-8475-E79C8605D5A2}"
+ RootNamespace="vcdecoder4_test"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="$(OutDir)\$(ProjectName).exe"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="$(OutDir)\$(ProjectName).exe"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\src\vcdecoder4_test.cc"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/vsprojects/vcdecoder5_test/vcdecoder5_test.vcproj b/vsprojects/vcdecoder5_test/vcdecoder5_test.vcproj
new file mode 100644
index 0000000..e225bdf
--- /dev/null
+++ b/vsprojects/vcdecoder5_test/vcdecoder5_test.vcproj
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="vcdecoder5_test"
+ ProjectGUID="{033F203E-3AB6-4444-874A-F0EEE6938FEC}"
+ RootNamespace="vcdecoder5_test"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="$(OutDir)\$(ProjectName).exe"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="$(OutDir)\vcddec.lib $(OutDir)\vcdcom.lib $(OutDir)\vcdecoder_test_common.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="$(OutDir)\$(ProjectName).exe"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\src\vcdecoder5_test.cc"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/vsprojects/vcdecoder_test_common/vcdecoder_test_common.vcproj b/vsprojects/vcdecoder_test_common/vcdecoder_test_common.vcproj
new file mode 100644
index 0000000..dfc2da4
--- /dev/null
+++ b/vsprojects/vcdecoder_test_common/vcdecoder_test_common.vcproj
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="vcdecoder_test_common"
+ ProjectGUID="{30B18111-3E93-4EA5-BEA9-17B08BC8E49D}"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="Debug"
+ ConfigurationType="4"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="Release"
+ ConfigurationType="4"
+ BuildLogFile="$(IntDir)\BuildLog_$(ProjectName).htm"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="../..;../../src;../../vsprojects"
+ RuntimeLibrary="2"
+ DefaultCharIsUnsigned="true"
+ UsePrecompiledHeader="0"
+ ProgramDataBaseFileName="$(IntDir)\$(ProjectName).pdb"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\src\vcdecoder_test.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\src\vcdecoder_test.cc"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>