Am 28.09.2015 um 09:00 schrieb Markus Armbruster: > Stefan Weil <s...@weilnetz.de> writes: > >> On Windows, getpid() always returns an int value, but pid_t (which is >> expected by the format string) is either a 32 bit or a 64 bit value. >> >> Without a type cast (or a modified format string), the compiler prints >> a warning when building for 64 bit Windows and the resulting trace_file_name >> will include a wrong pid: >> >> trace/simple.c:332:9: warning: >> format ‘%lld’ expects argument of type ‘long long int’, >> but argument 2 has type ‘int’ [-Wformat=] >> >> Signed-off-by: Stefan Weil <s...@weilnetz.de> >> --- >> trace/simple.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/trace/simple.c b/trace/simple.c >> index 11ad030..56a624c 100644 >> --- a/trace/simple.c >> +++ b/trace/simple.c >> @@ -329,7 +329,8 @@ bool st_set_trace_file(const char *file) >> g_free(trace_file_name); >> >> if (!file) { >> - trace_file_name = g_strdup_printf(CONFIG_TRACE_FILE, getpid()); >> + /* Type cast needed for Windows where getpid() returns an int. */ >> + trace_file_name = g_strdup_printf(CONFIG_TRACE_FILE, >> (pid_t)getpid()); >> } else { >> trace_file_name = g_strdup_printf("%s", file); >> } > First we go to the trouble of defining a platform-dependent FMT_pid, and > then we get to cast anyway. Meh. > > Can you explain why osdep.h's > > #define FMT_pid "%" PRId64 > > is appropriate for Windows?
Don't blame me for any strangeness which you might find in Windows. :-) Mingw-w64 sys/types.h defines pid_t to be either an int or an __int64. FMT_pid must match these definitions. But getpid returns an int, not a pid_t...