From dfba2b34d35ddfd47233293f2f28978e8acfc87c Mon Sep 17 00:00:00 2001
From: Sebastian Pipping <sebastian@pipping.org>
Date: Wed, 14 Mar 2018 21:18:14 +0100
Subject: [PATCH] Address clash of export reallocarray with glibc
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

.. by renaming the exported symbol and the related
function in code and where it's used.

Bug: https://bugs.gentoo.org/637438

Compile error was:

/usr/include/gif_lib.h:248:51: error: declaration of ‘void* reallocarray(void*, size_t, size_t)’ has a different exception specifier
 reallocarray(void *optr, size_t nmemb, size_t size);
                                                   ^
[..]
/usr/include/stdlib.h:443:14: error: from previous declaration ‘void* reallocarray(void*, size_t, size_t) throw ()’
 extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
---
 lib/dgif_lib.c             |  4 ++--
 lib/gif_lib.h              |  2 +-
 lib/gifalloc.c             | 10 +++++-----
 lib/openbsd-reallocarray.c |  2 +-
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/lib/dgif_lib.c b/lib/dgif_lib.c
index 66a1d6a..f0e0385 100644
--- a/lib/dgif_lib.c
+++ b/lib/dgif_lib.c
@@ -396,7 +396,7 @@ DGifGetImageDesc(GifFileType *GifFile)
 
     if (GifFile->SavedImages) {
         SavedImage* new_saved_images =
-            (SavedImage *)reallocarray(GifFile->SavedImages,
+            (SavedImage *)openbsd_reallocarray(GifFile->SavedImages,
                             (GifFile->ImageCount + 1), sizeof(SavedImage));
         if (new_saved_images == NULL) {
             GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
@@ -1108,7 +1108,7 @@ DGifSlurp(GifFileType *GifFile)
               if (ImageSize > (SIZE_MAX / sizeof(GifPixelType))) {
                   return GIF_ERROR;
               }
-              sp->RasterBits = (unsigned char *)reallocarray(NULL, ImageSize,
+              sp->RasterBits = (unsigned char *)openbsd_reallocarray(NULL, ImageSize,
                       sizeof(GifPixelType));
 
               if (sp->RasterBits == NULL) {
diff --git a/lib/gif_lib.h b/lib/gif_lib.h
index 078930c..cefc3bb 100644
--- a/lib/gif_lib.h
+++ b/lib/gif_lib.h
@@ -245,7 +245,7 @@ extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1,
 extern int GifBitSize(int n);
 
 extern void *
-reallocarray(void *optr, size_t nmemb, size_t size);
+openbsd_reallocarray(void *optr, size_t nmemb, size_t size);
 
 /******************************************************************************
  Support for the in-core structures allocation (slurp mode).              
diff --git a/lib/gifalloc.c b/lib/gifalloc.c
index 3b51868..1394cfa 100644
--- a/lib/gifalloc.c
+++ b/lib/gifalloc.c
@@ -188,7 +188,7 @@ GifUnionColorMap(const ColorMapObject *ColorIn1,
 
         /* perhaps we can shrink the map? */
         if (RoundUpTo < ColorUnion->ColorCount) {
-            GifColorType *new_map = (GifColorType *)reallocarray(Map,
+            GifColorType *new_map = (GifColorType *)openbsd_reallocarray(Map,
                                  RoundUpTo, sizeof(GifColorType));
             if( new_map == NULL ) {
                 GifFreeMapObject(ColorUnion);
@@ -232,7 +232,7 @@ GifAddExtensionBlock(int *ExtensionBlockCount,
     if (*ExtensionBlocks == NULL)
         *ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock));
     else {
-        ExtensionBlock* ep_new = (ExtensionBlock *)reallocarray
+        ExtensionBlock* ep_new = (ExtensionBlock *)openbsd_reallocarray
 				 (*ExtensionBlocks, (*ExtensionBlockCount + 1),
                                       sizeof(ExtensionBlock));
         if( ep_new == NULL )
@@ -325,7 +325,7 @@ GifMakeSavedImage(GifFileType *GifFile, const SavedImage *CopyFrom)
     if (GifFile->SavedImages == NULL)
         GifFile->SavedImages = (SavedImage *)malloc(sizeof(SavedImage));
     else
-        GifFile->SavedImages = (SavedImage *)reallocarray(GifFile->SavedImages,
+        GifFile->SavedImages = (SavedImage *)openbsd_reallocarray(GifFile->SavedImages,
                                (GifFile->ImageCount + 1), sizeof(SavedImage));
 
     if (GifFile->SavedImages == NULL)
@@ -355,7 +355,7 @@ GifMakeSavedImage(GifFileType *GifFile, const SavedImage *CopyFrom)
             }
 
             /* next, the raster */
-            sp->RasterBits = (unsigned char *)reallocarray(NULL,
+            sp->RasterBits = (unsigned char *)openbsd_reallocarray(NULL,
                                                   (CopyFrom->ImageDesc.Height *
                                                   CopyFrom->ImageDesc.Width),
 						  sizeof(GifPixelType));
@@ -369,7 +369,7 @@ GifMakeSavedImage(GifFileType *GifFile, const SavedImage *CopyFrom)
 
             /* finally, the extension blocks */
             if (sp->ExtensionBlocks != NULL) {
-                sp->ExtensionBlocks = (ExtensionBlock *)reallocarray(NULL,
+                sp->ExtensionBlocks = (ExtensionBlock *)openbsd_reallocarray(NULL,
                                       CopyFrom->ExtensionBlockCount,
 				      sizeof(ExtensionBlock));
                 if (sp->ExtensionBlocks == NULL) {
diff --git a/lib/openbsd-reallocarray.c b/lib/openbsd-reallocarray.c
index aa70686..b922b01 100644
--- a/lib/openbsd-reallocarray.c
+++ b/lib/openbsd-reallocarray.c
@@ -27,7 +27,7 @@
 #define MUL_NO_OVERFLOW	((size_t)1 << (sizeof(size_t) * 4))
 
 void *
-reallocarray(void *optr, size_t nmemb, size_t size)
+openbsd_reallocarray(void *optr, size_t nmemb, size_t size)
 {
 	if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) &&
 	    nmemb > 0 && SIZE_MAX / nmemb < size) {
-- 
2.17.0.rc2

