diff --git a/msvc/exiv2lib/exiv2lib.vcproj b/msvc/exiv2lib/exiv2lib.vcproj
index c2cc4309..d7bb8985 100644
--- a/msvc/exiv2lib/exiv2lib.vcproj
+++ b/msvc/exiv2lib/exiv2lib.vcproj
@@ -5,272 +5,329 @@
Name="exiv2lib"
ProjectGUID="{831EF580-92C8-4CA8-B0CE-3D906280A54D}"
RootNamespace="exiv2lib"
- Keyword="Win32Proj">
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ Name="Win32"
+ />
+
+
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+
+
+
+
+
+ WarnAsError="true"
+ DebugInformationFormat="3"
+ />
+ Name="VCManagedResourceCompilerTool"
+ />
+
+
+ AdditionalLibraryDirectories="..\xmpsdk\Debug;..\..\..\expat-2.0.1\win32\bin\debug"
+ />
+ Name="VCALinkTool"
+ />
+
+
+
-
-
-
-
-
-
-
+ CommandLine="mkdir ..\bin\Debug\
copy/y "$(TargetPath)" ..\bin\Debug\$(TargetFileName)
"
+ />
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+
+
+
+
+
+ WarnAsError="true"
+ DebugInformationFormat="3"
+ />
+ Name="VCManagedResourceCompilerTool"
+ />
+
+
+ AdditionalLibraryDirectories="..\xmpsdk\Release;..\..\..\expat-2.0.1\win32\bin\release"
+ />
+ Name="VCALinkTool"
+ />
+
+
+
-
-
-
-
-
-
-
+ CommandLine="mkdir ..\bin\Release\
copy/y "$(TargetPath)" ..\bin\$(ConfigurationName)\$(TargetFileName)
"
+ />
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+
+
+
+
+
+ WarnAsError="false"
+ DebugInformationFormat="3"
+ />
+ Name="VCManagedResourceCompilerTool"
+ />
+
+
+ TargetMachine="1"
+ />
+ Name="VCALinkTool"
+ />
+
+
+
+
+
-
-
-
-
-
-
-
-
+ CommandLine="mkdir "$(SolutionDir)\bin\DebugDLL\"
copy/y ..\..\..\expat-2.0.1\win32\bin\Debug\libexpat.dll "$(SolutionDir)\bin\$(ConfigurationName)\"
copy/y "$(TargetPath)" "$(SolutionDir)\bin\$(ConfigurationName)\$(TargetFileName)"
copy/y "$(TargetDir)\*.dll" "$(SolutionDir)\bin\$(ConfigurationName)\"
copy/y "$(TargetDir)\*.lib" "$(SolutionDir)\bin\$(ConfigurationName)\"
"
+ />
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+
+
+
+
+
+ WarnAsError="false"
+ DebugInformationFormat="3"
+ />
+ Name="VCManagedResourceCompilerTool"
+ />
+
+
+ TargetMachine="1"
+ />
+ Name="VCALinkTool"
+ />
+
+
+
+
+
-
-
-
-
-
-
-
-
+ CommandLine="mkdir "$(SolutionDir)\bin\$(ConfigurationName)\"
copy/y ..\..\..\expat-2.0.1\win32\bin\Release\libexpat.dll "$(SolutionDir)\bin\$(ConfigurationName)\"
copy/y "$(TargetPath)" "$(SolutionDir)\bin\$(ConfigurationName)\$(TargetFileName)"
copy/y "$(TargetDir)\*.dll" "$(SolutionDir)\bin\$(ConfigurationName)\"
copy/y "$(TargetDir)\*.lib" "$(SolutionDir)\bin\$(ConfigurationName)\"
"
+ />
@@ -279,318 +336,396 @@ copy/y ..\..\..\zlib-1.2.3\projects\visualc6\Win32_DLL_Release\zlib1.dll $(OutDi
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ RelativePath="..\..\src\basicio.cpp"
+ >
+ RelativePath="..\..\src\bmpimage.cpp"
+ >
+ RelativePath="..\..\src\canonmn.cpp"
+ >
+ RelativePath="..\..\src\convert.cpp"
+ >
+ RelativePath="..\..\src\cr2image.cpp"
+ >
+ RelativePath="..\..\src\crwimage.cpp"
+ >
+ RelativePath="..\..\src\datasets.cpp"
+ >
+ RelativePath="..\..\src\easyaccess.cpp"
+ >
+ RelativePath="..\..\src\error.cpp"
+ >
+ RelativePath="..\..\src\exif.cpp"
+ >
+ RelativePath="..\..\src\fujimn.cpp"
+ >
+ RelativePath="..\..\src\futils.cpp"
+ >
+ RelativePath="..\..\src\gifimage.cpp"
+ >
+ RelativePath="..\..\src\image.cpp"
+ >
+ RelativePath="..\..\src\iptc.cpp"
+ >
+ RelativePath="..\..\src\jp2image.cpp"
+ >
+ RelativePath="..\..\src\jpgimage.cpp"
+ >
+ RelativePath="..\..\src\localtime.c"
+ >
+ RelativePath="..\..\src\makernote.cpp"
+ >
+ RelativePath="..\..\src\metadatum.cpp"
+ >
+ RelativePath="..\..\src\minoltamn.cpp"
+ >
+ RelativePath="..\..\src\mrwimage.cpp"
+ >
+ RelativePath="..\..\src\nikonmn.cpp"
+ >
+ RelativePath="..\..\src\olympusmn.cpp"
+ >
+ RelativePath="..\..\src\orfimage.cpp"
+ >
+ RelativePath="..\..\src\panasonicmn.cpp"
+ >
+ RelativePath="..\..\src\pentaxmn.cpp"
+ >
+ RelativePath="..\..\src\pngchunk.cpp"
+ >
+ Name="Debug|Win32"
+ >
+ GeneratePreprocessedFile="0"
+ />
+ RelativePath="..\..\src\pngimage.cpp"
+ >
+ RelativePath="..\..\src\preview.cpp"
+ >
+ RelativePath="..\..\src\properties.cpp"
+ >
+ RelativePath="..\..\src\psdimage.cpp"
+ >
+ RelativePath="..\..\src\rafimage.cpp"
+ >
+ RelativePath="..\..\src\rw2image.cpp"
+ >
+ RelativePath="..\..\src\sigmamn.cpp"
+ >
+ RelativePath="..\..\src\sonymn.cpp"
+ >
+ RelativePath="..\..\src\tags.cpp"
+ >
+ RelativePath="..\..\src\tgaimage.cpp"
+ >
+ RelativePath="..\..\src\tiffcomposite.cpp"
+ >
+ RelativePath="..\..\src\tiffimage.cpp"
+ >
+ RelativePath="..\..\src\tiffvisitor.cpp"
+ >
+ RelativePath="..\..\src\types.cpp"
+ >
+ RelativePath="..\..\src\value.cpp"
+ >
+ RelativePath="..\..\src\xmp.cpp"
+ >
+ RelativePath="..\..\src\xmpsidecar.cpp"
+ >
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ RelativePath="..\..\src\basicio.hpp"
+ >
+ RelativePath="..\..\src\bmpimage.hpp"
+ >
+ RelativePath="..\..\src\canonmn.hpp"
+ >
+ RelativePath="..\..\config.h"
+ >
+ RelativePath="..\..\src\convert.hpp"
+ >
+ RelativePath="..\..\src\cr2image.hpp"
+ >
+ RelativePath="..\..\src\crwimage.hpp"
+ >
+ RelativePath="..\..\src\datasets.hpp"
+ >
+ RelativePath="..\..\src\easyaccess.hpp"
+ >
+ RelativePath="..\..\src\error.hpp"
+ >
+ RelativePath="..\..\src\exif.hpp"
+ >
+ RelativePath="..\..\src\exv_msvc.h"
+ >
+ RelativePath="..\..\src\fujimn.hpp"
+ >
+ RelativePath="..\..\src\futils.hpp"
+ >
+ RelativePath="..\..\src\gifimage.hpp"
+ >
+ RelativePath="..\..\src\image.hpp"
+ >
+ RelativePath="..\..\src\iptc.hpp"
+ >
+ RelativePath="..\..\src\jp2image.hpp"
+ >
+ RelativePath="..\..\src\jpgimage.hpp"
+ >
+ RelativePath="..\..\src\makernote.hpp"
+ >
+ RelativePath="..\..\src\metadatum.hpp"
+ >
+ RelativePath="..\..\src\minoltamn.hpp"
+ >
+ RelativePath="..\..\src\mn.hpp"
+ >
+ RelativePath="..\..\src\mrwimage.hpp"
+ >
+ RelativePath="..\..\src\nikonmn.hpp"
+ >
+ RelativePath="..\..\src\olympusmn.hpp"
+ >
+ RelativePath="..\..\src\orfimage.hpp"
+ >
+ RelativePath="..\..\src\panasonicmn.hpp"
+ >
+ RelativePath="..\..\src\pentaxmn.hpp"
+ >
+ RelativePath="..\..\src\pngimage.hpp"
+ >
+ RelativePath="..\..\src\preview.hpp"
+ >
+ RelativePath="..\..\src\properties.hpp"
+ >
+ RelativePath="..\..\src\psdimage.hpp"
+ >
+ RelativePath="..\..\src\rafimage.hpp"
+ >
+ RelativePath="..\..\src\rcsid.hpp"
+ >
+ RelativePath="..\..\src\rw2image.hpp"
+ >
+ RelativePath="..\..\src\sigmamn.hpp"
+ >
+ RelativePath="..\..\src\sonymn.hpp"
+ >
+ RelativePath="..\..\src\tags.hpp"
+ >
+ RelativePath="..\..\src\tgaimage.hpp"
+ >
+ RelativePath="..\..\src\tiffcomposite.hpp"
+ >
+ RelativePath="..\..\src\tiffimage.hpp"
+ >
+ RelativePath="..\..\src\tiffvisitor.hpp"
+ >
+ RelativePath="..\..\src\types.hpp"
+ >
+ RelativePath="..\..\src\value.hpp"
+ >
+ RelativePath="..\..\src\xmp.hpp"
+ >
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
diff --git a/msvc/include/exv_msvc.h b/msvc/include/exv_msvc.h
index 8e734140..6e24da53 100644
--- a/msvc/include/exv_msvc.h
+++ b/msvc/include/exv_msvc.h
@@ -69,16 +69,6 @@ typedef int pid_t;
#define EXV_SEPERATOR_STR "\\"
#define EXV_SEPERATOR_CHR '\\'
-/* Define to 1 if you have the "sys/mman.h header file (and supporting code of course) */
-/* At this time (between 0.18.1 and 0.19) this is used by TIFF files to avoid reading */
-/* the total file into memory returning in a 6x improvement in exiv2 on 2mb tiff files */
-#define EXV_HAVE_SYS_MMAN_H 1
-#ifdef EXV_HAVE_SYS_MMAN_H
-#if EXV_HAVE_SYS_MMAN_H
-#define EXV_HAVE_MMAP 1
-#define EXV_HAVE_MUNMAP 1
-#endif
-#endif
/* Shared library support */
#ifdef EXV_HAVE_DLL
diff --git a/msvc/include/sys/mman.h b/msvc/include/sys/mman.h
deleted file mode 100644
index 6c9b315a..00000000
--- a/msvc/include/sys/mman.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- This file is part of the KDE libraries
- Copyright (C) 2004 Jaroslaw Staniek
-
- These sources are based on ftp://g.oswego.edu/pub/misc/malloc.c
- file by Doug Lea, released to the public domain.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KDEWIN_SYS_MMAN_H
-#define KDEWIN_SYS_MMAN_H
-
-// include everywhere
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define PROT_NONE 0
-#define PROT_READ 1
-#define PROT_WRITE 2
-#define PROT_EXEC 4
-
-/* These values don't really matter in windows mmap emulation */
-#define MAP_FILE 0
-#define MAP_SHARED 1
-#define MAP_PRIVATE 2
-#define MAP_TYPE 0xF
-#define MAP_FIXED 0x10
-#define MAP_ANONYMOUS 0x20
-#define MAP_ANON MAP_ANONYMOUS
-
-#define MAP_FAILED ((void *)-1)
-
-KDEWIN32_EXPORT void *mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);
-KDEWIN32_EXPORT int munmap(void *start, size_t length);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // KDEWIN_SYS_MMAN_H
diff --git a/msvc/include/sys/socket.h b/msvc/include/sys/socket.h
deleted file mode 100644
index 8d48c23f..00000000
--- a/msvc/include/sys/socket.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _sys_socket_h_
-#define _sys_socket_h_
-
-// rmills
-// minimum to enable mmap.cpp to compile without change
-
-#endif
diff --git a/msvc/include/sys/types.h b/msvc/include/sys/types.h
deleted file mode 100644
index 39ad7deb..00000000
--- a/msvc/include/sys/types.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _types_h_
-#define _types_h_
-// rmills
-// minimum required by exiv2
-//
-#include "winposix_export.h"
-#endif
-
diff --git a/msvc/include/winposix_export.h b/msvc/include/winposix_export.h
deleted file mode 100644
index abcc3685..00000000
--- a/msvc/include/winposix_export.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef _WINPOSIX_EXPORT_H_
-#define _WINPOSIX_EXPORT_H_
-
-// rmills
-// msvc/include/winposix_export.h
-//
-// I'm very appreciative and respectful of the work of Jaroslaw Staniek
-// in the KDE libraries where I found msvc/src/mmap.cpp and msvc/mman.h
-//
-// http://websvn.kde.org/trunk/KDE/kdelibs/win/include/msvc/sys/mman.h?revision=517357&view=markup&pathrev=519502
-// http://websvn.kde.org/trunk/KDE/kdelibs/win/src/mmap.c?revision=519502&view=markup&pathrev=519502
-
-// I have commented 2 essential tiny changes in mmap.cpp to make it compile with MSVC
-// I've also added a dummy sys/socket.h and sys/types.h file to keep everybody happy!
-//
-// the contents of this file are the minimum required to enable exiv2 to compile link and execute the mmap.cpp code
-//
-
-#ifndef ENOTSUP
-#define ENOTSUP 911
-#endif
-
-#ifndef off_t
-#define off_t size_t
-#endif
-
-#ifndef KDEWIN32_EXPORT
-#define KDEWIN32_EXPORT
-#endif
-
-// give MSVC 7.1 (VS 2003 .Net) encouragement to ignore _set_errno !
-#if _MSC_VER < 1400
-#ifndef _set_errno
-#define _set_errno(x)
-#endif
-#endif
-
-#endif
-
diff --git a/msvc/src/mmap.cpp b/msvc/src/mmap.cpp
deleted file mode 100644
index f85a5022..00000000
--- a/msvc/src/mmap.cpp
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- This file is part of the KDE libraries
- Copyright (c) 2006 Christian Ehrlicher
-
- These sources are based on ftp://g.oswego.edu/pub/misc/malloc.c
- file by Doug Lea, released to the public domain.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library 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
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#ifndef SECTION_MAP_EXECUTE_EXPLICIT
-//not defined in the February 2003 version of the Platform SDK
-#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
-#endif
-
-#ifndef FILE_MAP_EXECUTE
-//not defined in the February 2003 version of the Platform SDK
-#define FILE_MAP_EXECUTE SECTION_MAP_EXECUTE_EXPLICIT
-#endif
-
-#define MUNMAP_FAILURE (-1)
-
-#define USE_MALLOC_LOCK 1
-
-struct mmapInfos {
- HANDLE hFile; // the duplicated fd
- HANDLE hMap; // handle returned by CreateFileMapping
- void* start; // ptr returned by MapViewOfFile
-};
-
-CRITICAL_SECTION cs;
-
-// rmills - only change is to add long to the following 2 lines
-static long g_curMMapInfos = 0;
-static long g_maxMMapInfos = -1;
-static struct mmapInfos *g_mmapInfos = NULL;
-#define NEW_MMAP_STRUCT_CNT 10
-
-static int mapProtFlags(int flags, DWORD *dwAccess)
-{
- if ( ( flags & PROT_READ ) == PROT_READ ) {
- if ( ( flags & PROT_WRITE ) == PROT_WRITE ) {
- *dwAccess = FILE_MAP_WRITE;
- if ( ( flags & PROT_EXEC ) == PROT_EXEC ) {
- return PAGE_EXECUTE_READWRITE;
- }
- return PAGE_READWRITE;
- }
- if ( ( flags & PROT_EXEC ) == PROT_EXEC ) {
- *dwAccess = FILE_MAP_EXECUTE;
- return PAGE_EXECUTE_READ;
- }
- *dwAccess = FILE_MAP_READ;
- return PAGE_READONLY;
- }
- if ( ( flags & PROT_WRITE ) == PROT_WRITE ) {
- *dwAccess = FILE_MAP_COPY;
- return PAGE_WRITECOPY;
- }
- if ( ( flags & PROT_EXEC ) == PROT_EXEC ) {
- *dwAccess = FILE_MAP_EXECUTE;
- return PAGE_EXECUTE_READ;
- }
- *dwAccess = 0;
- return 0;
-}
-
-void *mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset)
-{
- struct mmapInfos mmi;
- DWORD dwAccess;
- DWORD flProtect;
- HANDLE hfd;
-
- if ( g_maxMMapInfos == -1 ) {
- g_maxMMapInfos = 0;
- InitializeCriticalSection( &cs );
- }
-
- flProtect = mapProtFlags( flags, &dwAccess );
- if ( flProtect == 0 ) {
- _set_errno( EINVAL );
- return MAP_FAILED;
- }
- // we don't support this atm
- if ( prot == MAP_FIXED ) {
- _set_errno( ENOTSUP );
- return MAP_FAILED;
- }
-
- if ( fd == -1 ) {
- _set_errno( EBADF );
- return MAP_FAILED;
- }
-
- hfd = (HANDLE)_get_osfhandle( fd );
- if ( hfd == INVALID_HANDLE_VALUE )
- return MAP_FAILED;
-
- if ( !DuplicateHandle( GetCurrentProcess(), hfd, GetCurrentProcess(),
- &mmi.hFile, 0, FALSE, DUPLICATE_SAME_ACCESS ) ) {
-#ifdef _DEBUG
- DWORD dwLastErr = GetLastError();
-#endif
- return MAP_FAILED;
- }
- mmi.hMap = CreateFileMapping( mmi.hFile, NULL, flProtect,
- 0, length, NULL );
- if ( mmi.hMap == 0 ) {
- _set_errno( EACCES );
- return MAP_FAILED;
- }
-
- mmi.start = MapViewOfFile( mmi.hMap, dwAccess, 0, offset, 0 );
- if ( mmi.start == 0 ) {
- DWORD dwLastErr = GetLastError();
- if ( dwLastErr == ERROR_MAPPED_ALIGNMENT )
- _set_errno( EINVAL );
- else
- _set_errno( EACCES );
- return MAP_FAILED;
- }
- EnterCriticalSection( &cs );
- if ( g_mmapInfos == NULL ) {
- g_maxMMapInfos = NEW_MMAP_STRUCT_CNT;
- g_mmapInfos = ( struct mmapInfos* )calloc( g_maxMMapInfos,
- sizeof( struct mmapInfos ) );
- }
- if( g_curMMapInfos == g_maxMMapInfos) {
- g_maxMMapInfos += NEW_MMAP_STRUCT_CNT;
- g_mmapInfos = ( struct mmapInfos* )realloc( g_mmapInfos,
- g_maxMMapInfos * sizeof( struct mmapInfos ) );
- }
- memcpy( &g_mmapInfos[g_curMMapInfos], &mmi, sizeof( struct mmapInfos) );
- g_curMMapInfos++;
-
- LeaveCriticalSection( &cs );
-
- return mmi.start;
-}
-
-int munmap(void *start, size_t length)
-{
- int i, j;
-
- for( i = 0; i < g_curMMapInfos; i++ ) {
- if( g_mmapInfos[i].start == start )
- break;
- }
- if( i == g_curMMapInfos ) {
- _set_errno( EINVAL );
- return -1;
- }
-
- UnmapViewOfFile( g_mmapInfos[i].start );
- CloseHandle( g_mmapInfos[i].hMap );
- CloseHandle( g_mmapInfos[i].hFile );
-
- EnterCriticalSection( &cs );
- for( j = i + 1; j < g_curMMapInfos; j++ ) {
- memcpy( &g_mmapInfos[ j - 1 ], &g_mmapInfos[ j ],
- sizeof( struct mmapInfos ) );
- }
- g_curMMapInfos--;
-
- if( g_curMMapInfos == 0 ) {
- free( g_mmapInfos );
- g_mmapInfos = NULL;
- g_maxMMapInfos = 0;
- }
- LeaveCriticalSection( &cs );
-
- return 0;
-}
diff --git a/src/basicio.cpp b/src/basicio.cpp
index 24815e0c..11763e49 100644
--- a/src/basicio.cpp
+++ b/src/basicio.cpp
@@ -77,6 +77,7 @@ namespace Exiv2 {
FileIo::~FileIo()
{
+ munmap();
close();
}
@@ -367,7 +368,9 @@ namespace Exiv2 {
int FileIo::open(const std::string& mode)
{
- close();
+ if (fp_ != 0) {
+ std::fclose(fp_);
+ }
openMode_ = mode;
opMode_ = opSeek;
@@ -383,7 +386,6 @@ namespace Exiv2 {
int FileIo::close()
{
- munmap();
if (fp_ != 0) {
std::fclose(fp_);
fp_= 0;