Success build TortoiseMerge.
[TortoiseGit.git] / src / TortoiseMerge / libsvn_diff / zlibcpp.cpp
bloba1b533d985b08d95309daa80f378825554e41748
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // Module: zlibcpp.cpp
4 //
5 // Desc: See zlibcpp.h
6 //
7 // Copyright (c) 2003 Michael Carruth
8 //
9 ///////////////////////////////////////////////////////////////////////////////
12 #include "stdafx.h"
13 #include "zlibcpp.h"
14 #include "utility.h"
16 //////////////////////////////////////////////////////////////////////
17 // Construction/Destruction
18 //////////////////////////////////////////////////////////////////////
21 //-----------------------------------------------------------------------------
22 // CZLib::CZLib
24 //
26 CZLib::CZLib()
28 m_zf = 0;
32 //-----------------------------------------------------------------------------
33 // CZLib::~CZLib
35 // Close open zip file
37 CZLib::~CZLib()
39 if (m_zf)
40 Close();
44 //-----------------------------------------------------------------------------
45 // CZLib::Open
47 // Create or open zip file
49 BOOL CZLib::Open(string f_file, int f_nAppend)
51 m_zf = zipOpen(f_file.c_str(), f_nAppend);
52 return (m_zf != NULL);
56 //-----------------------------------------------------------------------------
57 // CZLib::Close
59 // Close open zip file
61 void CZLib::Close()
63 if (m_zf)
64 zipClose(m_zf, NULL);
66 m_zf = 0;
70 //-----------------------------------------------------------------------------
71 // CZLib::AddFile
73 // Adds a file to the zip archive
75 BOOL CZLib::AddFile(string f_file)
77 BOOL bReturn = FALSE;
79 // Open file being added
80 HANDLE hFile = NULL;
81 hFile = CreateFile(f_file.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
82 if (hFile)
84 // Get file creation date
85 FILETIME ft = CUtility::getLastWriteFileTime(f_file);
86 zip_fileinfo zi = {0};
88 FileTimeToDosDateTime(
89 &ft, // last write FILETIME
90 ((LPWORD)&zi.dosDate)+1, // dos date
91 ((LPWORD)&zi.dosDate)+0); // dos time
93 // Trim path off file name
94 string sFileName = f_file.substr(f_file.find_last_of(_T('\\')) + 1);
96 // Start a new file in Zip
97 if (ZIP_OK == zipOpenNewFileInZip(m_zf,
98 sFileName.c_str(),
99 &zi,
100 NULL,
102 NULL,
104 NULL,
105 Z_DEFLATED,
106 Z_BEST_COMPRESSION))
108 // Write file to Zip in 4 KB chunks
109 const DWORD BUFFSIZE = 4096;
110 TCHAR buffer[BUFFSIZE] = _T("");
111 DWORD dwBytesRead = 0;
113 while (ReadFile(hFile, &buffer, BUFFSIZE, &dwBytesRead, NULL)
114 && dwBytesRead)
116 if (ZIP_OK == zipWriteInFileInZip(m_zf, buffer, dwBytesRead)
117 && dwBytesRead < BUFFSIZE)
119 // Success
120 bReturn = TRUE;
124 bReturn &= (ZIP_OK == zipCloseFileInZip(m_zf));
127 bReturn &= CloseHandle(hFile);
130 return bReturn;