v0.22
This commit is contained in:
parent
0f9dddcc52
commit
35c0b24c92
12 changed files with 654 additions and 360 deletions
|
@ -5,8 +5,8 @@ CPP = g++.exe
|
||||||
CC = gcc.exe
|
CC = gcc.exe
|
||||||
WINDRES = windres.exe
|
WINDRES = windres.exe
|
||||||
RES =
|
RES =
|
||||||
OBJ = main.o UnAlz.o UnAlzBz2decompress.o UnAlzBzip2.o UnAlzbzlib.o zlib/adler32.o zlib/crc32.o zlib/infblock.o zlib/infcodes.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/uncompr.o zlib/zutil.o bzip2/blocksort.o bzip2/compress.o bzip2/crctable.o bzip2/huffman.o bzip2/randtable.o $(RES)
|
OBJ = main.o UnAlz.o UnAlzBz2decompress.o UnAlzBzip2.o UnAlzbzlib.o zlib/adler32.o zlib/crc32.o zlib/infblock.o zlib/infcodes.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/zutil.o bzip2/blocksort.o bzip2/compress.o bzip2/crctable.o bzip2/huffman.o bzip2/randtable.o $(RES)
|
||||||
LINKOBJ = main.o UnAlz.o UnAlzBz2decompress.o UnAlzBzip2.o UnAlzbzlib.o zlib/adler32.o zlib/crc32.o zlib/infblock.o zlib/infcodes.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/uncompr.o zlib/zutil.o bzip2/blocksort.o bzip2/compress.o bzip2/crctable.o bzip2/huffman.o bzip2/randtable.o $(RES)
|
LINKOBJ = main.o UnAlz.o UnAlzBz2decompress.o UnAlzBzip2.o UnAlzbzlib.o zlib/adler32.o zlib/crc32.o zlib/infblock.o zlib/infcodes.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/zutil.o bzip2/blocksort.o bzip2/compress.o bzip2/crctable.o bzip2/huffman.o bzip2/randtable.o $(RES)
|
||||||
LIBS = -L"C:/Dev-Cpp/lib" -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32
|
LIBS = -L"C:/Dev-Cpp/lib" -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32
|
||||||
INCS = -I"C:/Dev-Cpp/include"
|
INCS = -I"C:/Dev-Cpp/include"
|
||||||
CXXINCS = -I"C:/Dev-Cpp/include/c++/3.3.1" -I"C:/Dev-Cpp/include/c++/3.3.1/mingw32" -I"C:/Dev-Cpp/include/c++/3.3.1/backward" -I"C:/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include" -I"C:/Dev-Cpp/include"
|
CXXINCS = -I"C:/Dev-Cpp/include/c++/3.3.1" -I"C:/Dev-Cpp/include/c++/3.3.1/mingw32" -I"C:/Dev-Cpp/include/c++/3.3.1/backward" -I"C:/Dev-Cpp/lib/gcc-lib/mingw32/3.3.1/include" -I"C:/Dev-Cpp/include"
|
||||||
|
@ -64,9 +64,6 @@ zlib/inftrees.o: zlib/inftrees.c
|
||||||
zlib/infutil.o: zlib/infutil.c
|
zlib/infutil.o: zlib/infutil.c
|
||||||
$(CC) -c zlib/infutil.c -o zlib/infutil.o $(CFLAGS)
|
$(CC) -c zlib/infutil.c -o zlib/infutil.o $(CFLAGS)
|
||||||
|
|
||||||
zlib/uncompr.o: zlib/uncompr.c
|
|
||||||
$(CC) -c zlib/uncompr.c -o zlib/uncompr.o $(CFLAGS)
|
|
||||||
|
|
||||||
zlib/zutil.o: zlib/zutil.c
|
zlib/zutil.o: zlib/zutil.c
|
||||||
$(CC) -c zlib/zutil.c -o zlib/zutil.o $(CFLAGS)
|
$(CC) -c zlib/zutil.c -o zlib/zutil.o $(CFLAGS)
|
||||||
|
|
||||||
|
|
279
UnAlz.cpp
279
UnAlz.cpp
|
@ -2,12 +2,66 @@
|
||||||
#include "zlib/zlib.h"
|
#include "zlib/zlib.h"
|
||||||
#include "bzip2/bzlib.h"
|
#include "bzip2/bzlib.h"
|
||||||
#include "UnAlz.h"
|
#include "UnAlz.h"
|
||||||
|
|
||||||
|
// mkdir
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <direct.h> // mkdir
|
# include <direct.h>
|
||||||
#else
|
#else
|
||||||
# include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// le16toh 등등..
|
||||||
|
#if (defined(__FreeBSD__) || defined(__DARWIN__))
|
||||||
|
# include <sys/endian.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __linux__ // __BYTE_ORDER 가져오기
|
||||||
|
# include <endian.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _UNALZ_ICONV // code page support
|
||||||
|
# include <iconv.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __linux__ // iconv.h 때문에 필요
|
||||||
|
# include <errno.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _WIN32 // WIN32 는 무조건 LITTLE 이니까 필요없다.
|
||||||
|
# define swapint64(Data) (INT64) ( (((Data)&0x00000000000000FFLL) << 56) | (((Data)&0x000000000000FF00LL) << 40) | (((Data)&0x0000000000FF0000LL) << 24) | (((Data)&0x00000000FF000000LL) << 8) | (((Data)&0x000000FF00000000LL) >> 8) | (((Data)&0x0000FF0000000000LL) >> 24) | (((Data)&0x00FF000000000000LL) >> 40) | (((Data)&0xFF00000000000000LL) >> 56) )
|
||||||
|
# define swapint32(a) ((((a)&0xff)<<24)+(((a>>8)&0xff)<<16)+(((a>>16)&0xff)<<8)+(((a>>24)&0xff)))
|
||||||
|
# define swapint16(a) (((a)&0xff)<<8)+(((a>>8)&0xff))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
//// byte-order : little to host ////
|
||||||
|
|
||||||
|
#ifdef _WIN32 // little to little
|
||||||
|
inline UINT16 unalz_le16toh(UINT16 a){return a;}
|
||||||
|
inline UINT32 unalz_le32toh(UINT32 a){return a;}
|
||||||
|
inline UINT64 unalz_le64toh(UINT64 a){return a;}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(__FreeBSD__) || defined(__DARWIN__))
|
||||||
|
inline UINT16 unalz_le16toh(UINT16 a){return le16toh(a);}
|
||||||
|
inline UINT32 unalz_le32toh(UINT32 a){return le32toh(a);}
|
||||||
|
inline UINT64 unalz_le64toh(UINT64 a){return le64toh(a);}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __linux__ // 리눅스에서 little 을 host 로 바꾸는 함수를 모르겠다.. 그래서 그냥 define 된걸로 판단한다.
|
||||||
|
# if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
inline UINT16 unalz_le16toh(UINT16 a){return swapint16(a);}
|
||||||
|
inline UINT32 unalz_le32toh(UINT32 a){return swapint32(a);}
|
||||||
|
inline UINT64 unalz_le64toh(UINT64 a){return swapint64(a);}
|
||||||
|
# else // __LITTLE_ENDIAN
|
||||||
|
inline UINT16 unalz_le16toh(UINT16 a){return (a);}
|
||||||
|
inline UINT32 unalz_le32toh(UINT32 a){return (a);}
|
||||||
|
inline UINT64 unalz_le64toh(UINT64 a){return (a);}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef MAX_PATH
|
#ifndef MAX_PATH
|
||||||
# define MAX_PATH 260
|
# define MAX_PATH 260
|
||||||
#endif
|
#endif
|
||||||
|
@ -20,6 +74,36 @@
|
||||||
# define PATHSEPC '/'
|
# define PATHSEPC '/'
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// error string table <- CUnAlz::ERR 의 번역
|
||||||
|
static const char* errorstrtable[]=
|
||||||
|
{
|
||||||
|
"no error", // ERR_NOERR
|
||||||
|
"can't open file", // ERR_CANT_OPEN_FILE
|
||||||
|
"can't read signature", // ERR_CANT_READ_SIG
|
||||||
|
"can't read file", // ERR_CANT_READ_FILE
|
||||||
|
"error at read header", // ERR_AT_READ_HEADER
|
||||||
|
"invalid filename length", // ERR_INVALID_FILENAME_LENGTH
|
||||||
|
"invalid extrafield length", // ERR_INVALID_EXTRAFIELD_LENGTH,
|
||||||
|
"can't read central directory structure head", // ERR_CANT_READ_CENTRAL_DIRECTORY_STRUCTURE_HEAD,
|
||||||
|
"invalid filename size", // ERR_INVALID_FILENAME_SIZE,
|
||||||
|
"invalid extrafield size", // ERR_INVALID_EXTRAFIELD_SIZE,
|
||||||
|
"invalid filecomment size", // ERR_INVALID_FILECOMMENT_SIZE,
|
||||||
|
"cant' read header", // ERR_CANT_READ_HEADER,
|
||||||
|
"memory allocation failed", // ERR_MEM_ALLOC_FAILED,
|
||||||
|
"file read eror", // ERR_FILE_READ_ERROR,
|
||||||
|
"inflate failed", // ERR_INFLATE_FAILED,
|
||||||
|
|
||||||
|
"iconv-can't open iconv", // ERR_ICONV_CANT_OPEN,
|
||||||
|
"iconv-invalid multisequence of characters", // ERR_ICONV_INVALID_MULTISEQUENCE_OF_CHARACTERS,
|
||||||
|
"iconv-incomplete multibyte sequence", // ERR_ICONV_INCOMPLETE_MULTIBYTE_SEQUENCE,
|
||||||
|
"iconv-not enough space of buffer to convert", // ERR_ICONV_NOT_ENOUGH_SPACE_OF_BUFFER_TO_CONVERT,
|
||||||
|
"iconv-etc", // ERR_ICONV_ETC,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/// ctor
|
/// ctor
|
||||||
/// @date 2004-03-06 오후 11:19:49
|
/// @date 2004-03-06 오후 11:19:49
|
||||||
|
@ -37,6 +121,17 @@ CUnAlz::CUnAlz()
|
||||||
m_nVirtualFilePos = 0;
|
m_nVirtualFilePos = 0;
|
||||||
m_nCurFilePos = 0;
|
m_nCurFilePos = 0;
|
||||||
m_bIsEOF = FALSE;
|
m_bIsEOF = FALSE;
|
||||||
|
|
||||||
|
#ifdef _UNALZ_ICONV
|
||||||
|
|
||||||
|
#ifdef _UNALZ_UTF8
|
||||||
|
strcpy(m_szToCodepage, "UTF-8") ; // 기본적으로 utf-8
|
||||||
|
#else
|
||||||
|
strcpy(m_szToCodepage, "CP949") ; // 기본적으로 CP949
|
||||||
|
#endif // _UNALZ_UTF8
|
||||||
|
|
||||||
|
strcpy(m_szFromCodepage, "CP949"); // alz 는 949 만 지원
|
||||||
|
#endif // _UNALZ_ICONV
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -58,20 +153,41 @@ void CUnAlz::SetCallback(_UnAlzCallback* pFunc, void* param)
|
||||||
m_pCallbackParam = param;
|
m_pCallbackParam = param;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#ifndef __GNUWIN32__
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/// 파일 열기
|
/// 파일 열기
|
||||||
/// @param szPathName
|
/// @param szPathName
|
||||||
/// @return
|
/// @return
|
||||||
/// @date 2004-03-06 오후 11:03:59
|
/// @date 2004-03-06 오후 11:03:59
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
#ifdef _WIN32
|
#include <atlbase.h>
|
||||||
/*
|
#include <atlconv.h>
|
||||||
BOOL CUnAlz::Open(LPCWSTR szPathName)
|
BOOL CUnAlz::Open(LPCWSTR szPathName)
|
||||||
{
|
{
|
||||||
USES_CONVERSION;
|
USES_CONVERSION;
|
||||||
return Open(W2A(szPathName));
|
return Open(W2A(szPathName));
|
||||||
}
|
}
|
||||||
*/
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// 대상 파일 세팅하기.
|
||||||
|
/// @param szFileName
|
||||||
|
/// @return
|
||||||
|
/// @date 2004-03-06 오후 11:06:20
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
BOOL CUnAlz::SetCurrentFile(LPCWSTR szFileName)
|
||||||
|
{
|
||||||
|
USES_CONVERSION;
|
||||||
|
return SetCurrentFile(W2A(szFileName));
|
||||||
|
}
|
||||||
|
BOOL CUnAlz::IsFolder(LPCWSTR szPathName)
|
||||||
|
{
|
||||||
|
UINT32 dwRet;
|
||||||
|
dwRet = GetFileAttributesW(szPathName);
|
||||||
|
if(dwRet==0xffffffff) return FALSE;
|
||||||
|
if(dwRet & FILE_ATTRIBUTE_DIRECTORY) return TRUE;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
#endif // __GNUWIN32__
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
BOOL CUnAlz::Open(const char* szPathName)
|
BOOL CUnAlz::Open(const char* szPathName)
|
||||||
|
@ -95,7 +211,7 @@ BOOL CUnAlz::Open(const char* szPathName)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(sig==SIG_ERR)
|
if(sig==SIG_ERROR)
|
||||||
{
|
{
|
||||||
return FALSE; // 깨진 파일..
|
return FALSE; // 깨진 파일..
|
||||||
}
|
}
|
||||||
|
@ -149,17 +265,17 @@ void CUnAlz::Close()
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
CUnAlz::SIGNATURE CUnAlz::ReadSignature()
|
CUnAlz::SIGNATURE CUnAlz::ReadSignature()
|
||||||
{
|
{
|
||||||
DWORD dwSig;
|
UINT32 dwSig;
|
||||||
if(FRead(&dwSig, sizeof(dwSig))==FALSE)
|
if(FRead(&dwSig, sizeof(dwSig))==FALSE)
|
||||||
{
|
{
|
||||||
//int pos = ftell(m_fp);
|
//int pos = ftell(m_fp);
|
||||||
if(FEof())
|
if(FEof())
|
||||||
return SIG_EOF;
|
return SIG_EOF;
|
||||||
m_nErr = ERR_CANT_READ_SIG;
|
m_nErr = ERR_CANT_READ_SIG;
|
||||||
return SIG_ERR;
|
return SIG_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (SIGNATURE)dwSig;
|
return (SIGNATURE)unalz_le32toh(dwSig); // little to host;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -210,6 +326,10 @@ BOOL CUnAlz::ReadLocalFileheader()
|
||||||
FRead(&(zipHeader.uncompressedSize), byteLen); // 압축 사이즈가 없다.
|
FRead(&(zipHeader.uncompressedSize), byteLen); // 압축 사이즈가 없다.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// little to system
|
||||||
|
zipHeader.head.fileNameLength = unalz_le16toh(zipHeader.head.fileNameLength);
|
||||||
|
zipHeader.compressedSize = unalz_le64toh(zipHeader.compressedSize);
|
||||||
|
zipHeader.uncompressedSize = unalz_le64toh(zipHeader.uncompressedSize);
|
||||||
|
|
||||||
// FILE NAME
|
// FILE NAME
|
||||||
zipHeader.fileName = (char*)malloc(zipHeader.head.fileNameLength+1);
|
zipHeader.fileName = (char*)malloc(zipHeader.head.fileNameLength+1);
|
||||||
|
@ -221,6 +341,68 @@ BOOL CUnAlz::ReadLocalFileheader()
|
||||||
FRead(zipHeader.fileName, zipHeader.head.fileNameLength);
|
FRead(zipHeader.fileName, zipHeader.head.fileNameLength);
|
||||||
zipHeader.fileName[zipHeader.head.fileNameLength] = (CHAR)NULL;
|
zipHeader.fileName[zipHeader.head.fileNameLength] = (CHAR)NULL;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _UNALZ_ICONV // codepage convert
|
||||||
|
|
||||||
|
if(strlen(m_szToCodepage))
|
||||||
|
{
|
||||||
|
|
||||||
|
#define ICONV_BUF_SIZE (260*6) // utf8 은 최대 6byte
|
||||||
|
size_t ileft, oleft;
|
||||||
|
iconv_t cd;
|
||||||
|
size_t iconv_result;
|
||||||
|
size_t size;
|
||||||
|
char inbuf[ICONV_BUF_SIZE];
|
||||||
|
char outbuf[ICONV_BUF_SIZE];
|
||||||
|
#ifdef __FreeBSD__
|
||||||
|
const char *inptr = inbuf;
|
||||||
|
#else
|
||||||
|
char *inptr = inbuf;
|
||||||
|
#endif
|
||||||
|
char *outptr = outbuf;
|
||||||
|
|
||||||
|
size = strlen(zipHeader.fileName)+1;
|
||||||
|
strncpy(inbuf, zipHeader.fileName, size);
|
||||||
|
ileft = size;
|
||||||
|
oleft = sizeof(outbuf);
|
||||||
|
|
||||||
|
cd = iconv_open(m_szToCodepage, m_szFromCodepage); // 보통 "CP949" 에서 "UTF-8" 로
|
||||||
|
iconv(cd, NULL, NULL, NULL, NULL);
|
||||||
|
if( cd == (iconv_t)(-1))
|
||||||
|
{
|
||||||
|
m_nErr = ERR_ICONV_CANT_OPEN; // printf("Converting Error : Cannot open iconv");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iconv_result = iconv(cd, &inptr, &ileft, &outptr, &oleft);
|
||||||
|
|
||||||
|
if(iconv_result== (size_t)(-1)) // iconv 실패..
|
||||||
|
{
|
||||||
|
if (errno == EILSEQ)
|
||||||
|
m_nErr = ERR_ICONV_INVALID_MULTISEQUENCE_OF_CHARACTERS; // printf("Invalid Multibyte Sequence of Characters");
|
||||||
|
else if (errno == EINVAL)
|
||||||
|
m_nErr = ERR_ICONV_INCOMPLETE_MULTIBYTE_SEQUENCE; //printf("Incomplete multibyte sequence");
|
||||||
|
else if (errno != E2BIG)
|
||||||
|
m_nErr = ERR_ICONV_NOT_ENOUGH_SPACE_OF_BUFFER_TO_CONVERT; // printf("Not enough space of buffer to convert");
|
||||||
|
else
|
||||||
|
m_nErr = ERR_ICONV_ETC;
|
||||||
|
iconv_close(cd);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outbuf[ICONV_BUF_SIZE-oleft] = 0;
|
||||||
|
strcpy(zipHeader.fileName, outbuf);
|
||||||
|
// printf("\n Converted File Name : %s", outbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
iconv_close(cd);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// EXTRA FIELD LENGTH
|
// EXTRA FIELD LENGTH
|
||||||
if(zipHeader.head.extraFieldLength)
|
if(zipHeader.head.extraFieldLength)
|
||||||
|
@ -345,21 +527,6 @@ BOOL CUnAlz::ReadEndofCentralDirectoryRecord()
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// ´ë»ó ÆÄÀÏ ¼¼ÆÃÇϱâ.
|
|
||||||
/// @param szFileName
|
|
||||||
/// @return
|
|
||||||
/// @date 2004-03-06 ¿ÀÈÄ 11:06:20
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
#ifdef _WIN32
|
|
||||||
/*
|
|
||||||
BOOL CUnAlz::SetCurrentFile(LPCWSTR szFileName)
|
|
||||||
{
|
|
||||||
USES_CONVERSION;
|
|
||||||
return SetCurrentFile(W2A(szFileName));
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
#endif // _WIN32
|
|
||||||
|
|
||||||
BOOL CUnAlz::SetCurrentFile(const char* szFileName)
|
BOOL CUnAlz::SetCurrentFile(const char* szFileName)
|
||||||
{
|
{
|
||||||
|
@ -431,6 +598,17 @@ BOOL CUnAlz::ExtractCurrentFile(const char* szDestPathName, const char* szDestFi
|
||||||
if(szDestFileName) strcat(szDestPathFileName, szDestFileName);
|
if(szDestFileName) strcat(szDestPathFileName, szDestFileName);
|
||||||
else strcat(szDestPathFileName, m_posCur->fileName);
|
else strcat(szDestPathFileName, m_posCur->fileName);
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
{
|
||||||
|
char* p = szDestPathFileName; // 경로 delimiter 바꾸기
|
||||||
|
while(*p)
|
||||||
|
{
|
||||||
|
if(*p=='\\') *p='/';
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// 압축풀 대상 ( 파일 )
|
// 압축풀 대상 ( 파일 )
|
||||||
dest.nType = ET_FILE;
|
dest.nType = ET_FILE;
|
||||||
dest.fp = fopen(szDestPathFileName, "wb");
|
dest.fp = fopen(szDestPathFileName, "wb");
|
||||||
|
@ -441,6 +619,7 @@ BOOL CUnAlz::ExtractCurrentFile(const char* szDestPathName, const char* szDestFi
|
||||||
dest.fp = fopen(szDestPathFileName, "wb");
|
dest.fp = fopen(szDestPathFileName, "wb");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
if(dest.fp==NULL)
|
if(dest.fp==NULL)
|
||||||
{
|
{
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
|
@ -452,12 +631,12 @@ BOOL CUnAlz::ExtractCurrentFile(const char* szDestPathName, const char* szDestFi
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
// CALLBACK 세팅
|
// CALLBACK 세팅
|
||||||
if(m_pFuncCallBack) m_pFuncCallBack(m_posCur->fileName, 0,0,m_pCallbackParam, NULL);
|
if(m_pFuncCallBack) m_pFuncCallBack(m_posCur->fileName, 0,0,m_pCallbackParam, NULL);
|
||||||
|
|
||||||
ret = ExtractTo(&dest);
|
ret = ExtractTo(&dest);
|
||||||
fclose(dest.fp);
|
if(dest.fp!=NULL)fclose(dest.fp);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -625,10 +804,8 @@ BOOL CUnAlz::DigPath(const char* szPathName)
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
_mkdir(path);
|
_mkdir(path);
|
||||||
#else
|
#else
|
||||||
//printf("mkdir:%s\n", path);
|
|
||||||
mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
|
mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
token = strtok( NULL, seps );
|
token = strtok( NULL, seps );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -646,7 +823,7 @@ BOOL CUnAlz::DigPath(const char* szPathName)
|
||||||
BOOL CUnAlz::IsFolder(LPCSTR szPathName)
|
BOOL CUnAlz::IsFolder(LPCSTR szPathName)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
DWORD dwRet;
|
UINT32 dwRet;
|
||||||
dwRet = GetFileAttributesA(szPathName);
|
dwRet = GetFileAttributesA(szPathName);
|
||||||
if(dwRet==0xffffffff) return FALSE;
|
if(dwRet==0xffffffff) return FALSE;
|
||||||
if(dwRet & FILE_ATTRIBUTE_DIRECTORY) return TRUE;
|
if(dwRet & FILE_ATTRIBUTE_DIRECTORY) return TRUE;
|
||||||
|
@ -663,19 +840,6 @@ BOOL CUnAlz::IsFolder(LPCSTR szPathName)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#ifdef _WIN32
|
|
||||||
/*
|
|
||||||
BOOL CUnAlz::IsFolder(LPCWSTR szPathName)
|
|
||||||
{
|
|
||||||
DWORD dwRet;
|
|
||||||
dwRet = GetFileAttributesW(szPathName);
|
|
||||||
if(dwRet==0xffffffff) return FALSE;
|
|
||||||
if(dwRet & FILE_ATTRIBUTE_DIRECTORY) return TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
#endif // _WIN32
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
/// 압축을 풀 대상에 압축을 푼다.
|
/// 압축을 풀 대상에 압축을 푼다.
|
||||||
|
@ -727,7 +891,7 @@ BOOL CUnAlz::ExtractBzip2_bak(FILE* fp, SLocalFileHeader& file)
|
||||||
//int err;
|
//int err;
|
||||||
int flush=Z_SYNC_FLUSH;
|
int flush=Z_SYNC_FLUSH;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
DWORD crc = 0xffffffff;
|
UINT32 crc = 0xffffffff;
|
||||||
|
|
||||||
//BYTE temp[100];
|
//BYTE temp[100];
|
||||||
|
|
||||||
|
@ -968,7 +1132,7 @@ BOOL CUnAlz::ExtractDeflate2(SExtractDest* dest, SLocalFileHeader& file)
|
||||||
int flush=Z_SYNC_FLUSH;
|
int flush=Z_SYNC_FLUSH;
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
INT64 nRestReadCompressed;
|
INT64 nRestReadCompressed;
|
||||||
DWORD dwCRC32= 0;
|
UINT32 dwCRC32= 0;
|
||||||
INT64 rest_read_uncompressed;
|
INT64 rest_read_uncompressed;
|
||||||
UINT iRead = 0;
|
UINT iRead = 0;
|
||||||
INT64 nWritten = 0;
|
INT64 nWritten = 0;
|
||||||
|
@ -1075,7 +1239,7 @@ BOOL CUnAlz::FOpen(const char* szPathName)
|
||||||
char* temp = strdup(szPathName); // 파일명 복사..
|
char* temp = strdup(szPathName); // 파일명 복사..
|
||||||
int i;
|
int i;
|
||||||
int nLen = strlen(szPathName);
|
int nLen = strlen(szPathName);
|
||||||
DWORD dwFileSizeLow,dwFileSizeHigh;
|
UINT32 dwFileSizeLow,dwFileSizeHigh;
|
||||||
m_nFileCount = 0;
|
m_nFileCount = 0;
|
||||||
m_nCurFile = 0;
|
m_nCurFile = 0;
|
||||||
m_nVirtualFilePos = 0;
|
m_nVirtualFilePos = 0;
|
||||||
|
@ -1087,13 +1251,13 @@ BOOL CUnAlz::FOpen(const char* szPathName)
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
m_files[i].fp = CreateFileA(temp, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
m_files[i].fp = CreateFileA(temp, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||||
if(m_files[i].fp==INVALID_HANDLE_VALUE) break;
|
if(m_files[i].fp==INVALID_HANDLE_VALUE) break;
|
||||||
dwFileSizeLow = GetFileSize(m_files[i].fp, &dwFileSizeHigh);
|
dwFileSizeLow = GetFileSize(m_files[i].fp, (DWORD*)&dwFileSizeHigh);
|
||||||
#else
|
#else
|
||||||
m_files[i].fp = fopen(temp, "rb");
|
m_files[i].fp = fopen(temp, "rb");
|
||||||
if(m_files[i].fp==NULL) break;
|
if(m_files[i].fp==NULL) break;
|
||||||
dwFileSizeHigh=0;
|
dwFileSizeHigh=0;
|
||||||
fseek(m_files[i].fp,0,SEEK_END);
|
fseek(m_files[i].fp,0,SEEK_END);
|
||||||
dwFileSizeLow=ftell(m_files[i].fp);
|
dwFileSizeLow=ftell(m_files[i].fp); // _LARGEFILE64_SOURCE 호환성 문제 발생.. T.T
|
||||||
fseek(m_files[i].fp,0,SEEK_SET);
|
fseek(m_files[i].fp,0,SEEK_SET);
|
||||||
#endif
|
#endif
|
||||||
m_nFileCount++;
|
m_nFileCount++;
|
||||||
|
@ -1201,13 +1365,13 @@ BOOL CUnAlz::FSeek(INT64 offset)
|
||||||
/// @return
|
/// @return
|
||||||
/// @date 2004-10-02 오후 11:44:05
|
/// @date 2004-10-02 오후 11:44:05
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
BOOL CUnAlz::FRead(void* buffer, DWORD nBytesToRead, int* pTotRead )
|
BOOL CUnAlz::FRead(void* buffer, UINT32 nBytesToRead, int* pTotRead )
|
||||||
{
|
{
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
DWORD nNumOfBytesRead;
|
UINT32 nNumOfBytesRead;
|
||||||
INT64 dwRemain;
|
INT64 dwRemain;
|
||||||
DWORD dwRead;
|
UINT32 dwRead;
|
||||||
DWORD dwTotRead;
|
UINT32 dwTotRead;
|
||||||
|
|
||||||
dwRemain = nBytesToRead;
|
dwRemain = nBytesToRead;
|
||||||
dwTotRead = 0;
|
dwTotRead = 0;
|
||||||
|
@ -1215,12 +1379,12 @@ BOOL CUnAlz::FRead(void* buffer, DWORD nBytesToRead, int* pTotRead )
|
||||||
|
|
||||||
while(dwRemain)
|
while(dwRemain)
|
||||||
{
|
{
|
||||||
dwRead = (DWORD)min(dwRemain, (m_files[m_nCurFile].nFileSize-m_nCurFilePos-m_files[m_nCurFile].nMultivolTailSize));
|
dwRead = (UINT32)min(dwRemain, (m_files[m_nCurFile].nFileSize-m_nCurFilePos-m_files[m_nCurFile].nMultivolTailSize));
|
||||||
if(dwRead==0) {
|
if(dwRead==0) {
|
||||||
m_bIsEOF = TRUE;return FALSE;
|
m_bIsEOF = TRUE;return FALSE;
|
||||||
}
|
}
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
ret = ReadFile(m_files[m_nCurFile].fp, ((BYTE*)buffer)+dwTotRead, dwRead, &nNumOfBytesRead, NULL);
|
ret = ReadFile(m_files[m_nCurFile].fp, ((BYTE*)buffer)+dwTotRead, dwRead, (DWORD*)&nNumOfBytesRead, NULL);
|
||||||
if(ret==FALSE && GetLastError()==ERROR_HANDLE_EOF)
|
if(ret==FALSE && GetLastError()==ERROR_HANDLE_EOF)
|
||||||
{
|
{
|
||||||
m_bIsEOF = TRUE;return FALSE;
|
m_bIsEOF = TRUE;return FALSE;
|
||||||
|
@ -1274,3 +1438,14 @@ BOOL CUnAlz::FRead(void* buffer, DWORD nBytesToRead, int* pTotRead )
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// error code 를 스트링으로 바꿔 준다.
|
||||||
|
/// @param nERR
|
||||||
|
/// @return
|
||||||
|
/// @date 2004-10-24 오후 3:28:39
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
const char* CUnAlz::LastErrToStr(ERR nERR)
|
||||||
|
{
|
||||||
|
if(nERR>= sizeof(errorstrtable)/sizeof(errorstrtable[0])) {ASSERT(0); return NULL; }
|
||||||
|
return errorstrtable[nERR];
|
||||||
|
}
|
||||||
|
|
136
UnAlz.h
136
UnAlz.h
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
|
|
||||||
COPYRIGHT(C) 2004 hardkoder@gmail.com / http://www.kipple.pe.kr
|
COPYRIGHT(C) 2004 hardkoder@gmail.com / http://www.kipple.pe.kr
|
||||||
|
|
||||||
저작권 정보 :
|
저작권 정보 :
|
||||||
- 이 소스는 자유로이 사용/수정/재배포 가능합니다.
|
- 이 소스는 자유로이 사용/수정/재배포 가능합니다.
|
||||||
- 단, 당신이 만들었다고 주장하거나 거짓말하면 안됨.
|
- 단, 당신이 만들었다고 주장하거나 거짓말하면 안됨.
|
||||||
|
@ -17,11 +18,6 @@
|
||||||
원래의 bzip2 소스를 그대로 쓰면 안된다. )
|
원래의 bzip2 소스를 그대로 쓰면 안된다. )
|
||||||
- 이 소스는 4칸 탭을 사용 하였음.
|
- 이 소스는 4칸 탭을 사용 하였음.
|
||||||
|
|
||||||
참고 :
|
|
||||||
- 원래 소스는 다중 플랫폼에서 사용할수 있게 하기 위해서 stdio 를 사용하였지만
|
|
||||||
2GB 이상의 파일을 처리하기 위해서 어쩔수 없이 WINDOWS I/O 함수로 전부 바꾸었음.
|
|
||||||
- 리눅스등에서 사용하기 위해서 소스 수정이 필요하다면, 공동 작업을 요청해 주셈.
|
|
||||||
|
|
||||||
개발 순서 :
|
개발 순서 :
|
||||||
2004/02/06 - http://www.wotsit.org/ 에서 ZIP File Format Specification version 4.5 [PKWARE Inc.] 를
|
2004/02/06 - http://www.wotsit.org/ 에서 ZIP File Format Specification version 4.5 [PKWARE Inc.] 를
|
||||||
다운로드 받아서 분석.
|
다운로드 받아서 분석.
|
||||||
|
@ -34,21 +30,29 @@
|
||||||
- callback 구현..
|
- callback 구현..
|
||||||
2004/03/07 - 유틸 함수 추가 ( ExtractCurrentFileToBuf() )
|
2004/03/07 - 유틸 함수 추가 ( ExtractCurrentFileToBuf() )
|
||||||
2004/10/03 - 분할 압축 해제 기능 추가 ( FILE I/O 에 대한 래퍼 클래스 구현 )
|
2004/10/03 - 분할 압축 해제 기능 추가 ( FILE I/O 에 대한 래퍼 클래스 구현 )
|
||||||
- 2GB 이상의 파일 처리 지원
|
- 2GB 이상의 파일 처리 지원 (WINDOWS ONLY)
|
||||||
|
2004/10/22 - 다중 플랫폼(BSD/LINUX)지원을 위한 수정
|
||||||
|
( BSD/LINUX 의 경우 2GB 이하의 파일만 지원 )
|
||||||
|
2004/10/23 - by xxfree86 : DARWIN 컴파일 지원, 경로명에 "\\" 포함시 문제점 수정
|
||||||
|
2004/10/24 - by aqua0125 : 코드페이지 변환처리, 64bit 파일 처리
|
||||||
|
- 빅엔디안, 코드페이지 변환 관련 소스 정리
|
||||||
|
2004/10/25 - by yongari : __LP64__ , 빅엔디안(le64toh/le132oh/le16toh) 관련 이슈 수정
|
||||||
|
2004/10/26 - BSD/LINUX : byte-order, libiconv 이슈 정리
|
||||||
|
|
||||||
할일 :
|
|
||||||
- bzip2 로 압축된 파일의 압축 해제
|
|
||||||
- UI 개선 ( PROGRESS, 에러 메시지 출력, 압축 해제 결과 )
|
|
||||||
- 분할 압축 파일 지원
|
|
||||||
|
|
||||||
|
할일 : ( * 표는 한거 )
|
||||||
|
- bzip2 로 압축된 파일의 압축 해제 *
|
||||||
|
- UI 개선 ( PROGRESS, 에러 메시지 출력, 압축 해제 결과 ) *
|
||||||
|
- 분할 압축 파일 지원 *
|
||||||
- 암호 걸린 파일 지원
|
- 암호 걸린 파일 지원
|
||||||
- 손상된 파일에서의 좀더 많은 테스트
|
- 손상된 파일에서의 좀더 많은 테스트
|
||||||
- 파일 CRC 체크
|
- 파일 CRC 체크
|
||||||
|
|
||||||
할일중 한일 :
|
컴파일 옵션 ( -DXXXX )
|
||||||
- bzip2 로 압축된 파일의 압축 해제
|
- _WIN32 : WIN32
|
||||||
- UI 개선 ( PROGRESS, 에러 메시지 출력, 압축 해제 결과 )
|
- _UNALZ_ICONV : iconv 를 사용해서 code 페이지 변환 지원
|
||||||
- 분할 압축 파일 지원
|
- _UNALZ_UTF8 : _UNALZ_ICONV 를 사용할 경우 기본 코드페이지를 "UTF-8" 로 지정
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,9 +72,22 @@ using namespace std;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef DWORD
|
#ifndef UINT64
|
||||||
typedef unsigned long DWORD;
|
#ifdef _WIN32
|
||||||
#endif // DWORD
|
# define UINT64 unsigned __int64
|
||||||
|
#else
|
||||||
|
# define UINT64 unsigned long long
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT32
|
||||||
|
typedef unsigned int UINT32;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef UINT16
|
||||||
|
typedef unsigned short UINT16;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef SHORT
|
#ifndef SHORT
|
||||||
typedef short SHORT;
|
typedef short SHORT;
|
||||||
#endif
|
#endif
|
||||||
|
@ -116,9 +133,6 @@ using namespace std;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace UNALZ
|
namespace UNALZ
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -128,14 +142,14 @@ namespace UNALZ
|
||||||
# pragma pack(1)
|
# pragma pack(1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char UNALZ_VERSION[] = "CUnAlz0.2";
|
static const char UNALZ_VERSION[] = "CUnAlz0.21";
|
||||||
static const char UNALZ_COPYRIGHT[] = "Copyright(C) 2004 hardkoder@gmail.com";
|
static const char UNALZ_COPYRIGHT[] = "Copyright(C) 2004 hardkoder@gmail.com";
|
||||||
|
|
||||||
|
|
||||||
// 맨 파일 앞..
|
// 맨 파일 앞..
|
||||||
struct SAlzHeader
|
struct SAlzHeader
|
||||||
{
|
{
|
||||||
DWORD unknown; // ??
|
UINT32 unknown; // ??
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -174,9 +188,9 @@ struct _SLocalFileHeaderHead ///<
|
||||||
SHORT compressionMethod;
|
SHORT compressionMethod;
|
||||||
SHORT lastModFileTime;
|
SHORT lastModFileTime;
|
||||||
SHORT lastModFileDate;
|
SHORT lastModFileDate;
|
||||||
DWORD crc32;
|
UINT32 crc32;
|
||||||
DWORD compressedSize;
|
UINT32 compressedSize;
|
||||||
DWORD uncompressedSize;
|
UINT32 uncompressedSize;
|
||||||
SHORT fileNameLength;
|
SHORT fileNameLength;
|
||||||
SHORT extraFieldLength;
|
SHORT extraFieldLength;
|
||||||
*/
|
*/
|
||||||
|
@ -184,9 +198,9 @@ struct _SLocalFileHeaderHead ///<
|
||||||
|
|
||||||
struct _SDataDescriptor
|
struct _SDataDescriptor
|
||||||
{
|
{
|
||||||
DWORD crc32;
|
UINT32 crc32;
|
||||||
DWORD compressed;
|
UINT32 compressed;
|
||||||
DWORD uncompressed;
|
UINT32 uncompressed;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SLocalFileHeader
|
struct SLocalFileHeader
|
||||||
|
@ -198,7 +212,7 @@ struct SLocalFileHeader
|
||||||
|
|
||||||
BYTE compressionMethod; ///< 압축 방법 : 2 - deflate, 1 - bzip2(?), 0 - 압축 안함.
|
BYTE compressionMethod; ///< 압축 방법 : 2 - deflate, 1 - bzip2(?), 0 - 압축 안함.
|
||||||
BYTE unknown3[1]; ///< ???
|
BYTE unknown3[1]; ///< ???
|
||||||
DWORD maybeCRC; ///< 아마도 crc
|
UINT32 maybeCRC; ///< 아마도 crc
|
||||||
|
|
||||||
INT64 compressedSize;
|
INT64 compressedSize;
|
||||||
INT64 uncompressedSize;
|
INT64 uncompressedSize;
|
||||||
|
@ -211,9 +225,9 @@ struct SLocalFileHeader
|
||||||
|
|
||||||
struct _SCentralDirectoryStructureHead
|
struct _SCentralDirectoryStructureHead
|
||||||
{
|
{
|
||||||
DWORD dwUnknown; ///< 항상 NULL 이던데..
|
UINT32 dwUnknown; ///< 항상 NULL 이던데..
|
||||||
DWORD dwMaybeCRC; ///< 아마도 crc
|
UINT32 dwMaybeCRC; ///< 아마도 crc
|
||||||
DWORD dwCLZ03; ///< "CLZ0x03" - 0x035a4c43 끝을 표시하는듯.
|
UINT32 dwCLZ03; ///< "CLZ0x03" - 0x035a4c43 끝을 표시하는듯.
|
||||||
/*
|
/*
|
||||||
SHORT versionMadeBy;
|
SHORT versionMadeBy;
|
||||||
SHORT versionNeededToExtract;
|
SHORT versionNeededToExtract;
|
||||||
|
@ -221,16 +235,16 @@ struct _SCentralDirectoryStructureHead
|
||||||
SHORT compressionMethod;
|
SHORT compressionMethod;
|
||||||
SHORT lastModFileTime;
|
SHORT lastModFileTime;
|
||||||
SHORT lastModFileDate;
|
SHORT lastModFileDate;
|
||||||
DWORD crc32;
|
UINT32 crc32;
|
||||||
DWORD compressedSize;
|
UINT32 compressedSize;
|
||||||
DWORD uncompressedSize;
|
UINT32 uncompressedSize;
|
||||||
SHORT fileNameLength;
|
SHORT fileNameLength;
|
||||||
SHORT extraFieldLength;
|
SHORT extraFieldLength;
|
||||||
SHORT fileCommentLength;
|
SHORT fileCommentLength;
|
||||||
SHORT diskNumberStart;
|
SHORT diskNumberStart;
|
||||||
SHORT internalFileAttributes;
|
SHORT internalFileAttributes;
|
||||||
DWORD externalFileAttributes;
|
UINT32 externalFileAttributes;
|
||||||
DWORD relativeOffsetOfLocalHeader;
|
UINT32 relativeOffsetOfLocalHeader;
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -254,8 +268,8 @@ struct _SEndOfCentralDirectoryRecordHead
|
||||||
SHORT numberOfTheDiskWithTheStartOfTheCentralDirectory;
|
SHORT numberOfTheDiskWithTheStartOfTheCentralDirectory;
|
||||||
SHORT centralDirectoryOnThisDisk;
|
SHORT centralDirectoryOnThisDisk;
|
||||||
SHORT totalNumberOfEntriesInTheCentralDirectoryOnThisDisk;
|
SHORT totalNumberOfEntriesInTheCentralDirectoryOnThisDisk;
|
||||||
DWORD sizeOfTheCentralDirectory;
|
UINT32 sizeOfTheCentralDirectory;
|
||||||
DWORD offsetOfStartOfCentralDirectoryWithREspectoTotheStartingDiskNumber;
|
UINT32 offsetOfStartOfCentralDirectoryWithREspectoTotheStartingDiskNumber;
|
||||||
SHORT zipFileCommentLength;
|
SHORT zipFileCommentLength;
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
@ -273,8 +287,12 @@ struct SEndOfCentralDirectoryRecord
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# pragma pack(pop, UNALZ) ///< PACKING 원상 복구
|
# pragma pack(pop, UNALZ) ///< PACKING 원상 복구
|
||||||
#else
|
#else
|
||||||
|
# ifdef __LP64__ // 63bit 는 8byte 맞나 ? 잘모르겠다..
|
||||||
|
# pragma pack(8)
|
||||||
|
# else
|
||||||
# pragma pack(4)
|
# pragma pack(4)
|
||||||
# endif
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
///< PROGRESS CALLBACK FUNCTION - 압축 해제 진행 상황을 알고 싶으면 이걸 쓰면 된다.
|
///< PROGRESS CALLBACK FUNCTION - 압축 해제 진행 상황을 알고 싶으면 이걸 쓰면 된다.
|
||||||
|
@ -294,20 +312,28 @@ public:
|
||||||
BOOL ExtractAll(const char* szDestPathName);
|
BOOL ExtractAll(const char* szDestPathName);
|
||||||
void SetCallback(_UnAlzCallback* pFunc, void* param=NULL);
|
void SetCallback(_UnAlzCallback* pFunc, void* param=NULL);
|
||||||
|
|
||||||
|
#ifdef _UNALZ_ICONV
|
||||||
|
void SetDestCodepage(const char* szToCodepage) { strcpy(m_szToCodepage, szToCodepage); }
|
||||||
|
#endif
|
||||||
|
|
||||||
public : ///< WIN32 전용 ( UNICODE 처리용 )
|
public : ///< WIN32 전용 ( UNICODE 처리용 )
|
||||||
/*
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
#ifndef __GNUWIN32__
|
||||||
|
#ifndef LPCWSTR
|
||||||
|
typedef const wchar_t* LPCWSTR;
|
||||||
|
#endif
|
||||||
BOOL Open(LPCWSTR szPathName);
|
BOOL Open(LPCWSTR szPathName);
|
||||||
BOOL SetCurrentFile(LPCWSTR szFileName);
|
BOOL SetCurrentFile(LPCWSTR szFileName);
|
||||||
static BOOL IsFolder(LPCWSTR szPathName);
|
static BOOL IsFolder(LPCWSTR szPathName);
|
||||||
#endif
|
#endif // __GNUWIN32__
|
||||||
*/
|
#endif // _WIN32
|
||||||
|
|
||||||
public :
|
public :
|
||||||
typedef vector<SLocalFileHeader> FileList; ///< 파일 목록.
|
typedef vector<SLocalFileHeader> FileList; ///< 파일 목록.
|
||||||
const FileList& GetFileList() { return m_fileList; }; ///< file 목록 리턴
|
const FileList& GetFileList() { return m_fileList; }; ///< file 목록 리턴
|
||||||
FileList::iterator GetCurFileHeader() { return m_posCur; }; ///< 현재 (SetCurrentFile() 로 세팅된) 파일 정보
|
FileList::iterator GetCurFileHeader() { return m_posCur; }; ///< 현재 (SetCurrentFile() 로 세팅된) 파일 정보
|
||||||
// const SLocalFileHeader* GetCurFileHeader() { return _posCur; }; ///< 현재 (SetCurrentFile() 로 세팅된) 파일 정보
|
// const SLocalFileHeader* GetCurFileHeader() { return m_posCur; }; ///< 현재 (SetCurrentFile() 로 세팅된) 파일 정보
|
||||||
|
|
||||||
public :
|
public :
|
||||||
enum ERR ///< 에러 코드 - 정리 필요..
|
enum ERR ///< 에러 코드 - 정리 필요..
|
||||||
|
@ -328,12 +354,21 @@ public :
|
||||||
ERR_MEM_ALLOC_FAILED,
|
ERR_MEM_ALLOC_FAILED,
|
||||||
ERR_FILE_READ_ERROR,
|
ERR_FILE_READ_ERROR,
|
||||||
ERR_INFLATE_FAILED,
|
ERR_INFLATE_FAILED,
|
||||||
|
|
||||||
|
ERR_ICONV_CANT_OPEN,
|
||||||
|
ERR_ICONV_INVALID_MULTISEQUENCE_OF_CHARACTERS,
|
||||||
|
ERR_ICONV_INCOMPLETE_MULTIBYTE_SEQUENCE,
|
||||||
|
ERR_ICONV_NOT_ENOUGH_SPACE_OF_BUFFER_TO_CONVERT,
|
||||||
|
ERR_ICONV_ETC,
|
||||||
|
|
||||||
};
|
};
|
||||||
ERR GetLastErr(){return m_nErr;}
|
ERR GetLastErr(){return m_nErr;}
|
||||||
|
const char* GetLastErrStr(){return LastErrToStr(m_nErr);}
|
||||||
|
const char* LastErrToStr(ERR nERR);
|
||||||
|
|
||||||
enum SIGNATURE ///< zip file signature
|
enum SIGNATURE ///< zip file signature - little endian
|
||||||
{
|
{
|
||||||
SIG_ERR = 0x00,
|
SIG_ERROR = 0x00,
|
||||||
SIG_EOF = 0x01,
|
SIG_EOF = 0x01,
|
||||||
SIG_ALZ_FILE_HEADER = 0x015a4c41, ///< ALZ 0x01
|
SIG_ALZ_FILE_HEADER = 0x015a4c41, ///< ALZ 0x01
|
||||||
SIG_LOCAL_FILE_HEADER = 0x015a4c42, ///< BLZ 0x01
|
SIG_LOCAL_FILE_HEADER = 0x015a4c42, ///< BLZ 0x01
|
||||||
|
@ -366,8 +401,8 @@ private :
|
||||||
EXTRACT_TYPE nType; ///< 대상이 파일인가 메모리 인가..
|
EXTRACT_TYPE nType; ///< 대상이 파일인가 메모리 인가..
|
||||||
FILE* fp; ///< ET_FILE 일 경우 대상 FILE*
|
FILE* fp; ///< ET_FILE 일 경우 대상 FILE*
|
||||||
BYTE* buf; ///< ET_MEM 일 경우 대상 포인터
|
BYTE* buf; ///< ET_MEM 일 경우 대상 포인터
|
||||||
DWORD bufsize; ///< ET_MEM 일 경우 대상 버퍼의 크기
|
UINT32 bufsize; ///< ET_MEM 일 경우 대상 버퍼의 크기
|
||||||
DWORD bufpos; ///< ET_MEM 일 경우 대상 버퍼에 쓰고 있는 위치
|
UINT32 bufpos; ///< ET_MEM 일 경우 대상 버퍼에 쓰고 있는 위치
|
||||||
};
|
};
|
||||||
int WriteToDest(SExtractDest* dest, BYTE* buf, int nSize);
|
int WriteToDest(SExtractDest* dest, BYTE* buf, int nSize);
|
||||||
|
|
||||||
|
@ -393,7 +428,7 @@ private : //
|
||||||
INT64 FTell();
|
INT64 FTell();
|
||||||
BOOL FEof();
|
BOOL FEof();
|
||||||
BOOL FSeek(INT64 offset);
|
BOOL FSeek(INT64 offset);
|
||||||
BOOL FRead(void* buffer, DWORD nBytesToRead, int* pTotRead=NULL);
|
BOOL FRead(void* buffer, UINT32 nBytesToRead, int* pTotRead=NULL);
|
||||||
|
|
||||||
enum {MAX_FILES=1000}; ///< 처리 가능한 분할 압축 파일 수.
|
enum {MAX_FILES=1000}; ///< 처리 가능한 분할 압축 파일 수.
|
||||||
enum {MULTIVOL_TAIL_SIZE=16,MULTIVOL_HEAD_SIZE=8}; ///< 분할 압축시 꼴랑지, 헤더 크기
|
enum {MULTIVOL_TAIL_SIZE=16,MULTIVOL_HEAD_SIZE=8}; ///< 분할 압축시 꼴랑지, 헤더 크기
|
||||||
|
@ -420,6 +455,11 @@ private :
|
||||||
_UnAlzCallback* m_pFuncCallBack;
|
_UnAlzCallback* m_pFuncCallBack;
|
||||||
void* m_pCallbackParam;
|
void* m_pCallbackParam;
|
||||||
BOOL m_bHalt;
|
BOOL m_bHalt;
|
||||||
|
|
||||||
|
#ifdef _UNALZ_ICONV
|
||||||
|
char m_szToCodepage[256]; ///< codepage
|
||||||
|
char m_szFromCodepage[256]; ///< "CP949"
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,11 +27,7 @@ typedef struct {
|
||||||
}
|
}
|
||||||
MybzFile;
|
MybzFile;
|
||||||
|
|
||||||
#define BZ_SETERR(eee) \
|
#define BZ_SETERR(eee){if (bzerror != NULL) *bzerror = eee;if (bzf != NULL) bzf->lastErr = eee;}
|
||||||
{ \
|
|
||||||
if (bzerror != NULL) *bzerror = eee; \
|
|
||||||
if (bzf != NULL) bzf->lastErr = eee; \
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
bzip2/vssver.scc
Normal file
BIN
bzip2/vssver.scc
Normal file
Binary file not shown.
81
main.cpp
81
main.cpp
|
@ -5,7 +5,18 @@
|
||||||
void Usage()
|
void Usage()
|
||||||
{
|
{
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
#ifdef _UNALZ_ICONV
|
||||||
|
printf("USAGE : unalz [-utf8 | -cp949] sourcefile.alz [dest path] \n");
|
||||||
|
# ifdef _UNALZ_UTF8
|
||||||
|
printf(" -utf8 : convert filename's codepage to UTF-8 (default)\n");
|
||||||
|
printf(" -cp949 : convert filename's codepage to CP949\n");
|
||||||
|
# else
|
||||||
|
printf(" -utf8 : convert filename's codepage to UTF-8\n");
|
||||||
|
printf(" -cp949 : convert filename's codepage to CP949 (default)\n");
|
||||||
|
# endif // _UNALZ_UTF8
|
||||||
|
#else // no iconv
|
||||||
printf("USAGE : unalz sourcefile.alz [dest path] \n");
|
printf("USAGE : unalz sourcefile.alz [dest path] \n");
|
||||||
|
#endif // _UNALZ_ICONV
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnAlzCallback(const char* szMessage, INT64 nCurrent, INT64 nRange, void* param, BOOL* bHalt)
|
void UnAlzCallback(const char* szMessage, INT64 nCurrent, INT64 nRange, void* param, BOOL* bHalt)
|
||||||
|
@ -20,13 +31,12 @@ void UnAlzCallback(const char* szMessage, INT64 nCurrent, INT64 nRange, void* pa
|
||||||
// 파일명 출력..
|
// 파일명 출력..
|
||||||
if(szMessage)
|
if(szMessage)
|
||||||
{
|
{
|
||||||
printf("\n");
|
//printf("\n");
|
||||||
printf("Extracting : %s ", szMessage);
|
printf("unalziiiing : %s ", szMessage);
|
||||||
nPrevPercent = -1;
|
nPrevPercent = -1;
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
percent = nCurrent*100/nRange;
|
percent = nCurrent*100/nRange;
|
||||||
|
|
||||||
if(nPrevPercent==percent) return; // 너무 잦은 업데이트 방지..
|
if(nPrevPercent==percent) return; // 너무 잦은 업데이트 방지..
|
||||||
|
@ -34,53 +44,80 @@ void UnAlzCallback(const char* szMessage, INT64 nCurrent, INT64 nRange, void* pa
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
sprintf(buf, "%I64d/%I64d (%I64d%%)", nCurrent, nRange, percent);
|
sprintf(buf, "%I64d/%I64d (%I64d%%)", nCurrent, nRange, percent);
|
||||||
#else
|
#else
|
||||||
sprintf(buf, "%d/%d (%d%%)", (int)nCurrent, (int)nRange, (int)percent);
|
sprintf(buf, "%d/%d (%d%%)", (int)nCurrent, (int)nRange, (int)percent); // int64 를 출력할라면 어찌해야 되는지?
|
||||||
#endif
|
#endif
|
||||||
printf("%s", buf);
|
puts(buf);
|
||||||
buflen = strlen(buf);
|
buflen = strlen(buf);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
for(i=0;i<buflen;i++)
|
for(i=0;i<buflen;i++) printf("\b");
|
||||||
printf("\b");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
printf("unalz v0.20 (2004/10/22) \n");
|
// printf("unalz v0.20 (2004/10/22) \n");
|
||||||
|
printf("unalz v0.22 (2004/10/28) \n");
|
||||||
printf("copyright(C) 2004 http://www.kipple.pe.kr\n");
|
printf("copyright(C) 2004 http://www.kipple.pe.kr\n");
|
||||||
|
|
||||||
|
|
||||||
if(argc<2)
|
if(argc<2)
|
||||||
{
|
{
|
||||||
Usage();
|
Usage();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char* source = argv[1];
|
|
||||||
char* dest = argv[2];
|
|
||||||
|
|
||||||
if(argc<3) dest="."; // current dir
|
|
||||||
else dest = argv[2];
|
|
||||||
|
|
||||||
|
|
||||||
CUnAlz unalz;
|
CUnAlz unalz;
|
||||||
|
char* source=NULL;
|
||||||
|
char* destpath=".";
|
||||||
|
char* destcodepage=NULL;
|
||||||
|
int count=1;
|
||||||
|
|
||||||
|
// utf8 옵션 처리
|
||||||
|
#ifdef _UNALZ_ICONV
|
||||||
|
if(strcmp(argv[count], "-utf8")==0)
|
||||||
|
{
|
||||||
|
destcodepage = "UTF-8"; // utf-8 support
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
else if(strcmp(argv[count], "-cp949")==0)
|
||||||
|
{
|
||||||
|
destcodepage = "CP949"; // cp959
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
if(count>=argc) {Usage();return 0;} // 옵션만 쓰면 어쩌라고..
|
||||||
|
|
||||||
|
if(destcodepage) unalz.SetDestCodepage(destcodepage);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 소스 파일
|
||||||
|
source=argv[count];
|
||||||
|
count++;
|
||||||
|
|
||||||
|
// 대상 경로
|
||||||
|
if(count<argc)
|
||||||
|
{
|
||||||
|
destpath = argv[count];
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 파일 열기
|
||||||
if(unalz.Open(source)==FALSE)
|
if(unalz.Open(source)==FALSE)
|
||||||
{
|
{
|
||||||
printf("file open error : %s\nerr code(%d)\n", source,unalz.GetLastErr());
|
printf("file open error : %s\n", source);
|
||||||
|
printf("err code(%d) (%s)\n", unalz.GetLastErr(), unalz.GetLastErrStr());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\nExtract %s to %s\n", source, dest);
|
printf("\nExtract %s to %s\n", source, destpath);
|
||||||
|
|
||||||
|
|
||||||
// callback 함수 세팅
|
// callback 함수 세팅
|
||||||
unalz.SetCallback(UnAlzCallback, (void*)NULL);
|
unalz.SetCallback(UnAlzCallback, (void*)NULL);
|
||||||
if(unalz.ExtractAll(dest)==FALSE)
|
if(unalz.ExtractAll(destpath)==FALSE)
|
||||||
{
|
{
|
||||||
printf("extract %s to %s failed.\n", source, dest);
|
printf("extract %s to %s failed.\n", source, destpath);
|
||||||
|
printf("err code(%d) (%s)\n", unalz.GetLastErr(), unalz.GetLastErrStr());
|
||||||
}
|
}
|
||||||
printf("\ndone..\n");
|
printf("\ndone..\n");
|
||||||
|
|
||||||
|
|
56
makefile
56
makefile
|
@ -1,29 +1,65 @@
|
||||||
CPP = g++
|
CPP = g++
|
||||||
CC = gcc
|
CC = gcc
|
||||||
OBJ = main.o UnAlz.o UnAlzBz2decompress.o UnAlzBzip2.o UnAlzbzlib.o zlib/adler32.o zlib/crc32.o zlib/infblock.o zlib/infcodes.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/zutil.o bzip2/blocksort.o bzip2/compress.o bzip2/crctable.o bzip2/huffman.o bzip2/randtable.o
|
OBJ = UnAlzBz2decompress.o UnAlzBzip2.o UnAlzbzlib.o zlib/adler32.o zlib/crc32.o zlib/infblock.o zlib/infcodes.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/zutil.o bzip2/blocksort.o bzip2/compress.o bzip2/crctable.o bzip2/huffman.o bzip2/randtable.o
|
||||||
LINKOBJ = main.o UnAlz.o UnAlzBz2decompress.o UnAlzBzip2.o UnAlzbzlib.o zlib/adler32.o zlib/crc32.o zlib/infblock.o zlib/infcodes.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/zutil.o bzip2/blocksort.o bzip2/compress.o bzip2/crctable.o bzip2/huffman.o bzip2/randtable.o
|
LINKOBJ = main.o UnAlz.o UnAlzBz2decompress.o UnAlzBzip2.o UnAlzbzlib.o zlib/adler32.o zlib/crc32.o zlib/infblock.o zlib/infcodes.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o zlib/infutil.o zlib/zutil.o bzip2/blocksort.o bzip2/compress.o bzip2/crctable.o bzip2/huffman.o bzip2/randtable.o
|
||||||
BIN = unalz
|
BIN = unalz
|
||||||
CFLAGS =
|
CFLAGS = -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
|
||||||
|
LDFLAGS=
|
||||||
|
#CFLAGS = -DDARWIN
|
||||||
|
#LDFLAGS=-liconv
|
||||||
|
SRCS=main.cpp UnAlz.cpp UnAlzBz2decompress.c UnAlzBzip2.cpp UnAlzbzlib.c
|
||||||
|
|
||||||
|
#nothing:
|
||||||
|
all:
|
||||||
|
@echo ""
|
||||||
|
@echo "USAGE : make TARGET_SYSTEM"
|
||||||
|
@echo ""
|
||||||
|
@echo ""
|
||||||
|
@echo "TARGET_SYSTEM is one of"
|
||||||
|
@echo ""
|
||||||
|
@echo " posix : POSIX system (FreeBSD/linux/OSX/sparc)"
|
||||||
|
@echo " posix-utf8 : POSIX with utf8 filesystem(OSX)"
|
||||||
|
@echo " posix-noiconv : POSIX without libiconv (CP949 only)"
|
||||||
|
|
||||||
|
@echo ""
|
||||||
|
@echo " and 'clean' for clean"
|
||||||
|
@echo ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
posix: unalz
|
||||||
|
$(CPP) -c UnAlz.cpp -c main.cpp $(CFLAGS) -D_UNALZ_ICONV
|
||||||
|
$(CPP) $(LINKOBJ) $(LDFLAGS) -liconv -o $(BIN)
|
||||||
|
|
||||||
|
posix-utf8: unalz
|
||||||
|
$(CPP) -c UnAlz.cpp -c main.cpp $(CFLAGS) -D_UNALZ_ICONV -D_UNALZ_UTF8
|
||||||
|
$(CPP) $(LINKOBJ) $(LDFLAGS) -liconv -o $(BIN)
|
||||||
|
|
||||||
|
posix-noiconv: unalz
|
||||||
|
$(CPP) -c UnAlz.cpp -c main.cpp $(CFLAGS)
|
||||||
|
$(CPP) $(LINKOBJ) $(LDFLAGS) -o $(BIN)
|
||||||
|
|
||||||
|
|
||||||
all: unalz
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(OBJ) $(BIN)
|
rm -f $(OBJ) $(BIN) main.o UnAlz.o
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$(BIN): $(OBJ)
|
$(BIN): $(OBJ)
|
||||||
$(CPP) $(LINKOBJ) -o "unalz"
|
# $(CPP) $(LINKOBJ) $(LDFLAGS) -o $(BIN)
|
||||||
|
|
||||||
main.o: main.cpp
|
#UnAlz.o: UnAlz.cpp
|
||||||
$(CPP) -c main.cpp -o main.o
|
# $(CPP) -c UnAlz.cpp -o UnAlz.o $(CFLAGS)
|
||||||
|
|
||||||
UnAlz.o: UnAlz.cpp
|
#main.o: main.cpp
|
||||||
$(CPP) -c UnAlz.cpp -o UnAlz.o
|
# $(CPP) -c main.cpp -o main.o $(CFLAGS)
|
||||||
|
|
||||||
UnAlzBz2decompress.o: UnAlzBz2decompress.c
|
UnAlzBz2decompress.o: UnAlzBz2decompress.c
|
||||||
$(CC) -c UnAlzBz2decompress.c -o UnAlzBz2decompress.o $(CFLAGS)
|
$(CC) -c UnAlzBz2decompress.c -o UnAlzBz2decompress.o $(CFLAGS)
|
||||||
|
|
||||||
UnAlzBzip2.o: UnAlzBzip2.cpp
|
UnAlzBzip2.o: UnAlzBzip2.cpp
|
||||||
$(CPP) -c UnAlzBzip2.cpp -o UnAlzBzip2.o
|
$(CPP) -c UnAlzBzip2.cpp -o UnAlzBzip2.o $(CFLAGS)
|
||||||
|
|
||||||
UnAlzbzlib.o: UnAlzbzlib.c
|
UnAlzbzlib.o: UnAlzbzlib.c
|
||||||
$(CC) -c UnAlzbzlib.c -o UnAlzbzlib.o $(CFLAGS)
|
$(CC) -c UnAlzbzlib.c -o UnAlzbzlib.o $(CFLAGS)
|
||||||
|
|
10
makefile.freebsd
Normal file
10
makefile.freebsd
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# $FreeBSD$
|
||||||
|
|
||||||
|
PROG= unalz
|
||||||
|
NOMAN=
|
||||||
|
SRCS= main.cpp UnAlz.cpp UnAlzBz2decompress.c UnAlzBzip2.cpp \
|
||||||
|
UnAlzbzlib.c
|
||||||
|
LDADD+= -lz -lbz2 -liconv -lstdc++
|
||||||
|
|
||||||
|
.include <bsd.prog.mk>
|
||||||
|
|
|
@ -1,18 +1,21 @@
|
||||||
|
|
||||||
|
|
||||||
unalz v0.2
|
unalz v0.22
|
||||||
|
|
||||||
copyright(C) 2004 http://www.kipple.pe.kr
|
copyright(C) 2004 http://www.kipple.pe.kr
|
||||||
|
|
||||||
|
|
||||||
- 최종 갱신일 : 2004/10/22
|
- 최초 작성일 : v0.20 - 2004/10/22
|
||||||
|
- 최종 갱신일 : v0.22 - 2004/10/28
|
||||||
|
|
||||||
- 기능
|
- 기능
|
||||||
. alz 파일 압축 해제 프로그램
|
. alz 파일 압축 해제 프로그램
|
||||||
. deflate/변형 bzip2/raw 포맷 지원
|
. deflate/변형 bzip2/raw 포맷 지원
|
||||||
. 분할 압축 파일 지원
|
. 분할 압축 파일 지원
|
||||||
. WIN32(VC60/VC70/DEV-C++) , Free-BSD/LINUX(gcc/g++) 지원
|
. WIN32(VC60/VC70/DEV-C++) , Free-BSD/LINUX(gcc/g++) 지원
|
||||||
|
. 0.22 - SIG_ERR 관련 문제점 수정,
|
||||||
|
- 빅엔디안 시스템(OSX) 지원
|
||||||
|
- UTF-8 파일 시스템을 위한 코드 페이지 옵션 기능 지원
|
||||||
|
|
||||||
- 라이선스
|
- 라이선스
|
||||||
. 자유로이 변형/배포 가능 (BSD-license)
|
. 자유로이 변형/배포 가능 (BSD-license)
|
||||||
|
|
40
unalz.dev
40
unalz.dev
|
@ -9,7 +9,7 @@ CppCompiler=-D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_CONSOLE -D_MBCS_@@_
|
||||||
Includes=
|
Includes=
|
||||||
Linker=-lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32_@@_
|
Linker=-lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32_@@_
|
||||||
Libs=
|
Libs=
|
||||||
UnitCount=32
|
UnitCount=31
|
||||||
Folders=bzip2,main,unalz,zlib
|
Folders=bzip2,main,unalz,zlib
|
||||||
ObjFiles=
|
ObjFiles=
|
||||||
PrivateResource=
|
PrivateResource=
|
||||||
|
@ -230,16 +230,6 @@ OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit21]
|
[Unit21]
|
||||||
FileName=zlib\uncompr.c
|
|
||||||
Folder=zlib
|
|
||||||
Compile=1
|
|
||||||
CompileCpp=0
|
|
||||||
Link=1
|
|
||||||
Priority=1000
|
|
||||||
OverrideBuildCmd=0
|
|
||||||
BuildCmd=
|
|
||||||
|
|
||||||
[Unit22]
|
|
||||||
FileName=zlib\ZCONF.H
|
FileName=zlib\ZCONF.H
|
||||||
Folder=zlib
|
Folder=zlib
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -249,7 +239,7 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit23]
|
[Unit22]
|
||||||
FileName=zlib\ZLIB.H
|
FileName=zlib\ZLIB.H
|
||||||
Folder=zlib
|
Folder=zlib
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -259,7 +249,7 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit24]
|
[Unit23]
|
||||||
FileName=zlib\zutil.c
|
FileName=zlib\zutil.c
|
||||||
Folder=zlib
|
Folder=zlib
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -269,7 +259,7 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit25]
|
[Unit24]
|
||||||
FileName=zlib\ZUTIL.H
|
FileName=zlib\ZUTIL.H
|
||||||
Folder=zlib
|
Folder=zlib
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -279,7 +269,7 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit26]
|
[Unit25]
|
||||||
FileName=bzip2\blocksort.c
|
FileName=bzip2\blocksort.c
|
||||||
Folder=bzip2
|
Folder=bzip2
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -289,7 +279,7 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit27]
|
[Unit26]
|
||||||
FileName=bzip2\bzlib.h
|
FileName=bzip2\bzlib.h
|
||||||
Folder=bzip2
|
Folder=bzip2
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -299,7 +289,7 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit28]
|
[Unit27]
|
||||||
FileName=bzip2\bzlib_private.h
|
FileName=bzip2\bzlib_private.h
|
||||||
Folder=bzip2
|
Folder=bzip2
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -309,7 +299,7 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit29]
|
[Unit28]
|
||||||
FileName=bzip2\compress.c
|
FileName=bzip2\compress.c
|
||||||
Folder=bzip2
|
Folder=bzip2
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -319,7 +309,7 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit30]
|
[Unit29]
|
||||||
FileName=bzip2\crctable.c
|
FileName=bzip2\crctable.c
|
||||||
Folder=bzip2
|
Folder=bzip2
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -329,7 +319,7 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
[Unit31]
|
[Unit30]
|
||||||
FileName=bzip2\huffman.c
|
FileName=bzip2\huffman.c
|
||||||
Folder=bzip2
|
Folder=bzip2
|
||||||
Compile=1
|
Compile=1
|
||||||
|
@ -339,6 +329,16 @@ Priority=1000
|
||||||
OverrideBuildCmd=0
|
OverrideBuildCmd=0
|
||||||
BuildCmd=
|
BuildCmd=
|
||||||
|
|
||||||
|
[Unit31]
|
||||||
|
FileName=bzip2\randtable.c
|
||||||
|
Folder=bzip2
|
||||||
|
Compile=1
|
||||||
|
CompileCpp=0
|
||||||
|
Link=1
|
||||||
|
Priority=1000
|
||||||
|
OverrideBuildCmd=0
|
||||||
|
BuildCmd=
|
||||||
|
|
||||||
[Unit32]
|
[Unit32]
|
||||||
FileName=bzip2\randtable.c
|
FileName=bzip2\randtable.c
|
||||||
Folder=bzip2
|
Folder=bzip2
|
||||||
|
|
|
@ -66,7 +66,7 @@ LINK32=link.exe
|
||||||
# PROP Ignore_Export_Lib 0
|
# PROP Ignore_Export_Lib 0
|
||||||
# PROP Target_Dir ""
|
# PROP Target_Dir ""
|
||||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
||||||
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
|
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
|
||||||
# ADD BASE RSC /l 0x412 /d "_DEBUG"
|
# ADD BASE RSC /l 0x412 /d "_DEBUG"
|
||||||
# ADD RSC /l 0x412 /d "_DEBUG"
|
# ADD RSC /l 0x412 /d "_DEBUG"
|
||||||
BSC32=bscmake.exe
|
BSC32=bscmake.exe
|
||||||
|
|
BIN
zlib/vssver.scc
Normal file
BIN
zlib/vssver.scc
Normal file
Binary file not shown.
Loading…
Reference in a new issue