diff options
author | elfmz <fenix1905@tut.by> | 2022-09-04 01:45:32 +0300 |
---|---|---|
committer | elfmz <fenix1905@tut.by> | 2022-09-04 02:16:33 +0300 |
commit | 67297c1f5374af6b7010f160a0141a41857072fc (patch) | |
tree | 232b4f84efc9c6c596607c4bcab6f2ec5be34285 | |
parent | e03c2c6953bd116edaf97c749532a5823b20c3da (diff) |
fixing buildfix-long-filenames
-rw-r--r-- | multiarc/src/formats/cab/cab.cpp | 8 | ||||
-rw-r--r-- | multiarc/src/formats/targz/targz.cpp | 37 |
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; |