0003-fix-incorrect-inline.patch 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. utf: do not define decode() to be inline
  2. Currently, decode() is prototyped in utf.h, its body is in utf.c and it
  3. is called from util.c.
  4. However, decode() is defined to be inline, which can not work since,
  5. when compiling util.c, the body of decode() is out-of-scope for that
  6. compilation unit.
  7. Furthermore, decode() uses a utf8d, which is a static defined in utf.c .
  8. So utf8d is not visible when compiling util.c either.
  9. This means that the definition of decode() along with utf8d is basically
  10. wrong, and is now failing with gcc-5.x, with warnings like so:
  11. libtool: compile: /home/ymorin/dev/buildroot/O/host/usr/bin/arm-linux-gcc -DHAVE_CONFIG_H -I. -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wmissing-prototypes -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -c utf.c -fPIC -DPIC -o .libs/libwebsock_la-utf.o
  12. utf.c:36:12: warning: ‘utf8d’ is static but used in inline function ‘decode’ which is not static
  13. *state = utf8d[256 + *state*16 + type];
  14. ^
  15. utf.c:30:19: warning: ‘utf8d’ is static but used in inline function ‘decode’ which is not static
  16. uint32_t type = utf8d[byte];
  17. ^
  18. libtool: compile: /home/ymorin/dev/buildroot/O/host/usr/bin/arm-linux-gcc -DHAVE_CONFIG_H -I. -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wmissing-prototypes -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -c util.c -fPIC -DPIC -o .libs/libwebsock_la-util.o
  19. In file included from websock.h:73:0,
  20. from util.c:20:
  21. utf.h:25:17: warning: inline function ‘decode’ declared but never defined
  22. uint32_t inline decode(uint32_t *state, uint32_t *codep, uint32_t byte);
  23. ^
  24. This results in decode() to be omitted from libwebsock.so, and thus link
  25. failures when another program wants to link with -lwebsock.
  26. The simplest solution is to not inline decode() at all.
  27. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
  28. ---
  29. Note: an alternative would be to move both decode() and utf8d into
  30. decode.h nad ditch decode.c if decode really must be inline. This is
  31. left as an execise for an interested party. But since upstream hasn't
  32. seen a single commit in more than a year now... :-(
  33. diff -durN a/src/utf.c b/src/utf.c
  34. --- a/src/utf.c 2014-07-15 01:43:20.000000000 +0200
  35. +++ b/src/utf.c 2015-08-22 22:29:38.667393786 +0200
  36. @@ -24,7 +24,7 @@
  37. 1,3,1,1,1,1,1,3,1,3,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // s7..s8
  38. };
  39. -uint32_t inline
  40. +uint32_t
  41. decode(uint32_t* state, uint32_t* codep, uint32_t byte)
  42. {
  43. uint32_t type = utf8d[byte];
  44. diff -durN a/src/utf.h b/src/utf.h
  45. --- a/src/utf.h 2014-07-15 01:43:20.000000000 +0200
  46. +++ b/src/utf.h 2015-08-22 22:29:10.439227396 +0200
  47. @@ -22,7 +22,7 @@
  48. #include <stdint.h>
  49. -uint32_t inline decode(uint32_t *state, uint32_t *codep, uint32_t byte);
  50. +uint32_t decode(uint32_t *state, uint32_t *codep, uint32_t byte);
  51. #endif /* UTF_H_ */