Hello community,

here is the log from the commit of package libmsiecf for openSUSE:Factory 
checked in at 2015-08-14 14:46:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libmsiecf (Old)
 and      /work/SRC/openSUSE:Factory/.libmsiecf.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libmsiecf"

Changes:
--------
--- /work/SRC/openSUSE:Factory/libmsiecf/libmsiecf.changes      2015-01-30 
15:06:21.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libmsiecf.new/libmsiecf.changes 2015-08-14 
14:46:58.000000000 +0200
@@ -1,0 +2,6 @@
+Fri May  8 22:18:05 UTC 2015 - [email protected]
+
+- updated ot 0~20150314
+       * worked on Python bindings cache directory support
+
+-------------------------------------------------------------------

Old:
----
  libmsiecf-alpha-20150106.tar.gz

New:
----
  libmsiecf-alpha-20150314.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libmsiecf.spec ++++++
--- /var/tmp/diff_new_pack.L4szPD/_old  2015-08-14 14:46:59.000000000 +0200
+++ /var/tmp/diff_new_pack.L4szPD/_new  2015-08-14 14:46:59.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package libmsiecf
 #
-# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 Name:           libmsiecf
 %define lname  libmsiecf1
-%define timestamp      20150106
+%define timestamp      20150314
 Version:        0~%timestamp
 Release:        0
 Summary:        Library to parse MS Internet Explorer Cache Files

++++++ libmsiecf-alpha-20150106.tar.gz -> libmsiecf-alpha-20150314.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/ChangeLog 
new/libmsiecf-20150314/ChangeLog
--- old/libmsiecf-20150106/ChangeLog    2015-01-06 07:10:35.000000000 +0100
+++ new/libmsiecf-20150314/ChangeLog    2015-03-14 18:02:39.000000000 +0100
@@ -8,6 +8,9 @@
   - rename item values to item value
   - change read values to match libwrc
 
+Tests:
+* add cache directory tests
+
 File format
 * implement MSIE 3 cache file formats ?
 * access records not referred by hash table
@@ -28,6 +31,15 @@
 * record scan
   - flag entries in hash table as hashed
 
+20150314
+* updated version
+
+20150313
+* worked on Python bindings cache directory support
+
+20150308
+* worked on Python bindings cache directory support
+
 20150106
 * 2015 update
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/common/config.h 
new/libmsiecf-20150314/common/config.h
--- old/libmsiecf-20150106/common/config.h      2015-01-06 07:18:56.000000000 
+0100
+++ new/libmsiecf-20150314/common/config.h      2015-03-14 18:02:31.000000000 
+0100
@@ -540,7 +540,7 @@
 #define PACKAGE_NAME "libmsiecf"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libmsiecf 20150106"
+#define PACKAGE_STRING "libmsiecf 20150314"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "libmsiecf"
@@ -549,7 +549,7 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "20150106"
+#define PACKAGE_VERSION "20150314"
 
 /* The size of `off_t', as computed by sizeof. */
 #define SIZEOF_OFF_T 8
@@ -567,7 +567,7 @@
 /* #undef STRERROR_R_CHAR_P */
 
 /* Version number of package */
-#define VERSION "20150106"
+#define VERSION "20150314"
 
 /* Enable large inode numbers on Mac OS X 10.5.  */
 #ifndef _DARWIN_USE_64_BIT_INODE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/configure 
new/libmsiecf-20150314/configure
--- old/libmsiecf-20150106/configure    2015-01-06 07:18:44.000000000 +0100
+++ new/libmsiecf-20150314/configure    2015-03-14 18:02:16.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libmsiecf 20150106.
+# Generated by GNU Autoconf 2.69 for libmsiecf 20150314.
 #
 # Report bugs to <[email protected]>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='libmsiecf'
 PACKAGE_TARNAME='libmsiecf'
-PACKAGE_VERSION='20150106'
-PACKAGE_STRING='libmsiecf 20150106'
+PACKAGE_VERSION='20150314'
+PACKAGE_STRING='libmsiecf 20150314'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL=''
 
@@ -1609,7 +1609,7 @@
   # 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 libmsiecf 20150106 to adapt to many kinds of systems.
