OSDN Git Service

Success Build TortoiseMerge release version and modify install script
[tortoisegit/TortoiseGitJp.git] / src / TortoiseMerge / libsvn_diff / zlibcpp.cpp
1 ///////////////////////////////////////////////////////////////////////////////\r
2 //\r
3 //  Module: zlibcpp.cpp\r
4 //\r
5 //    Desc: See zlibcpp.h\r
6 //\r
7 // Copyright (c) 2003 Michael Carruth\r
8 //\r
9 ///////////////////////////////////////////////////////////////////////////////\r
10 \r
11 \r
12 #include "stdafx.h"\r
13 #include "zlibcpp.h"\r
14 #include "utility.h"\r
15 \r
16 //////////////////////////////////////////////////////////////////////\r
17 // Construction/Destruction\r
18 //////////////////////////////////////////////////////////////////////\r
19 \r
20 \r
21 //-----------------------------------------------------------------------------\r
22 // CZLib::CZLib\r
23 //\r
24 // \r
25 //\r
26 CZLib::CZLib()\r
27 {\r
28    m_zf = 0;\r
29 }\r
30 \r
31 \r
32 //-----------------------------------------------------------------------------\r
33 // CZLib::~CZLib\r
34 //\r
35 // Close open zip file\r
36 //\r
37 CZLib::~CZLib()\r
38 {\r
39    if (m_zf)\r
40       Close();\r
41 }\r
42 \r
43 \r
44 //-----------------------------------------------------------------------------\r
45 // CZLib::Open\r
46 //\r
47 // Create or open zip file\r
48 //\r
49 BOOL CZLib::Open(string f_file, int f_nAppend)\r
50 {\r
51    m_zf = zipOpen(f_file.c_str(), f_nAppend);\r
52    return (m_zf != NULL);\r
53 }\r
54 \r
55 \r
56 //-----------------------------------------------------------------------------\r
57 // CZLib::Close\r
58 //\r
59 // Close open zip file\r
60 //\r
61 void CZLib::Close()\r
62 {\r
63    if (m_zf)\r
64       zipClose(m_zf, NULL);\r
65 \r
66    m_zf = 0;\r
67 }\r
68 \r
69 \r
70 //-----------------------------------------------------------------------------\r
71 // CZLib::AddFile\r
72 //\r
73 // Adds a file to the zip archive\r
74 //\r
75 BOOL CZLib::AddFile(string f_file)\r
76 {\r
77    BOOL bReturn = FALSE;\r
78 \r
79    // Open file being added\r
80    HANDLE hFile = NULL;\r
81    hFile = CreateFile(f_file.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\r
82    if (hFile)\r
83    {\r
84       // Get file creation date\r
85       FILETIME       ft = CUtility::getLastWriteFileTime(f_file);\r
86       zip_fileinfo   zi = {0};\r
87 \r
88       FileTimeToDosDateTime(\r
89          &ft,                       // last write FILETIME\r
90          ((LPWORD)&zi.dosDate)+1,   // dos date\r
91          ((LPWORD)&zi.dosDate)+0);  // dos time\r
92 \r
93       // Trim path off file name\r
94       string sFileName = f_file.substr(f_file.find_last_of(_T('\\')) + 1);\r
95 \r
96       // Start a new file in Zip\r
97       if (ZIP_OK == zipOpenNewFileInZip(m_zf, \r
98                                         sFileName.c_str(), \r
99                                         &zi, \r
100                                         NULL, \r
101                                         0, \r
102                                         NULL, \r
103                                         0, \r
104                                         NULL, \r
105                                         Z_DEFLATED, \r
106                                         Z_BEST_COMPRESSION))\r
107       {\r
108          // Write file to Zip in 4 KB chunks \r
109          const DWORD BUFFSIZE    = 4096;\r
110          TCHAR buffer[BUFFSIZE]  = _T("");\r
111          DWORD dwBytesRead       = 0;\r
112 \r
113          while (ReadFile(hFile, &buffer, BUFFSIZE, &dwBytesRead, NULL)\r
114                 && dwBytesRead)\r
115          {\r
116             if (ZIP_OK == zipWriteInFileInZip(m_zf, buffer, dwBytesRead)\r
117                && dwBytesRead < BUFFSIZE)\r
118             {\r
119                // Success\r
120                bReturn = TRUE;\r
121             }\r
122          }\r
123 \r
124          bReturn &= (ZIP_OK == zipCloseFileInZip(m_zf));\r
125       }\r
126       \r
127       bReturn &= CloseHandle(hFile);\r
128    }\r
129 \r
130    return bReturn;\r
131 }