From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5] helo=mx0a-001b2d01.pphosted.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mxRN2-0009Zh-O5 for kexec@lists.infradead.org; Wed, 15 Dec 2021 10:18:51 +0000 From: Sven Schnelle Subject: [PATCH v2 3/5] add slurp_proc_file() Date: Wed, 15 Dec 2021 11:18:34 +0100 Message-Id: <20211215101836.1181165-4-svens@linux.ibm.com> In-Reply-To: <20211215101836.1181165-1-svens@linux.ibm.com> References: <20211215101836.1181165-1-svens@linux.ibm.com> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: Simon Horman Cc: kexec@lists.infradead.org, prudo@redhat.com, Sven Schnelle slurp_file() cannot be used to read proc files, as they are returning a size of zero in stat(). Add a function slurp_proc_file() which is similar to slurp_file(), but doesn't require the size of the file to be known. Signed-off-by: Sven Schnelle --- kexec/kexec.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/kexec/kexec.c b/kexec/kexec.c index f63b36b771eb..a1acba2adf2a 100644 --- a/kexec/kexec.c +++ b/kexec/kexec.c @@ -1106,6 +1106,38 @@ static void remove_parameter(char *line, const char *param_name) } } +static char *slurp_proc_file(const char *filename, size_t *len) +{ + ssize_t ret, startpos = 0; + unsigned int size = 64; + char *buf = NULL, *tmp; + int fd; + + fd = open(filename, O_RDONLY); + if (fd == -1) + return NULL; + + do { + size *= 2; + tmp = realloc(buf, size); + if (!tmp) { + free(buf); + return NULL; + } + buf = tmp; + + ret = read(fd, buf + startpos, size - startpos); + if (ret < 0) { + free(buf); + return NULL; + } + startpos += ret; + *len = startpos; + } while (ret == size); + + return buf; +} + /* * Returns the contents of the current command line to be used with * --reuse-cmdline option. The function gets called from architecture specific -- 2.32.0 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec