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)