Commit 952c22134 for imagemagick.org
commit 952c22134532d495dc330351b4ebdbce9afd718b
Author: Dirk Lemstra <dirk@lemstra.org>
Date: Sat Jun 27 16:51:23 2026 +0200
Added a method that can be used to determine the endian of the host.
diff --git a/MagickCore/constitute.c b/MagickCore/constitute.c
index 6387b3daf..bf76dd5a5 100644
--- a/MagickCore/constitute.c
+++ b/MagickCore/constitute.c
@@ -69,6 +69,7 @@
#include "MagickCore/profile-private.h"
#include "MagickCore/property.h"
#include "MagickCore/quantum.h"
+#include "MagickCore/quantum-private.h"
#include "MagickCore/resize.h"
#include "MagickCore/resource_.h"
#include "MagickCore/semaphore.h"
@@ -667,14 +668,7 @@ MagickExport Image *ReadImage(const ImageInfo *image_info,
else
if ((image_info->endian == UndefinedEndian) &&
(GetMagickRawSupport(magick_info) != MagickFalse))
- {
- unsigned long
- lsb_first;
-
- lsb_first=1;
- read_info->endian=(*(char *) &lsb_first) == 1 ? LSBEndian :
- MSBEndian;
- }
+ read_info->endian=GetHostEndian();
}
if ((magick_info != (const MagickInfo *) NULL) &&
(GetMagickDecoderSeekableStream(magick_info) != MagickFalse))
@@ -1274,13 +1268,7 @@ MagickExport MagickBooleanType WriteImage(const ImageInfo *image_info,
else
if ((image_info->endian == UndefinedEndian) &&
(GetMagickRawSupport(magick_info) != MagickFalse))
- {
- unsigned long
- lsb_first;
-
- lsb_first=1;
- image->endian=(*(char *) &lsb_first) == 1 ? LSBEndian : MSBEndian;
- }
+ image->endian=GetHostEndian();
}
if ((image->ping != MagickFalse) &&
(SyncImagePixelCache(image,exception) == MagickFalse))
diff --git a/MagickCore/mime.c b/MagickCore/mime.c
index e8514af21..707220ef4 100644
--- a/MagickCore/mime.c
+++ b/MagickCore/mime.c
@@ -55,6 +55,7 @@
#include "MagickCore/token.h"
#include "MagickCore/utility.h"
#include "MagickCore/utility-private.h"
+#include "MagickCore/quantum-private.h"
#include "MagickCore/xml-tree.h"
#include "MagickCore/xml-tree-private.h"
@@ -243,16 +244,12 @@ MagickExport const MimeInfo *GetMimeInfo(const char *filename,
ssize_t
value;
- unsigned long
- lsb_first;
-
assert(exception != (ExceptionInfo *) NULL);
if (IsMimeCacheInstantiated(exception) == MagickFalse)
return((const MimeInfo *) NULL);
/*
Search for mime tag.
*/
- lsb_first=1;
LockSemaphoreInfo(mime_semaphore);
p=GetHeadElementInLinkedList(mime_cache);
if ((magic == (const unsigned char *) NULL) || (length == 0))
@@ -310,7 +307,7 @@ MagickExport const MimeInfo *GetMimeInfo(const char *filename,
r=magic+q->offset;
endian=q->endian;
if (q->endian == UndefinedEndian)
- endian=(*(char *) &lsb_first) == 1 ? LSBEndian : MSBEndian;
+ endian=GetHostEndian();
if (endian == LSBEndian)
{
value=(ssize_t) (*r++);
@@ -340,7 +337,7 @@ MagickExport const MimeInfo *GetMimeInfo(const char *filename,
r=magic+q->offset;
endian=q->endian;
if (q->endian == UndefinedEndian)
- endian=(*(char *) &lsb_first) == 1 ? LSBEndian : MSBEndian;
+ endian=GetHostEndian();
if (endian == LSBEndian)
{
value=(ssize_t) (*r++);
diff --git a/MagickCore/quantum-private.h b/MagickCore/quantum-private.h
index c427e4c1c..0d88ebd4b 100644
--- a/MagickCore/quantum-private.h
+++ b/MagickCore/quantum-private.h
@@ -114,6 +114,15 @@ static inline MagickSizeType GetQuantumRange(const size_t depth)
((one << (MagickMin(depth,max_depth)-1))-1)));
}
+static inline EndianType GetHostEndian(void)
+{
+ unsigned long
+ lsb_first;
+
+ lsb_first=1;
+ return((*(char *) &lsb_first) == 1 ? LSBEndian : MSBEndian);
+}
+
static inline float HalfToSinglePrecision(const unsigned short half)
{
#define ExponentBias (127-15)
diff --git a/MagickCore/signature.c b/MagickCore/signature.c
index a3ec674cd..2f785d491 100644
--- a/MagickCore/signature.c
+++ b/MagickCore/signature.c
@@ -120,9 +120,6 @@ MagickPrivate SignatureInfo *AcquireSignatureInfo(void)
SignatureInfo
*signature_info;
- unsigned long
- lsb_first;
-
signature_info=(SignatureInfo *) AcquireCriticalMemory(
sizeof(*signature_info));
(void) memset(signature_info,0,sizeof(*signature_info));
@@ -136,8 +133,7 @@ MagickPrivate SignatureInfo *AcquireSignatureInfo(void)
ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
(void) memset(signature_info->accumulator,0,SignatureBlocksize*
sizeof(*signature_info->accumulator));
- lsb_first=1;
- signature_info->lsb_first=(int) (*(char *) &lsb_first) == 1 ? MagickTrue :
+ signature_info->lsb_first=GetHostEndian() == LSBEndian ? MagickTrue :
MagickFalse;
signature_info->timestamp=GetMagickTime();
signature_info->signature=MagickCoreSignature;
diff --git a/coders/viff.c b/coders/viff.c
index 23a41ebb4..806b6d98c 100644
--- a/coders/viff.c
+++ b/coders/viff.c
@@ -242,9 +242,6 @@ static Image *ReadVIFFImage(const ImageInfo *image_info,
*p,
*pixels;
- unsigned long
- lsb_first;
-
ViffInfo
viff_info;
@@ -432,8 +429,7 @@ static Image *ReadVIFFImage(const ImageInfo *image_info,
ThrowReaderException(CorruptImageError,
"InsufficientImageDataInFile");
}
- lsb_first=1;
- if (*(char *) &lsb_first &&
+ if (GetHostEndian() == LSBEndian &&
((viff_info.machine_dependency != VFF_DEP_DECORDER) &&
(viff_info.machine_dependency != VFF_DEP_NSORDER)))
switch ((int) viff_info.map_storage_type)
@@ -535,8 +531,7 @@ static Image *ReadVIFFImage(const ImageInfo *image_info,
pixels=(unsigned char *) RelinquishMagickMemory(pixels);
ThrowReaderException(CorruptImageError,"ImproperImageHeader");
}
- lsb_first=1;
- if (*(char *) &lsb_first &&
+ if (GetHostEndian() == LSBEndian &&
((viff_info.machine_dependency != VFF_DEP_DECORDER) &&
(viff_info.machine_dependency != VFF_DEP_NSORDER)))
switch ((int) viff_info.data_storage_type)