+\`configure' configures libmsiecf 20150314 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1679,7 +1679,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libmsiecf 20150106:";;
+     short | recursive ) echo "Configuration of libmsiecf 20150314:";;
    esac
   cat <<\_ACEOF
 
@@ -1926,7 +1926,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libmsiecf configure 20150106
+libmsiecf configure 20150314
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2578,7 +2578,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libmsiecf $as_me 20150106, which was
+It was created by libmsiecf $as_me 20150314, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3406,7 +3406,7 @@
 
 # Define the identity of the package.
  PACKAGE='libmsiecf'
- VERSION='20150106'
+ VERSION='20150314'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -45001,7 +45001,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libmsiecf $as_me 20150106, which was
+This file was extended by libmsiecf $as_me 20150314, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -45067,7 +45067,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libmsiecf config.status 20150106
+libmsiecf config.status 20150314
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/configure.ac 
new/libmsiecf-20150314/configure.ac
--- old/libmsiecf-20150106/configure.ac 2015-01-06 07:10:35.000000000 +0100
+++ new/libmsiecf-20150314/configure.ac 2015-03-14 17:50:37.000000000 +0100
@@ -2,7 +2,7 @@
 
 AC_INIT(
  [libmsiecf],
- [20150106],
+ [20150314],
  [[email protected]])
 
 AC_CONFIG_SRCDIR(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/dpkg/changelog 
new/libmsiecf-20150314/dpkg/changelog
--- old/libmsiecf-20150106/dpkg/changelog       2015-01-06 07:18:56.000000000 
+0100
+++ new/libmsiecf-20150314/dpkg/changelog       2015-03-14 18:02:30.000000000 
+0100
@@ -1,5 +1,5 @@
-libmsiecf (20150106-1) unstable; urgency=low
+libmsiecf (20150314-1) unstable; urgency=low
 
   * Auto-generated
 
- -- Joachim Metz <[email protected]>  Tue, 06 Jan 2015 07:18:55 +0100
+ -- Joachim Metz <[email protected]>  Sat, 14 Mar 2015 18:02:30 +0100
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/dpkg/copyright 
new/libmsiecf-20150314/dpkg/copyright
--- old/libmsiecf-20150106/dpkg/copyright       2015-01-06 07:18:56.000000000 
+0100
+++ new/libmsiecf-20150314/dpkg/copyright       2015-03-14 18:02:30.000000000 
+0100
@@ -1,6 +1,6 @@
 This work was packaged for Debian by:
 
-    Joachim Metz <[email protected]> on Tue, 06 Jan 2015 07:18:55 +0100
+    Joachim Metz <[email protected]> on Sat, 14 Mar 2015 18:02:30 +0100
 
 It was downloaded from https://github.com/libyal/libmsiecf/
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/include/libmsiecf/definitions.h 
new/libmsiecf-20150314/include/libmsiecf/definitions.h
--- old/libmsiecf-20150106/include/libmsiecf/definitions.h      2015-01-06 
07:18:56.000000000 +0100
+++ new/libmsiecf-20150314/include/libmsiecf/definitions.h      2015-03-14 
18:02:30.000000000 +0100
@@ -24,11 +24,11 @@
 
 #include <libmsiecf/types.h>
 
-#define LIBMSIECF_VERSION                              20150106
+#define LIBMSIECF_VERSION                              20150314
 
 /* The version string
  */
-#define LIBMSIECF_VERSION_STRING                       "20150106"
+#define LIBMSIECF_VERSION_STRING                       "20150314"
 
 /* The file access flags
  * bit 1        set to 1 for read access
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/include/libmsiecf.h 
new/libmsiecf-20150314/include/libmsiecf.h
--- old/libmsiecf-20150106/include/libmsiecf.h  2015-01-06 07:18:56.000000000 
+0100
+++ new/libmsiecf-20150314/include/libmsiecf.h  2015-03-14 18:02:30.000000000 
+0100
@@ -324,7 +324,7 @@
      int *number_of_cache_directories,
      libmsiecf_error_t **error );
 
-/* Retrieves the UTF-8 encoded name of a certain cache directory
+/* Retrieves the extended ASCII encoded name of a certain cache directory
  * The size should include the end of string character
  * The cache directory name consists of 8 characters + end of string character
  * Returns 1 if successful or -1 on error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/include/libmsiecf.h.in 
new/libmsiecf-20150314/include/libmsiecf.h.in
--- old/libmsiecf-20150106/include/libmsiecf.h.in       2015-01-06 
07:10:27.000000000 +0100
+++ new/libmsiecf-20150314/include/libmsiecf.h.in       2015-03-14 
17:50:26.000000000 +0100
@@ -324,7 +324,7 @@
      int *number_of_cache_directories,
      libmsiecf_error_t **error );
 
-/* Retrieves the UTF-8 encoded name of a certain cache directory
+/* Retrieves the extended ASCII encoded name of a certain cache directory
  * The size should include the end of string character
  * The cache directory name consists of 8 characters + end of string character
  * Returns 1 if successful or -1 on error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/libmsiecf/libmsiecf.rc 
new/libmsiecf-20150314/libmsiecf/libmsiecf.rc
--- old/libmsiecf-20150106/libmsiecf/libmsiecf.rc       2015-01-06 
07:18:56.000000000 +0100
+++ new/libmsiecf-20150314/libmsiecf/libmsiecf.rc       2015-03-14 
18:02:30.000000000 +0100
@@ -22,12 +22,12 @@
     BLOCK "040904E4"
     BEGIN
       VALUE "FileDescription",         "Library to access the MSIE Cache File 
(index.dat) format\0"
-      VALUE "FileVersion",             "20150106" "\0"
+      VALUE "FileVersion",             "20150314" "\0"
       VALUE "InternalName",            "libmsiecf.dll\0"
       VALUE "LegalCopyright",          "(C) 2009-2015, Joachim Metz 
<[email protected]>\0"
       VALUE "OriginalFilename",                "libmsiecf.dll\0"
       VALUE "ProductName",             "libmsiecf\0"
-      VALUE "ProductVersion",          "20150106" "\0"
+      VALUE "ProductVersion",          "20150314" "\0"
       VALUE "Comments",                        "For more information visit 
https://github.com/libyal/libmsiecf/\0";
     END
   END
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/libmsiecf/libmsiecf_definitions.h 
new/libmsiecf-20150314/libmsiecf/libmsiecf_definitions.h
--- old/libmsiecf-20150106/libmsiecf/libmsiecf_definitions.h    2015-01-06 
07:18:56.000000000 +0100
+++ new/libmsiecf-20150314/libmsiecf/libmsiecf_definitions.h    2015-03-14 
18:02:30.000000000 +0100
@@ -38,11 +38,11 @@
  */
 #else
 
-#define LIBMSIECF_VERSION                              20150106
+#define LIBMSIECF_VERSION                              20150314
 
 /* The version string
  */
-#define LIBMSIECF_VERSION_STRING                       "20150106"
+#define LIBMSIECF_VERSION_STRING                       "20150314"
 
 /* The file access flags
  * bit 1        set to 1 for read access
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/libmsiecf/libmsiecf_file.c 
new/libmsiecf-20150314/libmsiecf/libmsiecf_file.c
--- old/libmsiecf-20150106/libmsiecf/libmsiecf_file.c   2015-01-06 
07:10:28.000000000 +0100
+++ new/libmsiecf-20150314/libmsiecf/libmsiecf_file.c   2015-03-14 
17:50:26.000000000 +0100
@@ -1416,7 +1416,7 @@
        return( 1 );
 }
 
-/* Retrieves the UTF-8 encoded name of a certain cache directory
+/* Retrieves the extended ASCII encoded name of a certain cache directory
  * The size should include the end of string character
  * The cache directory name consists of 8 characters + end of string character
  * Returns 1 if successful or -1 on error
@@ -1506,7 +1506,6 @@
                return( -1 );
        }
        /* Assumed that the directory name contains only basic ASCII characters
-        * which are the same in UTF-8
         */
        if( memory_copy(
             cache_directory_name,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/libmsiecf.spec 
new/libmsiecf-20150314/libmsiecf.spec
--- old/libmsiecf-20150106/libmsiecf.spec       2015-01-06 07:18:56.000000000 
+0100
+++ new/libmsiecf-20150314/libmsiecf.spec       2015-03-14 18:02:31.000000000 
+0100
@@ -1,5 +1,5 @@
 Name: libmsiecf
-Version: 20150106
+Version: 20150314
 Release: 1
 Summary: Library to access the MSIE Cache File (index.dat) format.
 Group: System Environment/Libraries
@@ -87,6 +87,6 @@
 %{_libdir}/python*/site-packages/*.so
 
 %changelog
-* Tue Jan  6 2015 Joachim Metz <[email protected]> 20150106-1
+* Sat Mar 14 2015 Joachim Metz <[email protected]> 20150314-1
 - Auto-generated
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/msiecftools/export_handle.c 
new/libmsiecf-20150314/msiecftools/export_handle.c
--- old/libmsiecf-20150106/msiecftools/export_handle.c  2015-01-06 
07:10:29.000000000 +0100
+++ new/libmsiecf-20150314/msiecftools/export_handle.c  2015-03-14 
17:50:26.000000000 +0100
@@ -610,6 +610,8 @@
 
                        goto on_error;
                }
+               /* Assumed that the directory name contains only basic ASCII 
characters
+                */
                fprintf(
                 export_handle->notify_stream,
                 " (%s)",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/msvscpp/pymsiecf/pymsiecf.vcproj 
new/libmsiecf-20150314/msvscpp/pymsiecf/pymsiecf.vcproj
--- old/libmsiecf-20150106/msvscpp/pymsiecf/pymsiecf.vcproj     2015-01-06 
07:10:34.000000000 +0100
+++ new/libmsiecf-20150314/msvscpp/pymsiecf/pymsiecf.vcproj     2015-03-14 
17:50:26.000000000 +0100
@@ -174,6 +174,10 @@
                                >
                        </File>
                        <File
+                               
RelativePath="..\..\pymsiecf\pymsiecf_cache_directories.c"
+                               >
+                       </File>
+                       <File
                                
RelativePath="..\..\pymsiecf\pymsiecf_codepage.c"
                                >
                        </File>
@@ -240,6 +244,10 @@
                                >
                        </File>
                        <File
+                               
RelativePath="..\..\pymsiecf\pymsiecf_cache_directories.h"
+                               >
+                       </File>
+                       <File
                                
RelativePath="..\..\pymsiecf\pymsiecf_codepage.h"
                                >
                        </File>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/pymsiecf/Makefile.am 
new/libmsiecf-20150314/pymsiecf/Makefile.am
--- old/libmsiecf-20150106/pymsiecf/Makefile.am 2014-12-22 06:58:25.000000000 
+0100
+++ new/libmsiecf-20150314/pymsiecf/Makefile.am 2015-03-14 17:50:26.000000000 
+0100
@@ -16,6 +16,7 @@
 
 pymsiecf_la_SOURCES = \
        pymsiecf.c pymsiecf.h \
+       pymsiecf_cache_directories.c pymsiecf_cache_directories.h \
        pymsiecf_codepage.c pymsiecf_codepage.h \
        pymsiecf_datetime.c pymsiecf_datetime.h \
        pymsiecf_error.c pymsiecf_error.h \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/pymsiecf/Makefile.in 
new/libmsiecf-20150314/pymsiecf/Makefile.in
--- old/libmsiecf-20150106/pymsiecf/Makefile.in 2015-01-06 07:18:46.000000000 
+0100
+++ new/libmsiecf-20150314/pymsiecf/Makefile.in 2015-03-14 18:02:19.000000000 
+0100
@@ -111,6 +111,7 @@
 @HAVE_PYTHON_TRUE@pymsiecf_la_DEPENDENCIES =  \
 @HAVE_PYTHON_TRUE@     ../libmsiecf/libmsiecf.la
 am__pymsiecf_la_SOURCES_DIST = pymsiecf.c pymsiecf.h \
+       pymsiecf_cache_directories.c pymsiecf_cache_directories.h \
        pymsiecf_codepage.c pymsiecf_codepage.h pymsiecf_datetime.c \
        pymsiecf_datetime.h pymsiecf_error.c pymsiecf_error.h \
        pymsiecf_file.c pymsiecf_file.h \
@@ -126,6 +127,7 @@
        pymsiecf_url.c pymsiecf_url.h pymsiecf_url_types.c \
        pymsiecf_url_types.h
 @HAVE_PYTHON_TRUE@am_pymsiecf_la_OBJECTS = pymsiecf_la-pymsiecf.lo \
+@HAVE_PYTHON_TRUE@     pymsiecf_la-pymsiecf_cache_directories.lo \
 @HAVE_PYTHON_TRUE@     pymsiecf_la-pymsiecf_codepage.lo \
 @HAVE_PYTHON_TRUE@     pymsiecf_la-pymsiecf_datetime.lo \
 @HAVE_PYTHON_TRUE@     pymsiecf_la-pymsiecf_error.lo \
@@ -500,6 +502,7 @@
 @HAVE_PYTHON_TRUE@pyexec_LTLIBRARIES = pymsiecf.la
 @HAVE_PYTHON_TRUE@pymsiecf_la_SOURCES = \
 @HAVE_PYTHON_TRUE@     pymsiecf.c pymsiecf.h \
+@HAVE_PYTHON_TRUE@     pymsiecf_cache_directories.c 
pymsiecf_cache_directories.h \
 @HAVE_PYTHON_TRUE@     pymsiecf_codepage.c pymsiecf_codepage.h \
 @HAVE_PYTHON_TRUE@     pymsiecf_datetime.c pymsiecf_datetime.h \
 @HAVE_PYTHON_TRUE@     pymsiecf_error.c pymsiecf_error.h \
@@ -623,6 +626,7 @@
        -rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/pymsiecf_la-pymsiecf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/pymsiecf_la-pymsiecf_cache_directories.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/pymsiecf_la-pymsiecf_codepage.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/pymsiecf_la-pymsiecf_datetime.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ 
@am__quote@./$(DEPDIR)/pymsiecf_la-pymsiecf_error.Plo@am__quote@
@@ -666,6 +670,13 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) 
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(pymsiecf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o 
pymsiecf_la-pymsiecf.lo `test -f 'pymsiecf.c' || echo '$(srcdir)/'`pymsiecf.c
 
+pymsiecf_la-pymsiecf_cache_directories.lo: pymsiecf_cache_directories.c
+@am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) 
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(pymsiecf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT 
pymsiecf_la-pymsiecf_cache_directories.lo -MD -MP -MF 
$(DEPDIR)/pymsiecf_la-pymsiecf_cache_directories.Tpo -c -o 
pymsiecf_la-pymsiecf_cache_directories.lo `test -f 
'pymsiecf_cache_directories.c' || echo '$(srcdir)/'`pymsiecf_cache_directories.c
+@am__fastdepCC_TRUE@   $(am__mv) 
$(DEPDIR)/pymsiecf_la-pymsiecf_cache_directories.Tpo 
$(DEPDIR)/pymsiecf_la-pymsiecf_cache_directories.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='pymsiecf_cache_directories.c' 
object='pymsiecf_la-pymsiecf_cache_directories.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) 
$(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) 
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(pymsiecf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o 
pymsiecf_la-pymsiecf_cache_directories.lo `test -f 
'pymsiecf_cache_directories.c' || echo '$(srcdir)/'`pymsiecf_cache_directories.c
+
 pymsiecf_la-pymsiecf_codepage.lo: pymsiecf_codepage.c
 @am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) 
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) 
$(pymsiecf_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT 
pymsiecf_la-pymsiecf_codepage.lo -MD -MP -MF 
$(DEPDIR)/pymsiecf_la-pymsiecf_codepage.Tpo -c -o 
pymsiecf_la-pymsiecf_codepage.lo `test -f 'pymsiecf_codepage.c' || echo 
'$(srcdir)/'`pymsiecf_codepage.c
 @am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/pymsiecf_la-pymsiecf_codepage.Tpo 
$(DEPDIR)/pymsiecf_la-pymsiecf_codepage.Plo
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/pymsiecf/pymsiecf.c 
new/libmsiecf-20150314/pymsiecf/pymsiecf.c
--- old/libmsiecf-20150106/pymsiecf/pymsiecf.c  2015-01-06 07:17:50.000000000 
+0100
+++ new/libmsiecf-20150314/pymsiecf/pymsiecf.c  2015-03-14 17:50:26.000000000 
+0100
@@ -27,6 +27,7 @@
 #endif
 
 #include "pymsiecf.h"
+#include "pymsiecf_cache_directories.h"
 #include "pymsiecf_error.h"
 #include "pymsiecf_file.h"
 #include "pymsiecf_file_object_io_handle.h"
@@ -457,17 +458,18 @@
                 void )
 #endif
 {
-       PyObject *module                     = NULL;
-       PyTypeObject *file_type_object       = NULL;
-       PyTypeObject *item_type_object       = NULL;
-       PyTypeObject *item_flags_type_object = NULL;
-       PyTypeObject *item_types_type_object = NULL;
-       PyTypeObject *items_type_object      = NULL;
-       PyTypeObject *leak_type_object       = NULL;
-       PyTypeObject *redirected_type_object = NULL;
-       PyTypeObject *url_type_object        = NULL;
-       PyTypeObject *url_types_type_object  = NULL;
-       PyGILState_STATE gil_state           = 0;
+       PyObject *module                            = NULL;
+       PyTypeObject *cache_directories_type_object = NULL;
+       PyTypeObject *file_type_object              = NULL;
+       PyTypeObject *item_type_object              = NULL;
+       PyTypeObject *item_flags_type_object        = NULL;
+       PyTypeObject *item_types_type_object        = NULL;
+       PyTypeObject *items_type_object             = NULL;
+       PyTypeObject *leak_type_object              = NULL;
+       PyTypeObject *redirected_type_object        = NULL;
+       PyTypeObject *url_type_object               = NULL;
+       PyTypeObject *url_types_type_object         = NULL;
+       PyGILState_STATE gil_state                  = 0;
 
 #if defined( HAVE_DEBUG_OUTPUT )
        libmsiecf_notify_set_stream(
@@ -521,6 +523,25 @@
         "file",
         (PyObject *) file_type_object );
 
+       /* Setup the cache directories type object
+        */
+       pymsiecf_cache_directories_type_object.tp_new = PyType_GenericNew;
+
+       if( PyType_Ready(
+            &pymsiecf_cache_directories_type_object ) < 0 )
+       {
+               goto on_error;
+       }
+       Py_IncRef(
+        (PyObject *) &pymsiecf_cache_directories_type_object );
+
+       cache_directories_type_object = &pymsiecf_cache_directories_type_object;
+
+       PyModule_AddObject(
+        module,
+        "_cache_directories",
+        (PyObject *) cache_directories_type_object );
+
        /* Setup the item type object
         */
        pymsiecf_item_type_object.tp_new = PyType_GenericNew;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libmsiecf-20150106/pymsiecf/pymsiecf_cache_directories.c 
new/libmsiecf-20150314/pymsiecf/pymsiecf_cache_directories.c
--- old/libmsiecf-20150106/pymsiecf/pymsiecf_cache_directories.c        
1970-01-01 01:00:00.000000000 +0100
+++ new/libmsiecf-20150314/pymsiecf/pymsiecf_cache_directories.c        
2015-03-14 17:50:26.000000000 +0100
@@ -0,0 +1,456 @@
+/*
+ * Python object definition of the cache directory sequence and iterator
+ *
+ * Copyright (C) 2009-2015, Joachim Metz <[email protected]>
+ *
+ * Refer to AUTHORS for acknowledgements.
+ *
+ * This software is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <common.h>
+#include <types.h>
+
+#if defined( HAVE_STDLIB_H ) || defined( HAVE_WINAPI )
+#include <stdlib.h>
+#endif
+
+#include "pymsiecf_cache_directories.h"
+#include "pymsiecf_file.h"
+#include "pymsiecf_libcerror.h"
+#include "pymsiecf_libmsiecf.h"
+#include "pymsiecf_python.h"
+
+PySequenceMethods pymsiecf_cache_directories_sequence_methods = {
+       /* sq_length */
+       (lenfunc) pymsiecf_cache_directories_len,
+       /* sq_concat */
+       0,
+       /* sq_repeat */
+       0,
+       /* sq_item */
+       (ssizeargfunc) pymsiecf_cache_directories_getitem,
+       /* sq_slice */
+       0,
+       /* sq_ass_item */
+       0,
+       /* sq_ass_slice */
+       0,
+       /* sq_contains */
+       0,
+       /* sq_inplace_concat */
+       0,
+       /* sq_inplace_repeat */
+       0
+};
+
+PyTypeObject pymsiecf_cache_directories_type_object = {
+       PyVarObject_HEAD_INIT( NULL, 0 )
+
+       /* tp_name */
+       "pymsiecf._cache_directories",
+       /* tp_basicsize */
+       sizeof( pymsiecf_cache_directories_t ),
+       /* tp_cache_directoriesize */
+       0,
+       /* tp_dealloc */
+       (destructor) pymsiecf_cache_directories_free,
+       /* tp_print */
+       0,
+       /* tp_getattr */
+       0,
+       /* tp_setattr */
+       0,
+       /* tp_compare */
+       0,
+       /* tp_repr */
+       0,
+       /* tp_as_number */
+       0,
+       /* tp_as_sequence */
+       &pymsiecf_cache_directories_sequence_methods,
+       /* tp_as_mapping */
+       0,
+       /* tp_hash */
+       0,
+       /* tp_call */
+       0,
+       /* tp_str */
+       0,
+       /* tp_getattro */
+       0,
+       /* tp_setattro */
+       0,
+       /* tp_as_buffer */
+       0,
+       /* tp_flags */
+       Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_ITER,
+       /* tp_doc */
+       "internal pymsiecf cache directories sequence and iterator object",
+       /* tp_traverse */
+       0,
+       /* tp_clear */
+       0,
+       /* tp_richcompare */
+       0,
+       /* tp_weaklistoffset */
+       0,
+       /* tp_iter */
+       (getiterfunc) pymsiecf_cache_directories_iter,
+       /* tp_iternext */
+       (iternextfunc) pymsiecf_cache_directories_iternext,
+       /* tp_methods */
+       0,
+       /* tp_members */
+       0,
+       /* tp_getset */
+       0,
+       /* tp_base */
+       0,
+       /* tp_dict */
+       0,
+       /* tp_descr_get */
+       0,
+       /* tp_descr_set */
+       0,
+       /* tp_dictoffset */
+       0,
+       /* tp_init */
+       (initproc) pymsiecf_cache_directories_init,
+       /* tp_alloc */
+       0,
+       /* tp_new */
+       0,
+       /* tp_free */
+       0,
+       /* tp_is_gc */
+       0,
+       /* tp_bases */
+       NULL,
+       /* tp_mro */
+       NULL,
+       /* tp_cache */
+       NULL,
+       /* tp_subclasses */
+       NULL,
+       /* tp_weaklist */
+       NULL,
+       /* tp_del */
+       0
+};
+
+/* Creates a new cache directories object
+ * Returns a Python object if successful or NULL on error
+ */
+PyObject *pymsiecf_cache_directories_new(
+           pymsiecf_file_t *file_object,
+           PyObject* (*get_cache_directory_by_index)(
+                        pymsiecf_file_t *file_object,
+                        int cache_directory_index ),
+           int number_of_cache_directories )
+{
+       pymsiecf_cache_directories_t *pymsiecf_cache_directories = NULL;
+       static char *function                                    = 
"pymsiecf_cache_directories_new";
+
+       if( file_object == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid file object.",
+                function );
+
+               return( NULL );
+       }
+       if( get_cache_directory_by_index == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid get cache directory by index function.",
+                function );
+
+               return( NULL );
+       }
+       /* Make sure the cache directories values are initialized
+        */
+       pymsiecf_cache_directories = PyObject_New(
+                                     struct pymsiecf_cache_directories,
+                                     &pymsiecf_cache_directories_type_object );
+
+       if( pymsiecf_cache_directories == NULL )
+       {
+               PyErr_Format(
+                PyExc_MemoryError,
+                "%s: unable to initialize cache directories.",
+                function );
+
+               goto on_error;
+       }
+       if( pymsiecf_cache_directories_init(
+            pymsiecf_cache_directories ) != 0 )
+       {
+               PyErr_Format(
+                PyExc_MemoryError,
+                "%s: unable to initialize cache directories.",
+                function );
+
+               goto on_error;
+       }
+       pymsiecf_cache_directories->file_object                  = file_object;
+       pymsiecf_cache_directories->get_cache_directory_by_index = 
get_cache_directory_by_index;
+       pymsiecf_cache_directories->number_of_cache_directories  = 
number_of_cache_directories;
+
+       Py_IncRef(
+        (PyObject *) pymsiecf_cache_directories->file_object );
+
+       return( (PyObject *) pymsiecf_cache_directories );
+
+on_error:
+       if( pymsiecf_cache_directories != NULL )
+       {
+               Py_DecRef(
+                (PyObject *) pymsiecf_cache_directories );
+       }
+       return( NULL );
+}
+
+/* Intializes a cache directories object
+ * Returns 0 if successful or -1 on error
+ */
+int pymsiecf_cache_directories_init(
+     pymsiecf_cache_directories_t *pymsiecf_cache_directories )
+{
+       static char *function = "pymsiecf_cache_directories_init";
+
+       if( pymsiecf_cache_directories == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories.",
+                function );
+
+               return( -1 );
+       }
+       /* Make sure the cache directories values are initialized
+        */
+       pymsiecf_cache_directories->file_object                  = NULL;
+       pymsiecf_cache_directories->get_cache_directory_by_index = NULL;
+       pymsiecf_cache_directories->cache_directory_index        = 0;
+       pymsiecf_cache_directories->number_of_cache_directories  = 0;
+
+       return( 0 );
+}
+
+/* Frees an cache directories object
+ */
+void pymsiecf_cache_directories_free(
+      pymsiecf_cache_directories_t *pymsiecf_cache_directories )
+{
+       struct _typeobject *ob_type = NULL;
+       static char *function       = "pymsiecf_cache_directories_free";
+
+       if( pymsiecf_cache_directories == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories.",
+                function );
+
+               return;
+       }
+       ob_type = Py_TYPE(
+                  pymsiecf_cache_directories );
+
+       if( ob_type == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: missing ob_type.",
+                function );
+
+               return;
+       }
+       if( ob_type->tp_free == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid ob_type - missing tp_free.",
+                function );
+
+               return;
+       }
+       if( pymsiecf_cache_directories->file_object != NULL )
+       {
+               Py_DecRef(
+                (PyObject *) pymsiecf_cache_directories->file_object );
+       }
+       ob_type->tp_free(
+        (PyObject*) pymsiecf_cache_directories );
+}
+
+/* The cache directories len() function
+ */
+Py_ssize_t pymsiecf_cache_directories_len(
+            pymsiecf_cache_directories_t *pymsiecf_cache_directories )
+{
+       static char *function = "pymsiecf_cache_directories_len";
+
+       if( pymsiecf_cache_directories == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories.",
+                function );
+
+               return( -1 );
+       }
+       return( (Py_ssize_t) 
pymsiecf_cache_directories->number_of_cache_directories );
+}
+
+/* The cache directories getitem() function
+ */
+PyObject *pymsiecf_cache_directories_getitem(
+           pymsiecf_cache_directories_t *pymsiecf_cache_directories,
+           Py_ssize_t cache_directory_index )
+{
+       PyObject *string_object = NULL;
+       static char *function   = "pymsiecf_cache_directories_getitem";
+
+       if( pymsiecf_cache_directories == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories.",
+                function );
+
+               return( NULL );
+       }
+       if( pymsiecf_cache_directories->get_cache_directory_by_index == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories - missing get cache directory 
by index function.",
+                function );
+
+               return( NULL );
+       }
+       if( pymsiecf_cache_directories->number_of_cache_directories < 0 )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories - invalid number of cache 
directories.",
+                function );
+
+               return( NULL );
+       }
+       if( ( cache_directory_index < 0 )
+        || ( cache_directory_index >= (Py_ssize_t) 
pymsiecf_cache_directories->number_of_cache_directories ) )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid invalid cache directory index value out of 
bounds.",
+                function );
+
+               return( NULL );
+       }
+       string_object = 
pymsiecf_cache_directories->get_cache_directory_by_index(
+                        pymsiecf_cache_directories->file_object,
+                        (int) cache_directory_index );
+
+       return( string_object );
+}
+
+/* The cache directories iter() function
+ */
+PyObject *pymsiecf_cache_directories_iter(
+           pymsiecf_cache_directories_t *pymsiecf_cache_directories )
+{
+       static char *function = "pymsiecf_cache_directories_iter";
+
+       if( pymsiecf_cache_directories == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories.",
+                function );
+
+               return( NULL );
+       }
+       Py_IncRef(
+        (PyObject *) pymsiecf_cache_directories );
+
+       return( (PyObject *) pymsiecf_cache_directories );
+}
+
+/* The cache directories iternext() function
+ */
+PyObject *pymsiecf_cache_directories_iternext(
+           pymsiecf_cache_directories_t *pymsiecf_cache_directories )
+{
+       PyObject *string_object = NULL;
+       static char *function   = "pymsiecf_cache_directories_iternext";
+
+       if( pymsiecf_cache_directories == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories.",
+                function );
+
+               return( NULL );
+       }
+       if( pymsiecf_cache_directories->get_cache_directory_by_index == NULL )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories - missing get cache directory 
by index function.",
+                function );
+
+               return( NULL );
+       }
+       if( pymsiecf_cache_directories->cache_directory_index < 0 )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories - invalid cache directory 
index.",
+                function );
+
+               return( NULL );
+       }
+       if( pymsiecf_cache_directories->number_of_cache_directories < 0 )
+       {
+               PyErr_Format(
+                PyExc_ValueError,
+                "%s: invalid cache directories - invalid number of cache 
directories.",
+                function );
+
+               return( NULL );
+       }
+       if( pymsiecf_cache_directories->cache_directory_index >= 
pymsiecf_cache_directories->number_of_cache_directories )
+       {
+               PyErr_SetNone(
+                PyExc_StopIteration );
+
+               return( NULL );
+       }
+       string_object = 
pymsiecf_cache_directories->get_cache_directory_by_index(
+                        pymsiecf_cache_directories->file_object,
+                        pymsiecf_cache_directories->cache_directory_index );
+
+       if( string_object != NULL )
+       {
+               pymsiecf_cache_directories->cache_directory_index++;
+       }
+       return( string_object );
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/libmsiecf-20150106/pymsiecf/pymsiecf_cache_directories.h 
new/libmsiecf-20150314/pymsiecf/pymsiecf_cache_directories.h
--- old/libmsiecf-20150106/pymsiecf/pymsiecf_cache_directories.h        
1970-01-01 01:00:00.000000000 +0100
+++ new/libmsiecf-20150314/pymsiecf/pymsiecf_cache_directories.h        
2015-03-14 17:50:26.000000000 +0100
@@ -0,0 +1,96 @@
+/*
+ * Python object definition of the cache directories sequence and iterator
+ *
+ * Copyright (C) 2009-2015, Joachim Metz <[email protected]>
+ *
+ * Refer to AUTHORS for acknowledgements.
+ *
+ * This software is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#if !defined( _PYMSIECF_CACHE_DIRECTORIES_H )
+#define _PYMSIECF_CACHE_DIRECTORIES_H
+
+#include <common.h>
+#include <types.h>
+
+#include "pymsiecf_file.h"
+#include "pymsiecf_libmsiecf.h"
+#include "pymsiecf_python.h"
+
+#if defined( __cplusplus )
+extern "C" {
+#endif
+
+typedef struct pymsiecf_cache_directories pymsiecf_cache_directories_t;
+
+struct pymsiecf_cache_directories
+{
+       /* Python object initialization
+        */
+       PyObject_HEAD
+
+       /* The file object
+        */
+       pymsiecf_file_t *file_object;
+
+       /* The get cache directory by index callback function
+        */
+       PyObject* (*get_cache_directory_by_index)(
+                    pymsiecf_file_t *file_object,
+                    int cache_directory_index );
+
+       /* The (current) cache directory index
+        */
+       int cache_directory_index;
+
+       /* The number of cache directories
+        */
+       int number_of_cache_directories;
+};
+
+extern PyTypeObject pymsiecf_cache_directories_type_object;
+
+PyObject *pymsiecf_cache_directories_new(
+           pymsiecf_file_t *file_object,
+           PyObject* (*get_cache_directory_by_index)(
+                        pymsiecf_file_t *file_object,
+                        int cache_directory_index ),
+           int number_of_cache_directories );
+
+int pymsiecf_cache_directories_init(
+     pymsiecf_cache_directories_t *pymsiecf_cache_directories );
+
+void pymsiecf_cache_directories_free(
+      pymsiecf_cache_directories_t *pymsiecf_cache_directories );
+
+Py_ssize_t pymsiecf_cache_directories_len(
+            pymsiecf_cache_directories_t *pymsiecf_cache_directories );
+
+PyObject *pymsiecf_cache_directories_getitem(
+           pymsiecf_cache_directories_t *pymsiecf_cache_directories,
+           Py_ssize_t cache_directory_index );
+
+PyObject *pymsiecf_cache_directories_iter(
+           pymsiecf_cache_directories_t *pymsiecf_cache_directories );
+
+PyObject *pymsiecf_cache_directories_iternext(
+           pymsiecf_cache_directories_t *pymsiecf_cache_directories );
+
+#if defined( __cplusplus )
+}
+#endif
+
+#endif
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/pymsiecf/pymsiecf_file.c 
new/libmsiecf-20150314/pymsiecf/pymsiecf_file.c
--- old/libmsiecf-20150106/pymsiecf/pymsiecf_file.c     2015-01-06 
07:10:29.000000000 +0100
+++ new/libmsiecf-20150314/pymsiecf/pymsiecf_file.c     2015-03-14 
17:50:26.000000000 +0100
@@ -26,6 +26,7 @@
 #include <stdlib.h>
 #endif
 
+#include "pymsiecf_cache_directories.h"
 #include "pymsiecf_codepage.h"
 #include "pymsiecf_error.h"
 #include "pymsiecf_file.h"
@@ -99,7 +100,7 @@
          "Set the codepage used for ASCII strings in the file\n"
          "Expects the codepage to be a String containing a Python codec 
definition" },
 
-       /* Functions to access the items */
+       /* Functions to access the cache directories */
 
        { "format_version",
          (PyCFunction) pymsiecf_file_get_format_version,
@@ -108,6 +109,22 @@
          "\n"
          "Retrieves the format version" },
 
+       { "get_number_of_cache_directories",
+         (PyCFunction) pymsiecf_file_get_number_of_cache_directories,
+         METH_NOARGS,
+         "get_number_of_cache_directories() -> Integer\n"
+         "\n"
+         "Retrieves the number of cache directories" },
+
+       { "get_cache_directory",
+         (PyCFunction) pymsiecf_file_get_cache_directory,
+         METH_VARARGS | METH_KEYWORDS,
+         "get_cache_directory(cache_directory_index) -> Object or None\n"
+         "\n"
+         "Retrieves a specific cache directory" },
+
+       /* Functions to access the items */
+
        { "get_number_of_items",
          (PyCFunction) pymsiecf_file_get_number_of_items,
          METH_NOARGS,
@@ -154,6 +171,18 @@
          "The format version",
          NULL },
 
+       { "number_of_cache_directories",
+         (getter) pymsiecf_file_get_number_of_cache_directories,
+         (setter) 0,
+         "The number of cache directories",
+         NULL },
+
+       { "cache_directories",
+         (getter) pymsiecf_file_get_cache_directories,
+         (setter) 0,
+         "The cache directories",
+         NULL },
+
        { "number_of_items",
          (getter) pymsiecf_file_get_number_of_items,
          (setter) 0,
@@ -1262,6 +1291,222 @@
                 errors ) );
 }
 
+/* Retrieves the number of cache directories
+ * Returns a Python object if successful or NULL on error
+ */
+PyObject *pymsiecf_file_get_number_of_cache_directories(
+           pymsiecf_file_t *pymsiecf_file,
+           PyObject *arguments PYMSIECF_ATTRIBUTE_UNUSED )
+{
+       libcerror_error_t *error        = NULL;
+       PyObject *integer_object        = NULL;
+       static char *function           = 
"pymsiecf_file_get_number_of_cache_directories";
+       int number_of_cache_directories = 0;
+       int result                      = 0;
+
+       PYMSIECF_UNREFERENCED_PARAMETER( arguments )
+
+       if( pymsiecf_file == NULL )
+       {
+               PyErr_Format(
+                PyExc_TypeError,
+                "%s: invalid file.",
+                function );
+
+               return( NULL );
+       }
+       Py_BEGIN_ALLOW_THREADS
+
+       result = libmsiecf_file_get_number_of_cache_directories(
+                 pymsiecf_file->file,
+                 &number_of_cache_directories,
+                 &error );
+
+       Py_END_ALLOW_THREADS
+
+       if( result != 1 )
+       {
+               pymsiecf_error_raise(
+                error,
+                PyExc_IOError,
+                "%s: unable to retrieve number of cache directories.",
+                function );
+
+               libcerror_error_free(
+                &error );
+
+               return( NULL );
+       }
+#if PY_MAJOR_VERSION >= 3
+       integer_object = PyLong_FromLong(
+                         (long) number_of_cache_directories );
+#else
+       integer_object = PyInt_FromLong(
+                         (long) number_of_cache_directories );
+#endif
+       return( integer_object );
+}
+
+/* Retrieves a specific cache directory by index
+ * Returns a Python object if successful or NULL on error
+ */
+PyObject *pymsiecf_file_get_cache_directory_by_index(
+           pymsiecf_file_t *pymsiecf_file,
+           int cache_directory_index )
+{
+       char cache_directory_name[ 9 ];
+
+       libcerror_error_t *error = NULL;
+       PyObject *string_object  = NULL;
+       static char *function    = "pymsiecf_file_get_cache_directory_by_index";
+       int result               = 0;
+
+       if( pymsiecf_file == NULL )
+       {
+               PyErr_Format(
+                PyExc_TypeError,
+                "%s: invalid file.",
+                function );
+
+               return( NULL );
+       }
+       Py_BEGIN_ALLOW_THREADS
+
+       result = libmsiecf_file_get_cache_directory_name(
+                 pymsiecf_file->file,
+                 cache_directory_index,
+                 cache_directory_name,
+                 9,
+                 &error );
+
+       Py_END_ALLOW_THREADS
+
+       if( result != 1 )
+       {
+               pymsiecf_error_raise(
+                error,
+                PyExc_IOError,
+                "%s: unable to retrieve cache directory name: %d.",
+                function,
+                cache_directory_index );
+
+               libcerror_error_free(
+                &error );
+
+               return( NULL );
+       }
+       /* Assumed that the directory name contains only basic ASCII characters
+        */
+#if PY_MAJOR_VERSION >= 3
+       string_object = PyBytes_FromString(
+                        cache_directory_name );
+#else
+       string_object = PyString_FromString(
+                        cache_directory_name );
+#endif
+       if( string_object == NULL )
+       {
+               PyErr_Format(
+                PyExc_MemoryError,
+                "%s: unable to convert cache directory name string into string 
object.",
+                function );
+
+               return( NULL );
+       }
+       return( string_object );
+}
+
+/* Retrieves a specific cache directory
+ * Returns a Python object if successful or NULL on error
+ */
+PyObject *pymsiecf_file_get_cache_directory(
+           pymsiecf_file_t *pymsiecf_file,
+           PyObject *arguments,
+           PyObject *keywords )
+{
+       PyObject *string_object     = NULL;
+       static char *keyword_list[] = { "cache_directory_index", NULL };
+       int cache_directory_index   = 0;
+
+       if( PyArg_ParseTupleAndKeywords(
+            arguments,
+            keywords,
+            "i",
+            keyword_list,
+            &cache_directory_index ) == 0 )
+       {
+               return( NULL );
+       }
+       string_object = pymsiecf_file_get_cache_directory_by_index(
+                        pymsiecf_file,
+                        cache_directory_index );
+
+       return( string_object );
+}
+
+/* Retrieves a cache directories sequence and iterator object for the cache 
directories
+ * Returns a Python object if successful or NULL on error
+ */
+PyObject *pymsiecf_file_get_cache_directories(
+           pymsiecf_file_t *pymsiecf_file,
+           PyObject *arguments PYMSIECF_ATTRIBUTE_UNUSED )
+{
+       libcerror_error_t *error           = NULL;
+       PyObject *cache_directories_object = NULL;
+       static char *function              = 
"pymsiecf_file_get_cache_directories";
+       int number_of_cache_directories    = 0;
+       int result                         = 0;
+
+       PYMSIECF_UNREFERENCED_PARAMETER( arguments )
+
+       if( pymsiecf_file == NULL )
+       {
+               PyErr_Format(
+                PyExc_TypeError,
+                "%s: invalid file.",
+                function );
+
+               return( NULL );
+       }
+       Py_BEGIN_ALLOW_THREADS
+
+       result = libmsiecf_file_get_number_of_cache_directories(
+                 pymsiecf_file->file,
+                 &number_of_cache_directories,
+                 &error );
+
+       Py_END_ALLOW_THREADS
+
+       if( result != 1 )
+       {
+               pymsiecf_error_raise(
+                error,
+                PyExc_IOError,
+                "%s: unable to retrieve number of cache directories.",
+                function );
+
+               libcerror_error_free(
+                &error );
+
+               return( NULL );
+       }
+       cache_directories_object = pymsiecf_cache_directories_new(
+                                   pymsiecf_file,
+                                   &pymsiecf_file_get_cache_directory_by_index,
+                                   number_of_cache_directories );
+
+       if( cache_directories_object == NULL )
+       {
+               PyErr_Format(
+                PyExc_MemoryError,
+                "%s: unable to create cache directories object.",
+                function );
+
+               return( NULL );
+       }
+       return( cache_directories_object );
+}
+
 /* Retrieves the number of items
  * Returns a Python object if successful or NULL on error
  */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/pymsiecf/pymsiecf_file.h 
new/libmsiecf-20150314/pymsiecf/pymsiecf_file.h
--- old/libmsiecf-20150106/pymsiecf/pymsiecf_file.h     2015-01-06 
07:10:29.000000000 +0100
+++ new/libmsiecf-20150314/pymsiecf/pymsiecf_file.h     2015-03-14 
17:50:26.000000000 +0100
@@ -122,6 +122,23 @@
            pymsiecf_file_t *pymsiecf_file,
            PyObject *arguments );
 
+PyObject *pymsiecf_file_get_number_of_cache_directories(
+           pymsiecf_file_t *pymsiecf_file,
+           PyObject *arguments );
+
+PyObject *pymsiecf_file_get_cache_directory_by_index(
+           pymsiecf_file_t *pymsiecf_file,
+           int cache_directory_index );
+
+PyObject *pymsiecf_file_get_cache_directory(
+           pymsiecf_file_t *pymsiecf_file,
+           PyObject *arguments,
+           PyObject *keywords );
+
+PyObject *pymsiecf_file_get_cache_directories(
+           pymsiecf_file_t *pymsiecf_file,
+           PyObject *arguments );
+
 PyObject *pymsiecf_file_get_number_of_items(
            pymsiecf_file_t *pymsiecf_file,
            PyObject *arguments );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libmsiecf-20150106/pymsiecf/setup.py 
new/libmsiecf-20150314/pymsiecf/setup.py
--- old/libmsiecf-20150106/pymsiecf/setup.py    2015-01-06 07:18:56.000000000 
+0100
+++ new/libmsiecf-20150314/pymsiecf/setup.py    2015-03-14 18:02:30.000000000 
+0100
@@ -26,10 +26,10 @@
 
 
 LIBRARY_NAME = "libmsiecf"
-LIBRARY_VERSION = "20150106"
+LIBRARY_VERSION = "20150314"
 MODULE_NAME = "py%s" % (LIBRARY_NAME[3:])
 # bdist_msi does not support the library version, neither a date as a version.
-MODULE_VERSION = "20150106.1"
+MODULE_VERSION = "20150314.1"
 PROJECT_URL = "https://github.com/libyal/%s/"; % (LIBRARY_NAME)
 
 DIRECTORY_NAMES = [


Reply via email to