From ea300ffb3ca15dd7d722d2a7e69d009069214c84 Mon Sep 17 00:00:00 2001 From: Krzysztof Kowalczyk Date: Thu, 23 May 2024 20:37:01 +0200 Subject: [PATCH] tweak EngineMupdf::GetPropertyTemp() --- src/EngineMupdf.cpp | 56 +++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/EngineMupdf.cpp b/src/EngineMupdf.cpp index 7346a9b3fb7..857550f0d6a 100644 --- a/src/EngineMupdf.cpp +++ b/src/EngineMupdf.cpp @@ -309,9 +309,9 @@ static float FzRectOverlap(fz_rect r1, RectF r2f) { return (isect.x1 - isect.x0) * (isect.y1 - isect.y0) / ((r1.x1 - r1.x0) * (r1.y1 - r1.y0)); } -static WCHAR* PdfToWStr(fz_context* ctx, pdf_obj* obj) { +static TempWStr PdfToWStrTemp(fz_context* ctx, pdf_obj* obj) { char* s = pdf_new_utf8_from_pdf_string_obj(ctx, obj); - WCHAR* res = ToWStr(s); + WCHAR* res = ToWStrTemp(s); fz_free(ctx, s); return res; } @@ -3397,36 +3397,32 @@ TempStr EngineMupdf::GetPropertyTemp(const char* name) { return ExtractFontListTemp(); } - static struct { - const char* prop; - const char* name; - } pdfPropNames[] = { - {kPropTitle, "Title"}, - {kPropAuthor, "Author"}, - {kPropSubject, "Subject"}, - {kPropCopyright, "Copyright"}, - {kPropCreationDate, "CreationDate"}, - {kPropModificationDate, "ModDate"}, - {kPropCreatorApp, "Creator"}, - {kPropPdfProducer, "Producer"}, + static const char* pdfPropNames[] = { + kPropTitle, "Title", + kPropAuthor, "Author", + kPropSubject, "Subject", + kPropCopyright, "Copyright", + kPropCreationDate, "CreationDate", + kPropModificationDate, "ModDate", + kPropCreatorApp, "Creator", + kPropPdfProducer, "Producer", + nullptr, }; - for (int i = 0; i < dimof(pdfPropNames); i++) { - auto s = pdfPropNames[i].prop; - if (str::Eq(s, name)) { - // _info is guaranteed not to contain any indirect references, - // so no need for ctxAccess - pdf_obj* obj = pdf_dict_gets(ctx, pdfInfo, pdfPropNames[i].name); - if (!obj) { - return nullptr; - } - WCHAR* ws = PdfToWStr(ctx, obj); - PdfCleanStringInPlace(ws); - TempStr res = ToUtf8Temp(ws); - str::Free(ws); - return res; - } + const char* pdfPropName = GetMatchingString(pdfPropNames, name); + if (!pdfPropName) { + return nullptr; } - return nullptr; + + // _info is guaranteed not to contain any indirect references, + // so no need for ctxAccess + pdf_obj* obj = pdf_dict_gets(ctx, pdfInfo, pdfPropName); + if (!obj) { + return nullptr; + } + TempWStr ws = PdfToWStrTemp(ctx, obj); + PdfCleanStringInPlace(ws); + TempStr res = ToUtf8Temp(ws); + return res; }; ByteSlice EngineMupdf::GetFileData() {