You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Christopher Schultz <ch...@christopherschultz.net> on 2022/06/14 18:00:56 UTC

Re: Compiler warnings when compiling tcnative with -Wall -pedantic -ansi

All,

On 5/5/22 08:27, Christopher Schultz wrote:
> All,
> 
> When compiling with these extra flags, we get a raft of errors which are 
> mostly:
> 
> 1. Use of "long long" which is an "extension"
> 2. Use of // style comments
> 3. Use of mixed declarations and code
> 
> When setting -std=C99 all of these go away. This flag works with both 
> gcc and clang, but I don't know how many other systems and compilers we 
> expect to support.
> 
> Are we requiring the use of a C99-compliant compiler? If so, we probably 
> want to add one or more CFLAGS to make that explicit.

For 1.2.34, I again used --std=c99 -Wall -pedantic to build and I 
noticed this on gcc under Linux:

os/unix/system.c: In function ‘Java_org_apache_tomcat_jni_OS_info’:
os/unix/system.c:174:41: warning: format ‘%llu’ expects argument of type 
‘long long unsigned int *’, but argument 5 has type ‘long long int *’ 
[-Wformat=]
   174 |                         if (sscanf(buf, "%*d %*s %*c %*d %*d 
%*d %*d %*d %*u"
       | 
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
......
   178 |                                         "%llu", &user, &system, 
&starttime) == 3) {
       | 
  ~~~~~~~~~~
       |                                                                 |
       | 
  long long int *
os/unix/system.c:178:45: note: format string is defined here
   178 |                                         "%llu", &user, &system, 
&starttime) == 3) {
       |                                          ~~~^
       |                                             |
       |                                             long long unsigned 
int *
       |                                          %llu

On system.c:176 there is this comment:
174      * utime %lu (!), stime %lu (!), cutime %ld (!), cstime %ld (!),
175      * priority %ld, nice %ld, num_threads %ld, itrealvalue %ld,
176      * starttime %llu (!) */

Note the (!) in the comment. I'm not sure if that's meant to indicate a 
known issue with the variable and format or not. There are similar (!) 
notations on line 174 for each of those items.

Rainer laid that code into os/unix/system.c all at once back in 2012.

tcnative uses that starttime value to compute the process-start time 
value. All other participants in the computation are apr_time_t 
(apr_int64_t - signed), long (signed), so I think starttime should be 
signed as well. (Honestly, unsigned makes more sense IMO but everything 
else is signed.)

It's only the scanf format that looks wrong: it's "%llu" and should 
probably be "%lld".

WDYT?

-chris

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org