On 64-bit systems LONG_MAX is greater than the largest possible value of a
uint32_t variable, which caused the compiler to warn about a comparison that is
always false. On 32-bit systems pa_atou() can return a value that will overflow
when assigned to e->volume_limit, which has type long, so the comparison was
necessary.
This dilemma is resolved by using pa_atol() instead of pa_atou().
pulsecore/core-util.c: In function ‘pa_hexstr’:
pulsecore/core-util.c:1858: warning: cannot optimize loop, the loop counter may overflow [-Wunsafe-loop-optimizations]
modules/alsa/alsa-mixer.c: In function ‘pa_alsa_decibel_fix_dump’:
modules/alsa/alsa-mixer.c:3678: warning: cannot optimize possibly infinite loops [-Wunsafe-loop-optimizations]
modules/alsa/alsa-mixer.c: In function ‘pa_alsa_path_set_new’:
modules/alsa/alsa-mixer.c:2640: warning: cannot optimize loop, the loop counter may overflow [-Wunsafe-loop-optimizations]
modules/module-default-device-restore.c: In function ‘load’:
modules/module-default-device-restore.c:67: warning: ignoring return value of ‘fgets’,
declared with attribute warn_unused_result [-Wunused-result]
modules/module-default-device-restore.c:88: warning: ignoring return value of ‘fgets’,
declared with attribute warn_unused_result [-Wunused-result]
pulsecore/authkey.c: In function ‘generate’:
pulsecore/authkey.c:58: warning: ignoring return value of ‘ftruncate’,
declared with attribute warn_unused_result [-Wunused-result]
pulsecore/core-util.c: In function ‘pa_make_secure_dir’:
pulsecore/core-util.c:261: warning: ignoring return value of ‘fchown’,
declared with attribute warn_unused_result [-Wunused-result]
The check whether POSIX socket.h or WIN32 winsock2.h must be included can be
made centrally. The downside is that some functionality of e.g. arpa/inet.h is
also implemented in winsock.h, so that some files that don't use socket
functions, but do use inet.h functions, must also include pulsecore/socket.h.
(as well as arpa/inet.h)
In theory putenv could be used to handle freeing of strings yourself, but this
was not done in PulseAudio. That leaves no advantages in using putenv. With
setenv you're at the mercy of the implementation whether the strings leak, but
at least that is better then a certain leak, as it was before.
Provides getgrgid, getgrnam, getpwuid & getpwnam replacements that are
thread safe (a la getgrgid_r() and friends) that internally
handle allocating big-enough buffers to avoid ERANGE errors
on large users or groups.
According to POSIX getgrnam_r() returns the error code as return value,
and not in errno. Honour that.
Pointed out and inspired by a patch from Ted Percival.