On Wed, 11 Sep 2024, Hal Murray via devel wrote:

I'm trying to cleanup the tangle in ntp_control.c that generates warnings.
They may be actual bugs.  The problem is that the man page says long while
the actual size may be 32 or 64 on 32 bit Linux systems.

If I knew the size, the fix would be simple.  wscript has code to get the
size of a type but I don't know the type.

Resorting to configure tests just to get type sizes is in general a bad idea, for aforementioned reasons.

Can anybody write the waf code for me that will give me the size of
ntx.errcnt if ntx is a struct timex?

You can just use sizeof(). The only caveat is that there's no way (AFAIK) to apply it to an element of an abstract type, so you need a concrete instance to apply it to. But the concrete instance can even be just a pointer, as long as it's a pointer to a complete struct type.

Here's an example with a less OS-dependent struct:
---------------------------------------------------------------------------
/* Test of sizeof for a struct element. */

#include <stdio.h>
#include <sys/time.h>

int
main(int argc, const char *argv[])
{
  struct timeval *tvp;

  (void) argc; (void) argv;

  printf("Size of struct timeval's tv_sec = %d bytes\n",
         (int) sizeof(tvp->tv_sec));
  return 0;
}
---------------------------------------------------------------------------

You can similarly determine the type of a struct element with typeof(), though that can get a bit tricky depending on compiler version and pedantry level.

Fred Wright
_______________________________________________
devel mailing list
devel@ntpsec.org
https://lists.ntpsec.org/mailman/listinfo/devel

Reply via email to