Sophie

Sophie

distrib > Mageia > 6 > armv5tl > by-pkgid > 4d7e8645afe55fc50e75e47892ce4eae > files > 1

mhash-0.9.9.9-12.mga6.src.rpm

diff -up mhash-0.9.9.9/lib/stdfns.c.BAD mhash-0.9.9.9/lib/stdfns.c
--- mhash-0.9.9.9/lib/stdfns.c.BAD	2009-07-02 16:38:43.217029623 -0400
+++ mhash-0.9.9.9/lib/stdfns.c	2009-07-02 16:41:58.647120391 -0400
@@ -152,6 +152,18 @@ mutils_bzero(void *s, __const mutils_wor
 	}
 }
 
+static void
+mutils_memset8(void *s, __const mutils_word8 c, __const mutils_word32 n)
+{
+	mutils_word8 *stmp = s;
+	mutils_word32 i;
+
+	for (i = 0; i < n; i++, stmp++)
+	{
+               *stmp = c;
+	}
+}
+
 WIN32DLL_DEFINE
 void
 mutils_memset(void *s, __const mutils_word8 c, __const mutils_word32 n)
@@ -160,8 +172,7 @@ mutils_memset(void *s, __const mutils_wo
 	/* Sparc needs 8-bit alignment - just use standard memset */
 	memset(s, (int) c, (size_t) n);
 #else
-	mutils_word8 *stmp;
-	mutils_word32 *ltmp = (mutils_word32 *) s;
+	mutils_word32 *ltmp;
 	mutils_word32 lump;
 	mutils_word32 i;
 	mutils_word32 words;
@@ -172,22 +183,30 @@ mutils_memset(void *s, __const mutils_wo
 		return;
 	}
 
+	if (n < 16)
+	{
+		return mutils_memset8(s, c, n);
+	}
+
+	/* unaligned portion at beginning */
+	remainder = (-(mutils_word32)s) & 0x3;
+	mutils_memset8(s, c, remainder);
+
+	/* aligned words in the middle */
+	ltmp = (mutils_word32 *) (s + remainder);
+
 	lump = (c << 24) + (c << 16) + (c << 8) + c;
 
-	words = n >> 2;
-	remainder = n - (words << 2);
+	words = (n - remainder) >> 2;
+	remainder = n - remainder - (words << 2);
 
 	for (i = 0; i < words; i++, ltmp++)
 	{
 		*ltmp = lump;
 	}
 
-	stmp = (mutils_word8 *) ltmp;
-
-	for (i = 0; i < remainder; i++, stmp++)
-	{
-		*stmp = c;
-	}
+	/* unaligned portion at end */
+	return mutils_memset8(ltmp, c, remainder);
 #endif
 }
 
@@ -281,6 +300,9 @@ mutils_word32nswap(mutils_word32 *x, mut
 	mutils_word32 *buffer;
 	mutils_word32 *ptrIn;
 	mutils_word32 *ptrOut;
+	mutils_word8 *ptr8In;
+	mutils_word8 *ptr8Out;
+	mutils_word8 tmp8;
 	mutils_word32 count = n * 4;
 
 	if (destructive == MUTILS_FALSE)
@@ -301,9 +323,35 @@ mutils_word32nswap(mutils_word32 *x, mut
  * data on a little-endian machine.
  */
 
-	for (loop = 0, ptrIn = x, ptrOut = buffer; loop < n; loop++, ptrOut++, ptrIn++)
+	if ((mutils_word32)x & 0x3)
+	{
+         ptr8In = (mutils_word8 *) x;
+         ptr8Out = (mutils_word8 *) buffer;
+         for (loop = 0; loop < n; loop++)
+           {
+#ifdef WORDS_BIGENDIAN
+             tmp8 = ptr8In[0];
+             ptr8Out[0] = ptr8In[3];
+             ptr8Out[3] = tmp8;
+             tmp8 = ptr8In[1];
+             ptr8Out[1] = ptr8In[2];
+             ptr8Out[2] = tmp8;
+#else
+             ptr8Out[0] = ptr8In[0];
+             ptr8Out[1] = ptr8In[1];
+             ptr8Out[2] = ptr8In[2];
+             ptr8Out[3] = ptr8In[3];
+#endif
+             ptr8Out += 4;
+             ptr8In += 4;
+           }
+	}
+	else
 	{
-		*ptrOut = mutils_lend32(*ptrIn);
+               for (loop = 0, ptrIn = x, ptrOut = buffer; loop < n; loop++, ptrOut++, ptrIn++)
+               {
+                       *ptrOut = mutils_lend32(*ptrIn);
+               }
 	}
 
 	return(buffer);