From e4c945bd5a12bb78b8ea48ecd467331068bee5b8 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 2 Aug 2020 17:12:30 +0200 Subject: [PATCH] Icon-O-Matic: fix filename length limitation The code was using B_OS_NAME_LENGTH instead of B_FILE_NAME_LENGTH. Use of BString allows to put the different sizes in a loop. --- .../document/savers/BitmapSetSaver.cpp | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/src/apps/icon-o-matic/document/savers/BitmapSetSaver.cpp b/src/apps/icon-o-matic/document/savers/BitmapSetSaver.cpp index 9d94323cce..f3f1e52bb0 100644 --- a/src/apps/icon-o-matic/document/savers/BitmapSetSaver.cpp +++ b/src/apps/icon-o-matic/document/savers/BitmapSetSaver.cpp @@ -10,47 +10,40 @@ #include +#include + #include "BitmapExporter.h" + // constructor BitmapSetSaver::BitmapSetSaver(const entry_ref& ref) : FileSaver(ref) { } + // destructor BitmapSetSaver::~BitmapSetSaver() { } + // Save status_t BitmapSetSaver::Save(Document* document) { entry_ref actualRef(fRef); - char name[B_OS_NAME_LENGTH]; + BString name; - // 64x64 - snprintf(name, sizeof(name), "%s_64.png", fRef.name); - actualRef.set_name(name); - Exporter* exporter = new BitmapExporter(64); - exporter->SetSelfDestroy(true); - exporter->Export(document, actualRef); + int sizes[] = { 64, 32, 16 }; - // 16x16 - snprintf(name, sizeof(name), "%s_16.png", fRef.name); - actualRef.set_name(name); - exporter = new BitmapExporter(16); - exporter->SetSelfDestroy(true); - exporter->Export(document, actualRef); - - // 32x32 - snprintf(name, sizeof(name), "%s_32.png", fRef.name); - actualRef.set_name(name); - exporter = new BitmapExporter(32); - exporter->SetSelfDestroy(true); - exporter->Export(document, actualRef); + for (size_t i = 0; i < B_COUNT_OF(sizes); i++) { + name.SetToFormat("%s_%d.png", fRef.name, sizes[i]); + actualRef.set_name(name.String()); + Exporter* exporter = new BitmapExporter(sizes[i]); + exporter->SetSelfDestroy(true); + exporter->Export(document, actualRef); + } return B_OK; } -