xref: /freebsd/stand/kboot/libkboot/util.c (revision 14acbf6159c3efa8ce3965bb1211d4232af3fb4f)
1 /*-
2  * Copyright 2022 Netflix, Inc
3  *
4  * SPDX-License-Identifier: BSD-2-Clause
5  */
6 
7 #include "stand.h"
8 #include "host_syscall.h"
9 #include "util.h"
10 
11 bool
file2str(const char * fn,char * buffer,size_t buflen)12 file2str(const char *fn, char *buffer, size_t buflen)
13 {
14 	int fd;
15 	ssize_t len;
16 
17 	fd = host_open(fn, HOST_O_RDONLY, 0);
18 	if (fd == -1)
19 		return false;
20 	len = host_read(fd, buffer, buflen - 1);
21 	if (len < 0) {
22 		host_close(fd);
23 		return false;
24 	}
25 	buffer[len] = '\0';
26 	/*
27 	 * Trim trailing white space
28 	 */
29 	while (isspace(buffer[len - 1]))
30 		buffer[--len] = '\0';
31 	host_close(fd);
32 	return true;
33 }
34 
35 bool
file2u64(const char * fn,uint64_t * val)36 file2u64(const char *fn, uint64_t *val)
37 {
38 	unsigned long long v;
39 	char buffer[80];
40 
41 	if (!file2str(fn, buffer, sizeof(buffer)))
42 		return false;
43 	v = strtoull(buffer, NULL, 0);	/* XXX check return values? */
44 	*val = v;
45 	return true;
46 }
47 
48 bool
file2u32(const char * fn,uint32_t * val)49 file2u32(const char *fn, uint32_t *val)
50 {
51 	unsigned long v;
52 	char buffer[80];
53 
54 	if (!file2str(fn, buffer, sizeof(buffer)))
55 		return false;
56 	v = strtoul(buffer, NULL, 0);	/* XXX check return values? */
57 	*val = v;
58 	return true;
59 }
60