const up lcms2

Change-Id: Iaca3404bd9e8de00d84a89eb86b5e3b9cc12535b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188089
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Jenkins
This commit is contained in:
Caolán McNamara
2025-07-20 17:25:17 +01:00
parent 32aa68a652
commit 61227073e1
2 changed files with 396 additions and 0 deletions

View File

@ -0,0 +1,392 @@
From f48dd19c6cd6152b5fe56c6fb94d2e966c709f57 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolan.mcnamara@collabora.com>
Date: Sun, 20 Jul 2025 17:43:36 +0100
Subject: [PATCH] const up some static arrays
which enables moving them out of the .data section
---
src/cmsalpha.c | 2 +-
src/cmscgats.c | 4 ++--
src/cmscnvrt.c | 8 ++++----
src/cmsio0.c | 14 +++++++-------
src/cmsopt.c | 12 ++++++------
src/cmspcs.c | 26 +++++++++++++-------------
src/cmsps2.c | 4 ++--
src/cmssamp.c | 2 +-
src/cmstypes.c | 16 ++++++++--------
src/lcms2_internal.h | 8 ++++----
10 files changed, 48 insertions(+), 48 deletions(-)
diff --git a/src/cmsalpha.c b/src/cmsalpha.c
index a5f1a16..b8e1a26 100644
--- a/src/cmsalpha.c
+++ b/src/cmsalpha.c
@@ -377,7 +377,7 @@ int FormatterPos(cmsUInt32Number frm)
static
cmsFormatterAlphaFn _cmsGetFormatterAlpha(cmsContext id, cmsUInt32Number in, cmsUInt32Number out)
{
-static cmsFormatterAlphaFn FormattersAlpha[6][6] = {
+static const cmsFormatterAlphaFn FormattersAlpha[6][6] = {
/* from 8 */ { copy8, from8to16, from8to16SE, from8toHLF, from8toFLT, from8toDBL },
/* from 16*/ { from16to8, copy16, from16to16, from16toHLF, from16toFLT, from16toDBL },
diff --git a/src/cmscgats.c b/src/cmscgats.c
index 53e3442..27be3b9 100644
--- a/src/cmscgats.c
+++ b/src/cmscgats.c
@@ -266,7 +266,7 @@ typedef struct {
WRITEMODE as; // How is supposed to be written
} PROPERTY;
-static PROPERTY PredefinedProperties[] = {
+static const PROPERTY PredefinedProperties[] = {
{"NUMBER_OF_FIELDS", WRITE_UNCOOKED}, // Required - NUMBER OF FIELDS
{"NUMBER_OF_SETS", WRITE_UNCOOKED}, // Required - NUMBER OF SETS
@@ -344,7 +344,7 @@ static PROPERTY PredefinedProperties[] = {
// Predefined sample types on dataset
-static const char* PredefinedSampleID[] = {
+static const char* const PredefinedSampleID[] = {
"SAMPLE_ID", // Identifies sample that data represents
"STRING", // Identifies label, or other non-machine readable value.
// Value must begin and end with a " symbol
diff --git a/src/cmscnvrt.c b/src/cmscnvrt.c
index 9dfca7d..a050db3 100644
--- a/src/cmscnvrt.c
+++ b/src/cmscnvrt.c
@@ -103,7 +103,7 @@ void DupPluginIntentsList(struct _cmsContext_struct* ctx,
const struct _cmsContext_struct* src)
{
_cmsIntentsPluginChunkType newHead = { NULL };
- cmsIntentsList* entry;
+ const cmsIntentsList* entry;
cmsIntentsList* Anterior = NULL;
_cmsIntentsPluginChunkType* head = (_cmsIntentsPluginChunkType*) src->chunks[IntentPlugin];
@@ -148,10 +148,10 @@ void _cmsAllocIntentsPluginChunk(struct _cmsContext_struct* ctx,
// Search the list for a suitable intent. Returns NULL if not found
static
-cmsIntentsList* SearchIntent(cmsContext ContextID, cmsUInt32Number Intent)
+const cmsIntentsList* SearchIntent(cmsContext ContextID, cmsUInt32Number Intent)
{
_cmsIntentsPluginChunkType* ctx = ( _cmsIntentsPluginChunkType*) _cmsContextGetClientChunk(ContextID, IntentPlugin);
- cmsIntentsList* pt;
+ const cmsIntentsList* pt;
for (pt = ctx -> Intents; pt != NULL; pt = pt -> Next)
if (pt ->Intent == Intent) return pt;
@@ -1108,7 +1108,7 @@ cmsPipeline* _cmsLinkProfiles(cmsContext ContextID,
cmsUInt32Number dwFlags)
{
cmsUInt32Number i;
- cmsIntentsList* Intent;
+ const cmsIntentsList* Intent;
// Make sure a reasonable number of profiles is provided
if (nProfiles <= 0 || nProfiles > 255) {
diff --git a/src/cmsio0.c b/src/cmsio0.c
index 859def3..30b6f1e 100644
--- a/src/cmsio0.c
+++ b/src/cmsio0.c
@@ -658,7 +658,7 @@ void _cmsDeleteTagByPos(_cmsICCPROFILE* Icc, int i)
_cmsFree(Icc ->ContextID, Icc ->TagPtrs[i]);
}
else {
- cmsTagTypeHandler* TypeHandler = Icc ->TagTypeHandlers[i];
+ const cmsTagTypeHandler* TypeHandler = Icc ->TagTypeHandlers[i];
if (TypeHandler != NULL) {
@@ -1310,7 +1310,7 @@ cmsBool SaveTags(_cmsICCPROFILE* Icc, _cmsICCPROFILE* FileOrig)
cmsTagDescriptor* TagDescriptor;
cmsTagTypeSignature TypeBase;
cmsTagTypeSignature Type;
- cmsTagTypeHandler* TypeHandler;
+ const cmsTagTypeHandler* TypeHandler;
cmsFloat64Number Version = cmsGetProfileVersion((cmsHPROFILE) Icc);
cmsTagTypeHandler LocalTypeHandler;
@@ -1564,7 +1564,7 @@ void freeOneTag(_cmsICCPROFILE* Icc, cmsUInt32Number i)
{
if (Icc->TagPtrs[i]) {
- cmsTagTypeHandler* TypeHandler = Icc->TagTypeHandlers[i];
+ const cmsTagTypeHandler* TypeHandler = Icc->TagTypeHandlers[i];
if (TypeHandler != NULL) {
cmsTagTypeHandler LocalTypeHandler = *TypeHandler;
@@ -1637,7 +1637,7 @@ void* CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig)
{
_cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile;
cmsIOHANDLER* io;
- cmsTagTypeHandler* TypeHandler;
+ const cmsTagTypeHandler* TypeHandler;
cmsTagTypeHandler LocalTypeHandler;
cmsTagDescriptor* TagDescriptor;
cmsTagTypeSignature BaseType;
@@ -1771,7 +1771,7 @@ Error:
cmsTagTypeSignature _cmsGetTagTrueType(cmsHPROFILE hProfile, cmsTagSignature sig)
{
_cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile;
- cmsTagTypeHandler* TypeHandler;
+ const cmsTagTypeHandler* TypeHandler;
int n;
// Search for given tag in ICC profile directory
@@ -1789,7 +1789,7 @@ cmsTagTypeSignature _cmsGetTagTrueType(cmsHPROFILE hProfile, cmsTagSignature sig
cmsBool CMSEXPORT cmsWriteTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data)
{
_cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile;
- cmsTagTypeHandler* TypeHandler = NULL;
+ const cmsTagTypeHandler* TypeHandler = NULL;
cmsTagTypeHandler LocalTypeHandler;
cmsTagDescriptor* TagDescriptor = NULL;
cmsTagTypeSignature Type;
@@ -1910,7 +1910,7 @@ cmsUInt32Number CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature si
void *Object;
int i;
cmsIOHANDLER* MemIO;
- cmsTagTypeHandler* TypeHandler = NULL;
+ const cmsTagTypeHandler* TypeHandler = NULL;
cmsTagTypeHandler LocalTypeHandler;
cmsTagDescriptor* TagDescriptor = NULL;
cmsUInt32Number rc;
diff --git a/src/cmsopt.c b/src/cmsopt.c
index 7d4fcf4..27f8d6b 100644
--- a/src/cmsopt.c
+++ b/src/cmsopt.c
@@ -547,7 +547,7 @@ cmsBool PatchLUT(cmsStage* CLUT, cmsUInt16Number At[], cmsUInt16Number Value[],
// Auxiliary, to see if two values are equal or very different
static
-cmsBool WhitesAreEqual(cmsUInt32Number n, cmsUInt16Number White1[], cmsUInt16Number White2[] )
+cmsBool WhitesAreEqual(cmsUInt32Number n, const cmsUInt16Number White1[], const cmsUInt16Number White2[] )
{
cmsUInt32Number i;
@@ -564,7 +564,7 @@ cmsBool WhitesAreEqual(cmsUInt32Number n, cmsUInt16Number White1[], cmsUInt16Num
static
cmsBool FixWhiteMisalignment(cmsPipeline* Lut, cmsColorSpaceSignature EntryColorSpace, cmsColorSpaceSignature ExitColorSpace)
{
- cmsUInt16Number *WhitePointIn, *WhitePointOut;
+ const cmsUInt16Number *WhitePointIn, *WhitePointOut;
cmsUInt16Number WhiteIn[cmsMAXCHANNELS], WhiteOut[cmsMAXCHANNELS], ObtainedOut[cmsMAXCHANNELS];
cmsUInt32Number i, nOuts, nIns;
cmsStage *PreLin = NULL, *CLUT = NULL, *PostLin = NULL;
@@ -1799,13 +1799,13 @@ typedef struct _cmsOptimizationCollection_st {
_cmsOPToptimizeFn OptimizePtr;
- struct _cmsOptimizationCollection_st *Next;
+ const struct _cmsOptimizationCollection_st *Next;
} _cmsOptimizationCollection;
// The built-in list. We currently implement 4 types of optimizations. Joining of curves, matrix-shaper, linearization and resampling
-static _cmsOptimizationCollection DefaultOptimization[] = {
+static const _cmsOptimizationCollection DefaultOptimization[] = {
{ OptimizeByJoiningCurves, &DefaultOptimization[1] },
{ OptimizeMatrixShaper, &DefaultOptimization[2] },
@@ -1823,7 +1823,7 @@ void DupPluginOptimizationList(struct _cmsContext_struct* ctx,
const struct _cmsContext_struct* src)
{
_cmsOptimizationPluginChunkType newHead = { NULL };
- _cmsOptimizationCollection* entry;
+ const _cmsOptimizationCollection* entry;
_cmsOptimizationCollection* Anterior = NULL;
_cmsOptimizationPluginChunkType* head = (_cmsOptimizationPluginChunkType*) src->chunks[OptimizationPlugin];
@@ -1910,7 +1910,7 @@ cmsBool CMSEXPORT _cmsOptimizePipeline(cmsContext ContextID,
cmsUInt32Number* dwFlags)
{
_cmsOptimizationPluginChunkType* ctx = ( _cmsOptimizationPluginChunkType*) _cmsContextGetClientChunk(ContextID, OptimizationPlugin);
- _cmsOptimizationCollection* Opts;
+ const _cmsOptimizationCollection* Opts;
cmsBool AnySuccess = FALSE;
cmsStage* mpe;
diff --git a/src/cmspcs.c b/src/cmspcs.c
index 84a62b4..6295dfd 100644
--- a/src/cmspcs.c
+++ b/src/cmspcs.c
@@ -705,22 +705,22 @@ cmsUInt32Number CMSEXPORT _cmsReasonableGridpointsByColorspace(cmsColorSpaceSign
cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space,
- cmsUInt16Number **White,
- cmsUInt16Number **Black,
+ const cmsUInt16Number **White,
+ const cmsUInt16Number **Black,
cmsUInt32Number *nOutputs)
{
// Only most common spaces
- static cmsUInt16Number RGBblack[4] = { 0, 0, 0 };
- static cmsUInt16Number RGBwhite[4] = { 0xffff, 0xffff, 0xffff };
- static cmsUInt16Number CMYKblack[4] = { 0xffff, 0xffff, 0xffff, 0xffff }; // 400% of ink
- static cmsUInt16Number CMYKwhite[4] = { 0, 0, 0, 0 };
- static cmsUInt16Number LABblack[4] = { 0, 0x8080, 0x8080 }; // V4 Lab encoding
- static cmsUInt16Number LABwhite[4] = { 0xFFFF, 0x8080, 0x8080 };
- static cmsUInt16Number CMYblack[4] = { 0xffff, 0xffff, 0xffff };
- static cmsUInt16Number CMYwhite[4] = { 0, 0, 0 };
- static cmsUInt16Number Grayblack[4] = { 0 };
- static cmsUInt16Number GrayWhite[4] = { 0xffff };
+ static const cmsUInt16Number RGBblack[4] = { 0, 0, 0 };
+ static const cmsUInt16Number RGBwhite[4] = { 0xffff, 0xffff, 0xffff };
+ static const cmsUInt16Number CMYKblack[4] = { 0xffff, 0xffff, 0xffff, 0xffff }; // 400% of ink
+ static const cmsUInt16Number CMYKwhite[4] = { 0, 0, 0, 0 };
+ static const cmsUInt16Number LABblack[4] = { 0, 0x8080, 0x8080 }; // V4 Lab encoding
+ static const cmsUInt16Number LABwhite[4] = { 0xFFFF, 0x8080, 0x8080 };
+ static const cmsUInt16Number CMYblack[4] = { 0xffff, 0xffff, 0xffff };
+ static const cmsUInt16Number CMYwhite[4] = { 0, 0, 0 };
+ static const cmsUInt16Number Grayblack[4] = { 0 };
+ static const cmsUInt16Number GrayWhite[4] = { 0xffff };
switch (Space) {
@@ -947,4 +947,4 @@ cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace)
int n = cmsChannelsOfColorSpace(ColorSpace);
if (n < 0) return 3;
return (cmsUInt32Number)n;
-}
\ No newline at end of file
+}
diff --git a/src/cmsps2.c b/src/cmsps2.c
index cb2db85..6fb828e 100644
--- a/src/cmsps2.c
+++ b/src/cmsps2.c
@@ -573,8 +573,8 @@ int OutputValueSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUI
if ((In[1] >= 0x7800 && In[1] <= 0x8800) &&
(In[2] >= 0x7800 && In[2] <= 0x8800)) {
- cmsUInt16Number* Black;
- cmsUInt16Number* White;
+ const cmsUInt16Number* Black;
+ const cmsUInt16Number* White;
cmsUInt32Number nOutputs;
if (!_cmsEndPointsBySpace(sc ->ColorSpace, &White, &Black, &nOutputs))
diff --git a/src/cmssamp.c b/src/cmssamp.c
index af76afa..56aa859 100644
--- a/src/cmssamp.c
+++ b/src/cmssamp.c
@@ -66,7 +66,7 @@ cmsBool BlackPointAsDarkerColorant(cmsHPROFILE hInput,
cmsCIEXYZ* BlackPoint,
cmsUInt32Number dwFlags)
{
- cmsUInt16Number *Black;
+ const cmsUInt16Number *Black;
cmsHTRANSFORM xform;
cmsColorSpaceSignature Space;
cmsUInt32Number nChannels;
diff --git a/src/cmstypes.c b/src/cmstypes.c
index b456276..d9c0105 100644
--- a/src/cmstypes.c
+++ b/src/cmstypes.c
@@ -44,7 +44,7 @@
typedef struct _cmsTagTypeLinkedList_st {
cmsTagTypeHandler Handler;
- struct _cmsTagTypeLinkedList_st* Next;
+ const struct _cmsTagTypeLinkedList_st* Next;
} _cmsTagTypeLinkedList;
@@ -96,9 +96,9 @@ cmsBool RegisterTypesPlugin(cmsContext id, cmsPluginBase* Data, _cmsMemoryClient
// Return handler for a given type or NULL if not found. Shared between normal types and MPE. It first tries the additions
// made by plug-ins and then the built-in defaults.
static
-cmsTagTypeHandler* GetHandler(cmsTagTypeSignature sig, _cmsTagTypeLinkedList* PluginLinkedList, _cmsTagTypeLinkedList* DefaultLinkedList)
+const cmsTagTypeHandler* GetHandler(cmsTagTypeSignature sig, _cmsTagTypeLinkedList* PluginLinkedList, const _cmsTagTypeLinkedList* DefaultLinkedList)
{
- _cmsTagTypeLinkedList* pt;
+ const _cmsTagTypeLinkedList* pt;
for (pt = PluginLinkedList;
pt != NULL;
@@ -4701,7 +4701,7 @@ cmsBool Type_MPEclut_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER*
// This is the list of built-in MPE types
-static _cmsTagTypeLinkedList SupportedMPEtypes[] = {
+static const _cmsTagTypeLinkedList SupportedMPEtypes[] = {
{{ (cmsTagTypeSignature) cmsSigBAcsElemType, NULL, NULL, NULL, NULL, NULL, 0 }, &SupportedMPEtypes[1] }, // Ignore those elements for now
{{ (cmsTagTypeSignature) cmsSigEAcsElemType, NULL, NULL, NULL, NULL, NULL, 0 }, &SupportedMPEtypes[2] }, // (That's what the spec says)
@@ -4721,7 +4721,7 @@ cmsBool ReadMPEElem(struct _cms_typehandler_struct* self,
cmsUInt32Number SizeOfTag)
{
cmsStageSignature ElementSig;
- cmsTagTypeHandler* TypeHandler;
+ const cmsTagTypeHandler* TypeHandler;
cmsUInt32Number nItems;
cmsPipeline *NewLUT = (cmsPipeline *) Cargo;
_cmsTagTypePluginChunkType* MPETypePluginChunk = ( _cmsTagTypePluginChunkType*) _cmsContextGetClientChunk(self->ContextID, MPEPlugin);
@@ -4817,7 +4817,7 @@ cmsBool Type_MPE_Write(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, v
cmsStageSignature ElementSig;
cmsPipeline* Lut = (cmsPipeline*) Ptr;
cmsStage* Elem = Lut ->Elements;
- cmsTagTypeHandler* TypeHandler;
+ const cmsTagTypeHandler* TypeHandler;
_cmsTagTypePluginChunkType* MPETypePluginChunk = ( _cmsTagTypePluginChunkType*) _cmsContextGetClientChunk(self->ContextID, MPEPlugin);
BaseOffset = io ->Tell(io) - sizeof(_cmsTagBase);
@@ -5934,7 +5934,7 @@ void DupTagTypeList(struct _cmsContext_struct* ctx,
int loc)
{
_cmsTagTypePluginChunkType newHead = { NULL };
- _cmsTagTypeLinkedList* entry;
+ const _cmsTagTypeLinkedList* entry;
_cmsTagTypeLinkedList* Anterior = NULL;
_cmsTagTypePluginChunkType* head = (_cmsTagTypePluginChunkType*) src->chunks[loc];
@@ -6006,7 +6006,7 @@ cmsBool _cmsRegisterMultiProcessElementPlugin(cmsContext id, cmsPluginBase* Dat
// Wrapper for tag types
-cmsTagTypeHandler* _cmsGetTagTypeHandler(cmsContext ContextID, cmsTagTypeSignature sig)
+const cmsTagTypeHandler* _cmsGetTagTypeHandler(cmsContext ContextID, cmsTagTypeSignature sig)
{
_cmsTagTypePluginChunkType* ctx = ( _cmsTagTypePluginChunkType*) _cmsContextGetClientChunk(ContextID, TagTypePlugin);
diff --git a/src/lcms2_internal.h b/src/lcms2_internal.h
index 5b3f263..569ccfb 100644
--- a/src/lcms2_internal.h
+++ b/src/lcms2_internal.h
@@ -838,7 +838,7 @@ typedef struct _cms_iccprofile_struct {
cmsUInt32Number TagOffsets[MAX_TABLE_TAG];
cmsBool TagSaveAsRaw[MAX_TABLE_TAG]; // True to write uncooked
void * TagPtrs[MAX_TABLE_TAG];
- cmsTagTypeHandler* TagTypeHandlers[MAX_TABLE_TAG]; // Same structure may be serialized on different types
+ const cmsTagTypeHandler* TagTypeHandlers[MAX_TABLE_TAG]; // Same structure may be serialized on different types
// depending on profile version, so we keep track of the
// type handler for each tag in the list.
// Special
@@ -855,7 +855,7 @@ cmsBool _cmsWriteHeader(_cmsICCPROFILE* Icc, cmsUInt32Number UsedSp
int _cmsSearchTag(_cmsICCPROFILE* Icc, cmsTagSignature sig, cmsBool lFollowLinks);
// Tag types
-cmsTagTypeHandler* _cmsGetTagTypeHandler(cmsContext ContextID, cmsTagTypeSignature sig);
+const cmsTagTypeHandler* _cmsGetTagTypeHandler(cmsContext ContextID, cmsTagTypeSignature sig);
cmsTagTypeSignature _cmsGetTagTrueType(cmsHPROFILE hProfile, cmsTagSignature sig);
cmsTagDescriptor* _cmsGetTagDescriptor(cmsContext ContextID, cmsTagSignature sig);
@@ -995,8 +995,8 @@ CMSCHECKPOINT cmsUInt16Number CMSEXPORT _cmsQuantizeVal(cmsFloat64Number i, cms
CMSAPI cmsUInt32Number CMSEXPORT _cmsReasonableGridpointsByColorspace(cmsColorSpaceSignature Colorspace, cmsUInt32Number dwFlags);
cmsBool _cmsEndPointsBySpace(cmsColorSpaceSignature Space,
- cmsUInt16Number **White,
- cmsUInt16Number **Black,
+ const cmsUInt16Number **White,
+ const cmsUInt16Number **Black,
cmsUInt32Number *nOutputs);
CMSAPI cmsBool CMSEXPORT _cmsOptimizePipeline(cmsContext ContextID,
--
2.49.0

View File

@ -20,8 +20,12 @@ ifneq ($(MSYSTEM),)
$(eval $(call gb_UnpackedTarball_set_patchflags,lcms2,--binary))
endif
# external/lcms2/0001-const-up-some-static-arrays.patch.1
# upstream effort at: https://github.com/mm2/Little-CMS/pull/501
$(eval $(call gb_UnpackedTarball_add_patches,lcms2,\
external/lcms2/lcms2-2.4-windows.patch \
external/lcms2/0001-const-up-some-static-arrays.patch.1 \
))
# vim: set noet sw=4 ts=4: