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 = [
