Hi Simon,

Compiling a testdir of module 'crc' with "gcc -Wall", I see these warnings:

gcc -ftrapv -DHAVE_CONFIG_H -I. -I../../gltests -I..  
-DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. -I../../gltests -I.. 
-I../../gltests/.. -I../gllib -I../../gltests/../gllib 
-I/media/develdata/devel/inst-x86_64-64/include -Wall  -Wno-error -g -O2 -MT 
test-crc.o -MD -MP -MF .deps/test-crc.Tpo -c -o test-crc.o 
../../gltests/test-crc.c
../../gltests/test-crc.c: In function ‘main’:
../../gltests/test-crc.c:106:35: warning: pointer targets in passing argument 2 
of ‘crc32_update_no_xor’ differ in signedness [-Wpointer-sign]
  106 |       p = crc32_update_no_xor (0, randomb, MAX_ALIGNMENT + i);
      |                                   ^~~~~~~
      |                                   |
      |                                   const unsigned char *
In file included from ../../gltests/test-crc.c:21:
../../gltests/../gllib/crc.h:52:48: note: expected ‘const char *’ but argument 
is of type ‘const unsigned char *’
   52 | crc32_update_no_xor (uint32_t crc, const char *buf, size_t len)
      |                                    ~~~~~~~~~~~~^~~
../../gltests/test-crc.c:119:43: warning: pointer targets in passing argument 2 
of ‘crc32_update_no_xor’ differ in signedness [-Wpointer-sign]
  119 |       p = crc32_update_no_xor (0, randomb + i, (MAX_ALIGNMENT * 2) - i);
      |                                   ~~~~~~~~^~~
      |                                           |
      |                                           const unsigned char *
In file included from ../../gltests/test-crc.c:21:
../../gltests/../gllib/crc.h:52:48: note: expected ‘const char *’ but argument 
is of type ‘const unsigned char *’
   52 | crc32_update_no_xor (uint32_t crc, const char *buf, size_t len)
      |                                    ~~~~~~~~~~~~^~~
mv -f .deps/test-crc.Tpo .deps/test-crc.Po


I think that the proper fix is to change the prototypes of the 4 functions
in crc.h from 'const char *buf' to 'const void *buf'. Just like memset(),
memcmp(), etc. take 'void *', not 'char *', parameters.

What do you think?

Bruno




Reply via email to