Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelfmz <fenix1905@tut.by>2022-09-04 01:45:32 +0300
committerelfmz <fenix1905@tut.by>2022-09-04 02:16:33 +0300
commit67297c1f5374af6b7010f160a0141a41857072fc (patch)
tree232b4f84efc9c6c596607c4bcab6f2ec5be34285
parente03c2c6953bd116edaf97c749532a5823b20c3da (diff)
fixing buildfix-long-filenames
-rw-r--r--multiarc/src/formats/cab/cab.cpp8
-rw-r--r--multiarc/src/formats/targz/targz.cpp37
2 files changed, 22 insertions, 23 deletions
diff --git a/multiarc/src/formats/cab/cab.cpp b/multiarc/src/formats/cab/cab.cpp
index 4528cf33..4355ddbb 100644
--- a/multiarc/src/formats/cab/cab.cpp
+++ b/multiarc/src/formats/cab/cab.cpp
@@ -59,7 +59,7 @@ struct CFFILE
u2 date;
u2 time;
u2 attribs;
- u1 szName[256];
+ char szName[256];
};
static int ArcHandle = -1;
@@ -155,7 +155,7 @@ BOOL WINAPI _export CAB_OpenArchive(const char *Name,int *Type,bool Silent)
if (FileHeader.iFolder == 0xFFFD || FileHeader.iFolder == 0xFFFF)
{
- EndPos = (char*)FileHeader.szName;
+ EndPos = FileHeader.szName;
while (EndPos - (char*)&FileHeader < (int)sizeof(FileHeader) && *EndPos)
EndPos++;
if (EndPos - (char*)&FileHeader >= (int)sizeof(FileHeader))
@@ -190,7 +190,7 @@ int WINAPI _export CAB_GetArcItem(struct ArcItemInfo *Info)
if (ReadSize < 18)
return GETARC_READERROR;
- EndPos = (char *)FileHeader.szName;
+ EndPos = FileHeader.szName;
while (EndPos - (char*)&FileHeader < (int)sizeof(FileHeader) && *EndPos)
EndPos++;
if (EndPos - (char*)&FileHeader >= (int)sizeof(FileHeader))
@@ -198,7 +198,7 @@ int WINAPI _export CAB_GetArcItem(struct ArcItemInfo *Info)
lseek( ArcHandle, (LONG)((EndPos-(char*)&FileHeader+1) - ReadSize), SEEK_CUR);
- EndPos = (char *)FileHeader.szName;
+ EndPos = FileHeader.szName;
if (EndPos[ 0 ] == '\\' && EndPos[ 1 ] != '\\')
EndPos++;
diff --git a/multiarc/src/formats/targz/targz.cpp b/multiarc/src/formats/targz/targz.cpp
index 4ad710ce..ac2fdc92 100644
--- a/multiarc/src/formats/targz/targz.cpp
+++ b/multiarc/src/formats/targz/targz.cpp
@@ -142,7 +142,7 @@ HANDLE ArcHandle;
FAR_INT64 NextPosition,FileSize;
int ArcType;
enum archive_format TarArchiveFormat;
-char ZipName[NM];
+static std::string ZipName;
typedef int (WINAPI *FARSTDMKLINK)(const char *Src,const char *Dest,DWORD Flags);
@@ -184,16 +184,14 @@ BOOL WINAPI _export TARGZ_IsArchive(const char *Name,const unsigned char *Data,i
const char *NamePtr=(const char *)strrchr((char*)Name,'/');
NamePtr=(NamePtr==NULL) ? Name:NamePtr+1;
- strcpy(ZipName,NamePtr);
+ ZipName = NamePtr;
const char *Dot=(const char *)strrchr((char*)NamePtr,'.');
if (Dot!=NULL)
{
- Dot++;
- if (strcasecmp(Dot,"tgz")==0 || strcasecmp(Dot,"taz")==0)
- strcpy(&ZipName[Dot-NamePtr],"tar");
- else
- ZipName[Dot-NamePtr-1]=0;
+ ZipName.resize(Dot-NamePtr-1);
+ if (strcasecmp(Dot + 1,"tgz")==0 || strcasecmp(Dot + 1,"taz")==0)
+ ZipName+= ".tar";
}
return(TRUE);
@@ -223,7 +221,7 @@ int WINAPI _export TARGZ_GetArcItem(struct ArcItemInfo *Info)
{
if (ArcType!=TAR_FORMAT)
{
- if (*ZipName)
+ if (!ZipName.empty())
{
switch (ArcType)
{
@@ -231,17 +229,17 @@ int WINAPI _export TARGZ_GetArcItem(struct ArcItemInfo *Info)
Info->nFileSize=FileSize.i64;
Info->nPhysicalSize=FileSize.i64;
Info->PathName=ZipName;
- *ZipName=0;
+ ZipName.clear();
return(GETARC_SUCCESS);
default:
- return GetArcItemGZIP(Item,Info);
+ return GetArcItemGZIP(Info);
}
}
else
return(GETARC_EOF);
}
- return GetArcItemTAR(Item,Info);
+ return GetArcItemTAR(Info);
}
int GetArcItemGZIP(struct ArcItemInfo *Info)
@@ -267,7 +265,7 @@ int GetArcItemGZIP(struct ArcItemInfo *Info)
if (ArcType==Z_FORMAT)
{
Info->PathName = ZipName;
- *ZipName=0;
+ ZipName.clear();
Info->nFileSize=FileSize.i64;
return(GETARC_SUCCESS);
}
@@ -294,7 +292,7 @@ int GetArcItemGZIP(struct ArcItemInfo *Info)
} else { // workaround for tar.gz archives that has original name set but without .tar extension
// since tar archives detection relies on extension, it should be there (#173)
Info->PathName = cFileName;
- const char *ZipExt = strrchr(ZipName, '.');
+ const char *ZipExt = strrchr(ZipName.c_str(), '.');
if (ZipExt && strcasecmp(ZipExt, ".tar") == 0) {
const char *OrigExt = strrchr(cFileName, '.');
if (!OrigExt || strcasecmp(OrigExt, ZipExt) != 0) {
@@ -303,7 +301,7 @@ int GetArcItemGZIP(struct ArcItemInfo *Info)
}
}
- *ZipName=0;
+ ZipName.clear();
UnixTimeToFileTime(Header.FileTime,&Info->ftLastWriteTime);
@@ -405,12 +403,13 @@ int GetArcItemTAR(struct ArcItemInfo *Info)
if ((dwUnixMode & S_IFMT) == S_IFLNK) //TAR_hdr.header.typeflag == SYMTYPE || TAR_hdr.header.typeflag == LNKTYPE
{
- if((Info->UserData=(DWORD_PTR)MA_malloc(strlen(TAR_hdr.header.linkname)+2)) != 0)
+ const size_t UserDataSize = strlen(TAR_hdr.header.linkname)+2;
+ if((Info->UserData=(DWORD_PTR)MA_malloc(UserDataSize)) != 0)
{
EndPos = AdjustTARFileName (TAR_hdr.header.linkname);
- if(TAR_hdr.header.typeflag == LNKTYPE)
- *(char*)Info->UserData='/';
- strncpy((char*)Info->UserData+(TAR_hdr.header.typeflag == LNKTYPE?1:0),EndPos,strlen(TAR_hdr.header.linkname)+1);
+ snprintf((char*)Info->UserData, UserDataSize, "%s%s",
+ (TAR_hdr.header.typeflag == LNKTYPE) ? "/" : "", EndPos);
+ ((char*)Info->UserData)[UserDataSize - 1] = 0;
}
}
@@ -425,7 +424,7 @@ int GetArcItemTAR(struct ArcItemInfo *Info)
Info->nFileSize=TarItemSize;
Info->nPhysicalSize=TarItemSize;
- strcpy(Info->HostOS,TarArchiveFormat==POSIX_FORMAT?"POSIX":(TarArchiveFormat==V7_FORMAT?"V7":""));
+ Info->HostOS = (TarArchiveFormat==POSIX_FORMAT) ? "POSIX" : (TarArchiveFormat==V7_FORMAT?"V7":"");
Info->UnpVer=256+11+(TarArchiveFormat >= POSIX_FORMAT?1:0); //!!!
FAR_INT64 PrevPosition=NextPosition;