diff --git a/src/apps/haikudepot/HaikuDepotConstants.h b/src/apps/haikudepot/HaikuDepotConstants.h index 9bb8a2b322..ec701da93b 100644 --- a/src/apps/haikudepot/HaikuDepotConstants.h +++ b/src/apps/haikudepot/HaikuDepotConstants.h @@ -28,11 +28,11 @@ enum { }; enum BitmapSize { - BITMAP_SIZE_16 = 1, - BITMAP_SIZE_22 = 2, - BITMAP_SIZE_32 = 3, - BITMAP_SIZE_64 = 4, - BITMAP_SIZE_ANY = 5 + BITMAP_SIZE_16 = 0, + BITMAP_SIZE_22 = 1, + BITMAP_SIZE_32 = 2, + BITMAP_SIZE_64 = 3, + BITMAP_SIZE_ANY = 4 }; // when somebody rates a package, there is a numerical diff --git a/src/apps/haikudepot/tar/TarArchiveService.cpp b/src/apps/haikudepot/tar/TarArchiveService.cpp index c0017b3236..e77605f088 100644 --- a/src/apps/haikudepot/tar/TarArchiveService.cpp +++ b/src/apps/haikudepot/tar/TarArchiveService.cpp @@ -116,13 +116,23 @@ TarArchiveService::_ReadHeaderFileType(unsigned char data) { } -/*const*/ const BString -TarArchiveService::_ReadHeaderString(const uint8 *data, size_t dataLength) +/*static*/ int32 +TarArchiveService::_ReadHeaderStringLength(const uint8* data, + size_t maxStringLength) { - uint32 actualLength = 0; - while (actualLength < dataLength && 0 != data[actualLength]) + int32 actualLength = 0; + while (actualLength < (int32) maxStringLength && data[actualLength] != 0) actualLength++; - return BString((const char *) data, actualLength); + return actualLength; +} + + +void +TarArchiveService::_ReadHeaderString(const uint8 *data, size_t maxStringLength, + BString& result) +{ + result.SetTo((const char *) data, + _ReadHeaderStringLength(data, maxStringLength)); } @@ -198,8 +208,10 @@ TarArchiveService::_ReadHeader(const uint8* block, TarArchiveHeader& header) return B_BAD_DATA; } - header.SetFileName( - _ReadHeaderString(&block[OFFSET_FILENAME], LENGTH_FILENAME)); + BString fileName; + _ReadHeaderString(&block[OFFSET_FILENAME], LENGTH_FILENAME, fileName); + + header.SetFileName(fileName); header.SetLength( _ReadHeaderNumeric(&block[OFFSET_LENGTH], LENGTH_LENGTH)); header.SetFileType( diff --git a/src/apps/haikudepot/tar/TarArchiveService.h b/src/apps/haikudepot/tar/TarArchiveService.h index df0b92fc0c..261dec7b17 100644 --- a/src/apps/haikudepot/tar/TarArchiveService.h +++ b/src/apps/haikudepot/tar/TarArchiveService.h @@ -38,8 +38,10 @@ private: static status_t _ReadHeader(const uint8* data, TarArchiveHeader& header); - static const BString _ReadHeaderString(const uint8* data, - size_t dataLength); + static int32 _ReadHeaderStringLength(const uint8* data, + size_t maxStringLength); + static void _ReadHeaderString(const uint8* data, + size_t dataLength, BString& result); static uint32 _ReadHeaderNumeric(const uint8* data, size_t dataLength); static tar_file_type _ReadHeaderFileType(uint8 data);