libmng-1.0.6 on FreeBSD/alpha
Matthew Luckie <[email protected]> Wed, 17 Mar 2004 22:20:44 +1300
| Newsgroups | gmane.comp.graphics.mng.general |
|---|---|
| Message-ID | <[email protected]> |
[non-member submission]
Hi mng-list
I have a FreeBSD DEC alpha system - a system with 64 bit pointers. When
compiling libmng on it, I get a series of compilation warnings.
I've detailed the warnings below, and also provided some kind of
suggestion as to what I think it should be changed to. I'm no expert in
the mng field, but the code as it stands seems to be incorrect and seems
to me that it would lead to unpredictable results on 64 bit platforms.
If there is some test suite available to check for correctness, could I
be pointed at it so that I can check the library works on the alpha
platform? Please CC me on any response, I'm not subscribed.
i've put the patch up at
http://voodoo.cs.waikato.ac.nz/~mjl12/patch-libmng-alpha
Thanks
cc -fpic -DPIC -O -pipe -mcpu=ev4 -I/usr/local/include -DMNG_FULL_CMS
-DMNG_BUILD_SO -c libmng_object_prc.c -o libmng_object_prc.So
libmng_object_prc.c: In function `mng_promote_imageobject':
libmng_object_prc.c:1665: warning: cast from pointer to integer of
different size
libmng_object_prc.c:1665: warning: cast to pointer from integer of
different size
libmng_object_prc.c:1666: warning: cast from pointer to integer of
different size
libmng_object_prc.c:1666: warning: cast to pointer from integer of
different size
The code for these warnings is a bit difficult for me to understand. On
an i386 machine, the following patch should lead to an equivalent result
by my understanding
--- libmng-1.0.6.orig/libmng_object_prc.c Mon Oct 20 04:20:13 2003
+++ libmng-1.0.6/libmng_object_prc.c Wed Mar 17 20:30:39 2004
@@ -1662,8 +1662,8 @@
while ((!iRetcode) && (iY < iH))
{
iRetcode = ((mng_promoterow)pData->fPromoterow) (pData);
- pData->pPromSrc = (mng_ptr)((mng_uint32)pData->pPromSrc +
pBuf->iRowsize);
- pData->pPromDst = (mng_ptr)((mng_uint32)pData->pPromDst +
iNewrowsize);
+ pData->pPromSrc = pData->pPromSrc + pBuf->iRowsize;
+ pData->pPromDst = pData->pPromDst + iNewrowsize;
iY++;
}
the casts seem fairly pointless to me. both casts are to 32 bit values.
exactly what should happen in the 64 bit case is unclear to me.
perhaps this code should be looked into.
There is also
cc -fpic -DPIC -O -pipe -mcpu=ev4 -I/usr/local/include -DMNG_FULL_CMS
-DMNG_BUILD_SO -c libmng_pixels.c -o libmng_pixels.So
libmng_pixels.c: In function `mng_scale_g1_g16':
libmng_pixels.c:6763: warning: cast from pointer to integer of different
size
libmng_pixels.c:6763: warning: cast to pointer from integer of different
size
libmng_pixels.c:6764: warning: cast from pointer to integer of different
size
libmng_pixels.c:6764: warning: cast to pointer from integer of different
size
libmng_pixels.c: In function `mng_scale_g2_g16':
libmng_pixels.c:6856: warning: cast from pointer to integer of different
size
libmng_pixels.c:6856: warning: cast to pointer from integer of different
size
libmng_pixels.c:6857: warning: cast from pointer to integer of different
size
libmng_pixels.c:6857: warning: cast to pointer from integer of different
size
libmng_pixels.c: In function `mng_scale_g4_g16':
libmng_pixels.c:6921: warning: cast from pointer to integer of different
size
libmng_pixels.c:6921: warning: cast to pointer from integer of different
size
libmng_pixels.c:6922: warning: cast from pointer to integer of different
size
libmng_pixels.c:6922: warning: cast to pointer from integer of different
size
libmng_pixels.c: In function `mng_scale_g8_g16':
libmng_pixels.c:6958: warning: cast from pointer to integer of different
size
libmng_pixels.c:6958: warning: cast to pointer from integer of different
size
libmng_pixels.c:6959: warning: cast from pointer to integer of different
size
libmng_pixels.c:6959: warning: cast to pointer from integer of different
size
libmng_pixels.c: In function `mng_scale_ga8_ga16':
libmng_pixels.c:6995: warning: cast from pointer to integer of different
size
libmng_pixels.c:6995: warning: cast to pointer from integer of different
size
libmng_pixels.c:6996: warning: cast from pointer to integer of different
size
libmng_pixels.c:6996: warning: cast to pointer from integer of different
size
libmng_pixels.c: In function `mng_scale_rgb8_rgb16':
libmng_pixels.c:7034: warning: cast from pointer to integer of different
size
libmng_pixels.c:7034: warning: cast to pointer from integer of different
size
libmng_pixels.c:7035: warning: cast from pointer to integer of different
size
libmng_pixels.c:7035: warning: cast to pointer from integer of different
size
libmng_pixels.c: In function `mng_scale_rgba8_rgba16':
libmng_pixels.c:7075: warning: cast from pointer to integer of different
size
libmng_pixels.c:7075: warning: cast to pointer from integer of different
size
libmng_pixels.c:7076: warning: cast from pointer to integer of different
size
libmng_pixels.c:7076: warning: cast to pointer from integer of different
size
this is the patch I've come up with. instead of casting to a 4 byte
value and then indexing on that, I multiply the index value by 4.
--- libmng-1.0.6.orig/libmng_pixels.c Mon Oct 20 04:20:14 2003
+++ libmng-1.0.6/libmng_pixels.c Wed Mar 17 20:14:52 2004
@@ -6760,8 +6760,8 @@
MNG_TRACE (pData, MNG_FN_SCALE_G1_G16, MNG_LC_START)
#endif
- pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + pData->iRowsamples - 1);
- pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples -
1) << 1));
+ pWorkrow = pWorkrow + ((pData->iRowsamples - 1) * 4);
+ pOutrow = pOutrow + (((pData->iRowsamples - 1) << 1) * 4);
#ifdef MNG_DECREMENT_LOOPS
for (iX = pData->iRowsamples; iX > 0; iX--)
@@ -6853,8 +6853,8 @@
MNG_TRACE (pData, MNG_FN_SCALE_G2_G16, MNG_LC_START)
#endif
- pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + pData->iRowsamples - 1);
- pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples -
1) << 1));
+ pWorkrow = pWorkrow + ((pData->iRowsamples - 1) * 4);
+ pOutrow = pOutrow + (((pData->iRowsamples - 1) << 1) * 4);
#ifdef MNG_DECREMENT_LOOPS
for (iX = pData->iRowsamples; iX > 0; iX--)
@@ -6918,8 +6918,8 @@
MNG_TRACE (pData, MNG_FN_SCALE_G4_G16, MNG_LC_START)
#endif
- pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + pData->iRowsamples - 1);
- pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples -
1) << 1));
+ pWorkrow = pWorkrow + ((pData->iRowsamples - 1) * 4);
+ pOutrow = pOutrow + (((pData->iRowsamples - 1) << 1) * 4);
#ifdef MNG_DECREMENT_LOOPS
for (iX = pData->iRowsamples; iX > 0; iX--)
@@ -6955,8 +6955,8 @@
MNG_TRACE (pData, MNG_FN_SCALE_G8_G16, MNG_LC_START)
#endif
- pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + pData->iRowsamples - 1);
- pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples -
1) << 1));
+ pWorkrow = pWorkrow + ((pData->iRowsamples - 1) * 4);
+ pOutrow = pOutrow + (((pData->iRowsamples - 1) << 1) * 4);
#ifdef MNG_DECREMENT_LOOPS
for (iX = pData->iRowsamples; iX > 0; iX--)
@@ -6992,8 +6992,8 @@
MNG_TRACE (pData, MNG_FN_SCALE_GA8_GA16, MNG_LC_START)
#endif
- pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + ((pData->iRowsamples -
1) << 1));
- pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples -
1) << 2));
+ pWorkrow = pWorkrow + (((pData->iRowsamples - 1) << 1) * 4);
+ pOutrow = pOutrow + (((pData->iRowsamples - 1) << 2) * 4);
#ifdef MNG_DECREMENT_LOOPS
for (iX = pData->iRowsamples; iX > 0; iX--)
@@ -7031,8 +7031,8 @@
MNG_TRACE (pData, MNG_FN_SCALE_RGB8_RGB16, MNG_LC_START)
#endif
- pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + 3 *
(pData->iRowsamples - 1));
- pOutrow = (mng_uint8p)((mng_uint32)pOutrow + 6 *
(pData->iRowsamples - 1));
+ pWorkrow = pWorkrow + 12 * (pData->iRowsamples - 1);
+ pOutrow = pOutrow + 24 * (pData->iRowsamples - 1);
#ifdef MNG_DECREMENT_LOOPS
for (iX = pData->iRowsamples; iX > 0; iX--)
@@ -7072,8 +7072,8 @@
MNG_TRACE (pData, MNG_FN_SCALE_RGBA8_RGBA16, MNG_LC_START)
#endif
- pWorkrow = (mng_uint8p)((mng_uint32)pWorkrow + ((pData->iRowsamples -
1) << 2));
- pOutrow = (mng_uint8p)((mng_uint32)pOutrow + ((pData->iRowsamples -
1) << 3));
+ pWorkrow = pWorkrow + (((pData->iRowsamples - 1) << 2) * 4);
+ pOutrow = pOutrow + (((pData->iRowsamples - 1) << 3) * 4);
--
Send the message body "help" to [email protected]