turns out OF_getprop is like memcpy, but sometimes you want something
like strlcpy. this is what OF_getpropstr aims to provide.

i know openfirm.h is used on other archs that don't use fdt as their
backend, but i figure we can port this wrapper over to them as need
demands.

ok?

Index: fdt.c
===================================================================
RCS file: /cvs/src/sys/dev/ofw/fdt.c,v
retrieving revision 1.33
diff -u -p -r1.33 fdt.c
--- fdt.c       19 Sep 2022 16:12:19 -0000      1.33
+++ fdt.c       8 Apr 2023 03:16:39 -0000
@@ -980,6 +980,18 @@ OF_getprop(int handle, char *prop, void 
 }
 
 int
+OF_getpropstr(int handle, char *prop, char *buf, int buflen)
+{
+       int len;
+
+       len = OF_getprop(handle, prop, buf, buflen);
+       if (buflen > 0)
+               buf[min(len, buflen - 1)] = '\0';
+
+       return (len);
+}
+
+int
 OF_getpropbool(int handle, char *prop)
 {
        void *node = (char *)tree.header + handle;
Index: openfirm.h
===================================================================
RCS file: /cvs/src/sys/dev/ofw/openfirm.h,v
retrieving revision 1.18
diff -u -p -r1.18 openfirm.h
--- openfirm.h  6 May 2021 19:45:16 -0000       1.18
+++ openfirm.h  8 Apr 2023 03:16:39 -0000
@@ -50,6 +50,7 @@ int OF_parent(int phandle);
 int OF_instance_to_package(int ihandle);
 int OF_getproplen(int handle, char *prop);
 int OF_getprop(int handle, char *prop, void *buf, int buflen);
+int OF_getpropstr(int handle, char *prop, char *buf, int buflen);
 int OF_getpropbool(int handle, char *);
 uint32_t OF_getpropint(int handle, char *, uint32_t);
 int OF_getpropintarray(int, char *, uint32_t *, int);

Reply via email to