On 9 Mar 2023, at 13:06, Arne Schwabe wrote: > Am 09.03.23 um 10:26 schrieb Kristof Provost via Openvpn-devel: >> From: Kristof Provost <k...@freebsd.org> >> >> Implement dco_version_string() for FreeBSD. >> Unlike Linux and Windows the DCO driver is built into the operating >> system itself, so we log the OS version as a proxy for the DCO version. >> --- >> src/openvpn/dco_freebsd.c | 14 +++++++++++++- >> 1 file changed, 13 insertions(+), 1 deletion(-) >> >> diff --git a/src/openvpn/dco_freebsd.c b/src/openvpn/dco_freebsd.c >> index 2b94b2a2..a5e96bb2 100644 >> --- a/src/openvpn/dco_freebsd.c >> +++ b/src/openvpn/dco_freebsd.c >> @@ -31,6 +31,8 @@ >> #include <sys/param.h> >> #include <sys/linker.h> >> #include <sys/nv.h> >> +#include <sys/utsname.h> >> + >> #include <netinet/in.h> >> #include "dco_freebsd.h" >> @@ -627,7 +629,17 @@ out: >> const char * >> dco_version_string(struct gc_arena *gc) >> { >> - return "v0"; >> + struct utsname name; >> + struct buffer out = alloc_buf_gc(256, gc); >> + int ret; >> + >> + ret = uname(&name); >> + if (ret != 0) >> + return "N/A"; > > There should be { around the return
I’ll fix that. >> + >> + buf_printf(&out, "%s", name.version); >> + >> + return (char *)out.data; > > This should use BSTR(data) instead. > I copied Antonio’s code here, but that is better, so I’ll fix that too. > Instead of copying/printf, you could also just do: > > struct utsname* uts; > ALLOC_OBJ_GC(uts, struct utsname, gc); > > > if (uname(&name) != 0) > { > return "N/A"; > } > > return uts->name; > I was going to object that we can’t return stack variables, but that’s an allocation of utsname, and it removes an intermediate step, so yeah, that’s better too (and means I can just copy your code, call it my own and pretend I did work ;)) Thanks. Kristof _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel