On GNU/Linux, it isn't declared in stdio.h unless we define
_GNU_SOURCE, which we don't; using the implicit declaration risks
crashes on platforms where sizeof(pointer) != sizeof(int). On other
platforms it isn't guaranteed to exist at all.
Signed-off-by: Simon McVittie <smcv@debian.org>
my $ret=<<"EOF";
{
int u=getuid();
+ /* 3 characters per byte is certainly enough */
+ char uid_string[sizeof(u) * 3 + 1];
EOF
$ret.="\t\tif ( ".
join("&&", map {
while (read(0, &buf, 256) != 0) {}
exit(0);
}
- asprintf(&s, "%i", u);
- addenv("CALLER_UID", s);
+ snprintf(uid_string, sizeof(uid_string), "%i", u);
+ addenv("CALLER_UID", uid_string);
}
EOF
return $ret;