The branch main has been updated by imp:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=7e1a2e46aa9a2f834c33b5c50de0437ac19d7b41

commit 7e1a2e46aa9a2f834c33b5c50de0437ac19d7b41
Author:     Warner Losh <[email protected]>
AuthorDate: 2022-12-02 18:05:58 +0000
Commit:     Warner Losh <[email protected]>
CommitDate: 2022-12-02 18:08:11 +0000

    kboot: Create routines to read Linux tiny files
    
    Most of the files in /sys/ and /proc/ are small with one value. Create
    two routines to help us read the file and decode that value.
    
    Sponsored by:           Netflix
---
 stand/kboot/Makefile |  3 ++-
 stand/kboot/kboot.h  |  4 ++++
 stand/kboot/util.c   | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 52 insertions(+), 1 deletion(-)

diff --git a/stand/kboot/Makefile b/stand/kboot/Makefile
index c8bd313d1d1d..42385c9caf76 100644
--- a/stand/kboot/Makefile
+++ b/stand/kboot/Makefile
@@ -30,7 +30,8 @@ SRCS= \
                kbootfdt.c \
                main.c \
                termios.c \
-               vers.c \
+               util.c \
+               vers.c
 
 CFLAGS.gfx_fb_stub.c += -I${SRCTOP}/contrib/pnglite -I${SRCTOP}/sys/teken
 
diff --git a/stand/kboot/kboot.h b/stand/kboot/kboot.h
index 5441c90eaecc..e3d169ee5ac0 100644
--- a/stand/kboot/kboot.h
+++ b/stand/kboot/kboot.h
@@ -19,4 +19,8 @@ void fdt_arch_fixups(void *fdtp);
 uint64_t kboot_get_phys_load_segment(void);
 uint8_t kboot_get_kernel_machine_bits(void);
 
+/* util.c */
+bool file2str(const char *fn, char *buffer, size_t buflen);
+bool file2u64(const char *fn, uint64_t *val);
+
 #endif /* KBOOT_H */
diff --git a/stand/kboot/util.c b/stand/kboot/util.c
new file mode 100644
index 000000000000..938aad599e19
--- /dev/null
+++ b/stand/kboot/util.c
@@ -0,0 +1,46 @@
+/*-
+ * Copyright 2022 Netflix, Inc
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include "stand.h"
+#include "host_syscall.h"
+#include "kboot.h"
+
+bool
+file2str(const char *fn, char *buffer, size_t buflen)
+{
+       int fd;
+       ssize_t len;
+
+       fd = host_open(fn, HOST_O_RDONLY, 0);
+       if (fd == -1)
+               return false;
+       len = host_read(fd, buffer, buflen - 1);
+       if (len < 0) {
+               host_close(fd);
+               return false;
+       }
+       buffer[len] = '\0';
+       /*
+        * Trim trailing white space
+        */
+       while (isspace(buffer[len - 1]))
+               buffer[--len] = '\0';
+       host_close(fd);
+       return true;
+}
+
+bool
+file2u64(const char *fn, uint64_t *val)
+{
+       unsigned long v;
+       char buffer[80];
+
+       if (!file2str(fn, buffer, sizeof(buffer)))
+               return false;
+       v = strtoull(buffer, NULL, 0);  /* XXX check return values? */
+       *val = v;
+       return true;
+}

Reply via email to