* ¼úÁýÀº 7z Æ÷¸Ëµî ¸¹Àº ¾ÐÃàÆÄÀÏÀÇ ¾ÐÃà ÇØÁ¦¸¦ 7z.dll À» ÀÌ¿ëÇؼ­ ¼öÇàÇÕ´Ï´Ù. 7z.dll ÆÄÀÏÀº LGPL ¶óÀ̼±½ºÇÏ¿¡ ¹èÆ÷µÇ¸ç, LGPL ¶óÀ̼±½º¿¡ ÀÇ°Å ¾Æ·¡¿Í °°ÀÌ 7z.dll ÆÄÀÏÀÇ ¼Ò½º¿¡¼­ ¼öÁ¤µÈ ºÎºÐÀ» Ç¥½ÃÇÕ´Ï´Ù. * 7z.dll ÆÄÀÏÀÇ ¹öÀü: 4.62 * ¹®¼­ ÀÛ¼ºÀÏ / ¸¶Áö¸· ¹®¼­ ¼öÁ¤ÀÏ: 2008/12/08 * ¹®¼­ ÀÛ¼ºÀÚ: kippler@gmail.com ============================================================================ * ¸µÄ¿ ¼³Á¤¿¡¼­ 7z.dll ÆÄÀÏ Ãâ·Â°æ·Î ¼öÁ¤ * CPP\7zip\Archive\Iso\IsoIn.cpp ÆÄÀÏ ¼Ò½º »ó´Ü¿¡ ¾Æ·¡ ³»¿ë Ãß°¡ ---------- //[¼öÁ¤] #include #define ASSERT(x) assert(x) * CPP\7zip\Archive\Iso\IsoIn.cpp ÆÄÀÏ ¿ø·¡ ³»¿ë ----------- UInt32 CInArchive::ReadUInt32() { Byte b[8]; ReadBytes(b, 8); UInt32 value = 0; for (int i = 0; i < 4; i++) { if (b[i] != b[7 - i]) throw 1; value |= ((UInt32)(b[i]) << (8 * i)); } return value; } ¼öÁ¤µÈ ³»¿ë ------------ UInt32 CInArchive::ReadUInt32() { Byte b[8]; ReadBytes(b, 8); UInt32 value = 0; for (int i = 0; i < 4; i++) { if (b[i] != b[7 - i]) ASSERT(0); /*{ASSERT(0); throw 1;}*/ // [¼öÁ¤] - °¡²û ÀÌ Á¤º¸°¡ À߸øµÈ °æ¿ì°¡ ÀÖÁö¸¸ ¹«½ÃÇØ ÁØ´Ù. value |= ((UInt32)(b[i]) << (8 * i)); } return value; } * CPP\7zip\Archive\Lzh\LzhHandler.cpp ÆÄÀÏ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *value) Áß¿¡¼­ ¿ø·¡ ³»¿ë ----------- case kpidPath: { UString s = NItemName::WinNameToOSName(MultiByteToUnicodeString(item.GetName(), CP_OEMCP)); if (!s.IsEmpty()) { if (s[s.Length() - 1] == WCHAR_PATH_SEPARATOR) s.Delete(s.Length() - 1); prop = s; } break; } ¼öÁ¤µÈ ³»¿ë ------------ case kpidPath: { /* ¿ø·¡ ÄÚµå UString s = NItemName::WinNameToOSName(MultiByteToUnicodeString(item.GetName(), CP_OEMCP)); if (!s.IsEmpty()) { if (s[s.Length() - 1] == WCHAR_PATH_SEPARATOR) s.Delete(s.Length() - 1); prop = s; } */ // [¼öÁ¤] - code page 󸮸¦ »óÀ§ layer ¿¡ ¸Ã±â±â À§Çؼ­ ascii ·Î ¸®ÅÏ AString s = item.GetName(); if (!s.IsEmpty()) { if (s[s.Length() - 1] == CHAR_PATH_SEPARATOR) s.Delete(s.Length() - 1); prop.vt = VT_LPSTR; //prop.pszVal = _strdup(s); // run-time ¹®Á¦ ¹ß»ý prop.pszVal = (LPSTR)::GlobalAlloc(GPTR, strlen(s)+1); // ¹®ÀÚ¿­ º¹»ç! ¹Þ´ÂÂÊ¿¡¼­ »èÁ¦ ÇÊ¿ä lstrcpyA(prop.pszVal, s); } } break; * CPP\7zip\Archive\Lzh\LzhHandler.cpp ÆÄÀÏ STDMETHODIMP CHandler::Open(IInStream *stream, const UInt64 * /* maxCheckStartPosition */, IArchiveOpenCallback *callback) Áß¿¡¼­ ¿ø·¡ ³»¿ë ----------- RINOK(archive.Open(stream)); for (;;) { CItemEx item; bool filled; HRESULT result = archive.GetNextItem(filled, item); if (result == S_FALSE) return S_FALSE; if (result != S_OK) return S_FALSE; if (!filled) break; _items.Add(item); archive.Skeep(item.PackSize); if (callback != NULL) { if (needSetTotal) { RINOK(callback->SetTotal(NULL, &endPos)); needSetTotal = false; } if (_items.Size() % 100 == 0) { UInt64 numFiles = _items.Size(); UInt64 numBytes = item.DataPosition; RINOK(callback->SetCompleted(&numFiles, &numBytes)); } } } if (_items.IsEmpty()) return S_FALSE; _stream = stream; ¼öÁ¤µÈ ³»¿ë ------------ RINOK(archive.Open(stream)); //[¼öÁ¤] ¾Æ·¡ÀÇ Äڵ带 ¿Å°Ü¿Ô´Ù. _stream = stream; for (;;) { CItemEx item; bool filled; HRESULT result = archive.GetNextItem(filled, item); if (result == S_FALSE) return S_FALSE; if (result != S_OK) return S_FALSE; if (!filled) break; _items.Add(item); archive.Skeep(item.PackSize); if (callback != NULL) { if (needSetTotal) { RINOK(callback->SetTotal(NULL, &endPos)); needSetTotal = false; } if (_items.Size() % 100 == 0) { UInt64 numFiles = _items.Size(); UInt64 numBytes = item.DataPosition; RINOK(callback->SetCompleted(&numFiles, &numBytes)); } } } if (_items.IsEmpty()) return S_FALSE; //_stream = stream;