git: e451100039f9 - main - sysutils/fusefs-rar2fs: Add libunrar 7.x compat
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 14 Jun 2024 01:46:00 UTC
The branch main has been updated by jhale: URL: https://cgit.FreeBSD.org/ports/commit/?id=e451100039f95983e1d88d4e85fbef8ed832d929 commit e451100039f95983e1d88d4e85fbef8ed832d929 Author: Jason E. Hale <jhale@FreeBSD.org> AuthorDate: 2024-06-14 01:23:22 +0000 Commit: Jason E. Hale <jhale@FreeBSD.org> CommitDate: 2024-06-14 01:45:53 +0000 sysutils/fusefs-rar2fs: Add libunrar 7.x compat --- sysutils/fusefs-rar2fs/Makefile | 2 +- sysutils/fusefs-rar2fs/files/patch-src_dllext.cpp | 199 ++++++++++++++++++++++ 2 files changed, 200 insertions(+), 1 deletion(-) diff --git a/sysutils/fusefs-rar2fs/Makefile b/sysutils/fusefs-rar2fs/Makefile index 7d24b4dbd2d2..ca33d0e74a44 100644 --- a/sysutils/fusefs-rar2fs/Makefile +++ b/sysutils/fusefs-rar2fs/Makefile @@ -1,7 +1,7 @@ PORTNAME= rar2fs DISTVERSION= 1.29.5 DISTVERSIONPREFIX= v -PORTREVISION= 10 +PORTREVISION= 11 CATEGORIES= sysutils PKGNAMEPREFIX= fusefs- diff --git a/sysutils/fusefs-rar2fs/files/patch-src_dllext.cpp b/sysutils/fusefs-rar2fs/files/patch-src_dllext.cpp new file mode 100644 index 000000000000..e3a8682f763a --- /dev/null +++ b/sysutils/fusefs-rar2fs/files/patch-src_dllext.cpp @@ -0,0 +1,199 @@ +Add compatibility with libunrar >= 7. Based upon upstream commits: + +https://github.com/hasse69/rar2fs/commit/d1d31f416269f4abb1262850b1fe645713a14fc4 +https://github.com/hasse69/rar2fs/commit/89d144d17bb23bd2ff143a3aac3593cbfc2dd3c1 + +--- src/dllext.cpp.orig 2021-05-02 06:17:04 UTC ++++ src/dllext.cpp +@@ -169,13 +169,21 @@ int PASCAL RARListArchiveEx(HANDLE hArcData, RARArchiv + } + else + { ++#if RARVER_MAJOR >= 7 ++ wcscpy(N->LinkTargetW,Arc.FileHead.RedirName.c_str()); ++#else + wcscpy(N->LinkTargetW,Arc.FileHead.RedirName); ++#endif + N->LinkTargetFlags |= LINK_T_UNICODE; // Make sure UNICODE is set + } + } + else if (Arc.FileHead.RedirType == FSREDIR_FILECOPY) + { ++#if RARVER_MAJOR >= 7 ++ wcscpy(N->LinkTargetW,Arc.FileHead.RedirName.c_str()); ++#else + wcscpy(N->LinkTargetW,Arc.FileHead.RedirName); ++#endif + N->LinkTargetFlags |= LINK_T_FILECOPY; + } + } +@@ -208,6 +216,13 @@ void PASCAL RARNextVolumeName(char *arch, bool oldstyl + { + #if RARVER_MAJOR < 5 + NextVolumeName(arch, NULL, 0, oldstylevolume); ++#elif RARVER_MAJOR >= 7 ++ wstring ArchiveW; ++ size_t len=strlen(arch); ++ ArchiveW.assign(arch,arch+len); ++ NextVolumeName(ArchiveW,oldstylevolume); ++ string NextArchive(ArchiveW.begin(),ArchiveW.end()); ++ strcpy(arch,NextArchive.c_str()); + #else + wchar NextName[NM]; + CharToWide(arch, NextName, ASIZE(NextName)); +@@ -221,6 +236,14 @@ void PASCAL RARVolNameToFirstName(char *arch, bool old + { + #if RARVER_MAJOR < 5 + VolNameToFirstName(arch, arch, !oldstylevolume); ++#elif RARVER_MAJOR >=7 ++ wstring ArcName; ++ size_t len=strlen(arch); ++ ArcName.assign(arch,arch+len); ++ VolNameToFirstName(ArcName, ArcName, !oldstylevolume); ++ string FirstName(ArcName.begin(),ArcName.end()); ++ strcpy(arch,FirstName.c_str()); ++ return; + #else + wchar ArcName[NM]; + CharToWide(arch, ArcName, ASIZE(ArcName)); +@@ -239,7 +262,6 @@ void PASCAL RARGetFileInfo(HANDLE hArcData, const char + void PASCAL RARGetFileInfo(HANDLE hArcData, const char *FileName, struct RARWcb *wcb) + { + #if RARVER_MAJOR > 4 +- char FileNameUtf[NM]; + DataSet *Data = (DataSet *)hArcData; + Archive& Arc = Data->Arc; + struct RARHeaderDataEx h; +@@ -248,8 +270,17 @@ void PASCAL RARGetFileInfo(HANDLE hArcData, const char + wcb->bytes = 0; + while (!RARReadHeaderEx(hArcData, &h)) + { ++#if RARVER_MAJOR >= 7 ++ size_t FileNameLen=Arc.FileHead.FileName.size()*sizeof(char32_t); ++ string FileNameUtf(FileNameLen,'\0'); ++ WideToUtf(Arc.FileHead.FileName.c_str(),&FileNameUtf[0],FileNameLen); ++ FileNameUtf.resize(strlen(FileNameUtf.c_str())); ++ if (!strcmp(FileNameUtf.c_str(), FileName)) ++#else ++ char FileNameUtf[NM]; + WideToUtf(Arc.FileHead.FileName,FileNameUtf,ASIZE(FileNameUtf)); + if (!strcmp(FileNameUtf, FileName)) ++#endif + { + wcb->bytes = ListFileHeader(wcb->data, Arc); + return; +@@ -368,7 +399,11 @@ static size_t ListFileHeader(wchar *wcs,Archive &Arc) + static size_t ListFileHeader(wchar *wcs,Archive &Arc) + { + FileHeader &hd=Arc.FileHead; ++#if RARVER_MAJOR >= 7 ++ wstring *Name=&hd.FileName; ++#else + wchar *Name=hd.FileName; ++#endif + RARFORMAT Format=Arc.Format; + + void *wcs_start = (void *)wcs; +@@ -433,25 +468,45 @@ static size_t ListFileHeader(wchar *wcs,Archive &Arc) + { + if (Format==RARFMT15) + { ++#if RARVER_MAJOR >= 7 ++ string LinkTargetA; ++#else + char LinkTargetA[NM]; ++#endif + if (Arc.FileHead.Encrypted) + { + // Link data are encrypted. We would need to ask for password + // and initialize decryption routine to display the link target. ++#if RARVER_MAJOR >= 7 ++ LinkTargetA="*<-?->"; ++#else + strncpyz(LinkTargetA,"*<-?->",ASIZE(LinkTargetA)); ++#endif + } + else + { + int DataSize=(int)Min((size_t)hd.PackSize,ASIZE(LinkTargetA)-1); ++#if RARVER_MAJOR >= 7 ++ Arc.Read(&LinkTargetA,DataSize); ++#else + Arc.Read(LinkTargetA,DataSize); ++#endif + LinkTargetA[DataSize > 0 ? DataSize : 0] = 0; + } ++#if RARVER_MAJOR >= 7 ++ wstring LinkTarget(LinkTargetA.begin(),LinkTargetA.end()); ++ wcs += msprintf(wcs, L"\n%12ls: %ls",St(MListTarget),LinkTarget.c_str()); ++ } ++ else ++ wcs += msprintf(wcs, L"\n%12ls: %ls",St(MListTarget),hd.RedirName.c_str()); ++#else + wchar LinkTarget[NM]; + CharToWide(LinkTargetA,LinkTarget,ASIZE(LinkTarget)); + wcs += msprintf(wcs, L"\n%12ls: %ls",St(MListTarget),LinkTarget); + } + else + wcs += msprintf(wcs, L"\n%12ls: %ls",St(MListTarget),hd.RedirName); ++#endif + } + + if (!hd.Dir) +@@ -487,11 +542,20 @@ static size_t ListFileHeader(wchar *wcs,Archive &Arc) + hd.FileHash.CRC32); + if (hd.FileHash.Type==HASH_BLAKE2) + { ++#if RARVER_MAJOR >= 7 ++ wstring BlakeStr; ++ BinToHex(hd.FileHash.Digest,BLAKE2_DIGEST_SIZE,BlakeStr); ++#else + wchar BlakeStr[BLAKE2_DIGEST_SIZE*2+1]; + BinToHex(hd.FileHash.Digest,BLAKE2_DIGEST_SIZE,NULL,BlakeStr,ASIZE(BlakeStr)); ++#endif + wcs += msprintf(wcs, L"\n%12ls: %ls", + hd.UseHashKey ? L"BLAKE2 MAC":hd.SplitAfter ? L"Pack-BLAKE2":L"BLAKE2", ++#if RARVER_MAJOR >= 7 ++ BlakeStr.c_str()); ++#else + BlakeStr); ++#endif + } + + const wchar *HostOS=L""; +@@ -529,7 +593,11 @@ static size_t ListFileHeader(wchar *wcs,Archive &Arc) + + if (hd.Version) + { ++#if RARVER_MAJOR >= 7 ++ uint Version=ParseVersionFileName(*Name,false); ++#else + uint Version=ParseVersionFileName(Name,false); ++#endif + if (Version!=0) + wcs += msprintf(wcs, L"\n%12ls: %u",St(MListFileVer),Version); + } +@@ -538,9 +606,17 @@ static size_t ListFileHeader(wchar *wcs,Archive &Arc) + { + wcs += msprintf(wcs, L"\n%12ls: ",L"Unix owner"); + if (*hd.UnixOwnerName!=0) ++#if RARVER_MAJOR >= 7 ++ wcs += msprintf(wcs, L"%ls:",GetWide(hd.UnixOwnerName).c_str()); ++#else + wcs += msprintf(wcs, L"%ls:",GetWide(hd.UnixOwnerName)); ++#endif + if (*hd.UnixGroupName!=0) ++#if RARVER_MAJOR >= 7 ++ wcs += msprintf(wcs, L"%ls",GetWide(hd.UnixGroupName).c_str()); ++#else + wcs += msprintf(wcs, L"%ls",GetWide(hd.UnixGroupName)); ++#endif + if ((*hd.UnixOwnerName!=0 || *hd.UnixGroupName!=0) && (hd.UnixOwnerNumeric || hd.UnixGroupNumeric)) + wcs += msprintf(wcs, L" "); + if (hd.UnixOwnerNumeric) +@@ -555,5 +631,3 @@ static size_t ListFileHeader(wchar *wcs,Archive &Arc) + } + + #endif +- +-