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