diff options
Diffstat (limited to 'zip/ZipArchive/ZipPlatformComm.cpp')
| -rw-r--r-- | zip/ZipArchive/ZipPlatformComm.cpp | 73 |
1 files changed, 53 insertions, 20 deletions
diff --git a/zip/ZipArchive/ZipPlatformComm.cpp b/zip/ZipArchive/ZipPlatformComm.cpp index 62469e2..1034ae3 100644 --- a/zip/ZipArchive/ZipPlatformComm.cpp +++ b/zip/ZipArchive/ZipPlatformComm.cpp @@ -1,6 +1,6 @@ ////////////////////////////////////////////////////////////////////////////////
-// This source file is part of the ZipArchive library source distribution and
-// is Copyrighted 2000 - 2007 by Artpol Software - Tadeusz Dracz
+// This source file is part of the ZipArchive Library Open Source distribution
+// and is Copyrighted 2000 - 2022 by Artpol Software - Tadeusz Dracz
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
@@ -9,27 +9,17 @@ //
// For the licensing details refer to the License.txt file.
//
-// Web Site: http://www.artpol-software.com
+// Web Site: https://www.artpol-software.com
////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ZipFile.h"
#include "ZipPlatform.h"
#include "ZipException.h"
+#include "ZipAutoBuffer.h"
using namespace ZipPlatform;
-bool ZipPlatform::DirectoryExists(LPCTSTR lpszDir)
-{
- CZipString sz;
- if (!GetCurrentDirectory(sz))
- return false;
- if (!ChangeDirectory(lpszDir))
- return false;
- ChangeDirectory(sz);
- return true;
-}
-
bool ZipPlatform::ForceDirectory(LPCTSTR lpDirectory)
{
ASSERT(lpDirectory);
@@ -41,7 +31,7 @@ bool ZipPlatform::ForceDirectory(LPCTSTR lpDirectory) return true;
if (!ForceDirectory(zpc.GetFilePath()))
return false;
- if (!CreateDirectory(szDirectory))
+ if (!CreateNewDirectory(szDirectory))
return false;
return true;
}
@@ -49,7 +39,7 @@ bool ZipPlatform::ForceDirectory(LPCTSTR lpDirectory) bool ZipPlatform::GetFileSize(LPCTSTR lpszFileName, ZIP_SIZE_TYPE& dSize)
{
CZipFile f;
- if (!f.Open(lpszFileName, CZipFile::modeRead | CZipFile::shareDenyWrite, false))
+ if (!f.Open(lpszFileName, CZipFile::modeRead | CZipFile::shareDenyNone, false))
return false;
bool ret;
try
@@ -60,14 +50,14 @@ bool ZipPlatform::GetFileSize(LPCTSTR lpszFileName, ZIP_SIZE_TYPE& dSize) if (ret)
dSize = (ZIP_SIZE_TYPE)size;
}
-#ifdef ZIP_ARCHIVE_MFC
+#ifdef _ZIP_IMPL_MFC
catch(CZipBaseException* e)
{
e->Delete();
ret = false;
}
#else
- catch(CZipBaseException e)
+ catch(CZipBaseException&)
{
ret = false;
}
@@ -77,13 +67,13 @@ bool ZipPlatform::GetFileSize(LPCTSTR lpszFileName, ZIP_SIZE_TYPE& dSize) {
f.Close();
}
-#ifdef ZIP_ARCHIVE_MFC
+#ifdef _ZIP_IMPL_MFC
catch(CZipBaseException* e)
{
e->Delete();
}
#else
- catch(CZipBaseException e)
+ catch(CZipBaseException&)
{
}
#endif
@@ -91,4 +81,47 @@ bool ZipPlatform::GetFileSize(LPCTSTR lpszFileName, ZIP_SIZE_TYPE& dSize) return ret;
}
+void ZipPlatform::ConvertTimeToFileTime(const time_t& ttime, ZFILETIME& fileTime)
+{
+ time_t t = ttime > 0 ? ttime : time(NULL);
+ LONGLONG val = ((LONGLONG)t * 10000000) + SUFFIX_I64(116444736000000000);
+ fileTime.dwLowDateTime = (DWORD)(val & 0xFFFFFFFF);
+ fileTime.dwHighDateTime = (DWORD)((val >> 32) & 0xFFFFFFFF);
+}
+
+bool ZipPlatform::ConvertFileTimeToTime(const ZFILETIME& fileTime, time_t& ttime)
+{
+ if ( fileTime.dwLowDateTime == 0 && fileTime.dwHighDateTime == 0)
+ {
+ ttime = 0;
+ return false;
+ }
+ LONGLONG val = (fileTime.dwLowDateTime & 0xFFFFFFFF);
+
+ val |= ((LONGLONG)fileTime.dwHighDateTime << 32) & SUFFIX_I64(0xFFFFFFFF00000000);
+ val -= SUFFIX_I64(116444736000000000);
+
+ ttime = (time_t)(val / 10000000);
+ return ttime > 0;
+}
+
+#ifdef _UNICODE
+
+int ZipPlatform::WideToMultiByte(LPCWSTR lpszIn, CZipAutoBuffer &szOut, UINT uCodePage)
+{
+ return WideToMultiByte(lpszIn, szOut, false, uCodePage);
+}
+
+int ZipPlatform::MultiByteToWide(const CZipAutoBuffer &szIn, CZipString& szOut, UINT uCodePage)
+{
+ int singleLen = szIn.GetSize();
+ if (singleLen == 0)
+ {
+ szOut.Empty();
+ return 0;
+ }
+ return MultiByteToWide(szIn, singleLen, szOut, uCodePage);
+}
+
+#endif
|
