Correctly print uint64_t / size_t in C

Have you even stumbled upon a strange warning when trying to print an uint64_t or a size_t ?
Do no take that warning lightly, as your code can break anytime if you’re not fixing it.

Warning example:

warning: format '%llu' expects argument of type 'long long unsigned int', but argument 4 has type 'uint64_t' [-Wformat]

To avoid the warning and crashes, you have to use a one of the PRIxxx macro which will choose the right way for your system to print the value, without crashes.

#include <inttypes.h>
uint64_t i;
printf("%"PRIu64"\n", i);

Macros for printf family can be found here.

execve: no such file or directory

If one day when using execve you encounter the “no such file or directory” problem, and that the file you tried to launch is really existing and with the good rights, then the problem is coming from the shebang not pointing to a valid interpreter.

In example: #!/bin/ksh and ksh is not installed

#reminder #execve

Cross platform correct socket error code

A friend using my networking code made the good point that it was not correctly reporting errors on some windows compilers.

I hope we got this sorted out.

Grab / update your code from the git repo:

-netw_unload() =>macro who calls WSACleanup . Call it before exiting (on OK or error). Does nothing on *nix/*nux

-netw_set_blocking(…) => set blocking mode on a network

-neterr => WSAGetLastError or errno
-netstrerr => FormatMessage or strerror (strerror_r wrapper is quoted because not working on redhat)

This has caused a full revamping of all error management, but now it’s ok. Valgrind checked.

#nilorea-library #networking #winsock #socket