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);