From 7b8399f479fb9ebaf816a49246ea5c6354a0769e Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Wed, 8 Apr 2015 19:11:21 +0200 Subject: pldd: Use struct scratch_buffer instead of extend_alloca --- elf/pldd.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'elf/pldd.c') diff --git a/elf/pldd.c b/elf/pldd.c index 9e1d822..2b86224 100644 --- a/elf/pldd.c +++ b/elf/pldd.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -118,18 +119,25 @@ main (int argc, char *argv[]) if (dfd == -1) error (EXIT_FAILURE, errno, gettext ("cannot open %s"), buf); - size_t exesize = 1024; -#ifdef PATH_MAX - exesize = PATH_MAX; -#endif - exe = alloca (exesize); + struct scratch_buffer exebuf; + scratch_buffer_init (&exebuf); ssize_t nexe; - while ((nexe = readlinkat (dfd, "exe", exe, exesize)) == exesize) - extend_alloca (exe, exesize, 2 * exesize); + while ((nexe = readlinkat (dfd, "exe", + exebuf.data, exebuf.length)) == exebuf.length) + { + if (!scratch_buffer_grow (&exebuf)) + { + nexe = -1; + break; + } + } if (nexe == -1) exe = (char *) ""; else - exe[nexe] = '\0'; + { + exe = exebuf.data; + exe[nexe] = '\0'; + } /* Stop all threads since otherwise the list of loaded modules might change while we are reading it. */ -- cgit v1.1