Always define LD_32_PRELOAD so it works for 32 bits binaries on

64 bits platforms.  Let rtld(1) decide if it needs to honor it
or not.

While here, fix a small bug in error reporting when asprintf(3)
returns an error.

Submitted by:	kib
Reviewed by:	kib (mentor)
MFC after:	1 week
This commit is contained in:
Jeremie Le Hen 2012-05-08 19:43:32 +00:00
parent 9f63b42217
commit d3dee93474

View File

@ -32,6 +32,7 @@
#include <unistd.h>
#define LIBSTDBUF "/usr/lib/libstdbuf.so"
#define LIBSTDBUF32 "/usr/lib32/libstdbuf.so"
extern char *__progname;
@ -92,7 +93,17 @@ main(int argc, char *argv[])
LIBSTDBUF);
if (i < 0 || putenv(preload1) == -1)
warn("Failed to set environment variable: %s", preload1);
warn("Failed to set environment variable: LD_PRELOAD");
preload0 = getenv("LD_32_PRELOAD");
if (preload0 == NULL)
i = asprintf(&preload1, "LD_32_PRELOAD=" LIBSTDBUF32);
else
i = asprintf(&preload1, "LD_32_PRELOAD=%s:%s", preload0,
LIBSTDBUF32);
if (i < 0 || putenv(preload1) == -1)
warn("Failed to set environment variable: LD_32_PRELOAD");
execvp(argv[0], argv);
err(2, "%s", argv[0]);