[PATCH] sysctl: Add setter / getter for char settings

Denis Kenzior <[email protected]> Fri, 14 Jun 2024 11:08:36 -0500
Newsgroups dev.linux.lists.ell
Message-ID <[email protected]>
---
 ell/ell.sym  |  2 ++
 ell/sysctl.c | 24 ++++++++++++++++++++++++
 ell/sysctl.h |  5 +++++
 3 files changed, 31 insertions(+)

diff --git a/ell/ell.sym b/ell/ell.sym
index 0587beb398bc..9fcc3aad9a2f 100644
--- a/ell/ell.sym
+++ b/ell/ell.sym
@@ -788,6 +788,8 @@ global:
 	/* sysctl */
 	l_sysctl_get_u32;
 	l_sysctl_set_u32;
+	l_sysctl_get_char;
+	l_sysctl_set_char;
 	/* notifylist */
 	l_notifylist_new;
 	l_notifylist_free;
diff --git a/ell/sysctl.c b/ell/sysctl.c
index 8b1b575e93a8..4ac569c34bad 100644
--- a/ell/sysctl.c
+++ b/ell/sysctl.c
@@ -95,3 +95,27 @@ LIB_EXPORT int l_sysctl_set_u32(uint32_t v, const char *format, ...)
 
 	return sysctl_write(filename, valuestr, len);
 }
+
+LIB_EXPORT int l_sysctl_get_char(char *out_c, const char *format, ...)
+{
+	_auto_(l_free) char *filename = NULL;
+	va_list ap;
+
+	va_start(ap, format);
+	filename = l_strdup_vprintf(format, ap);
+	va_end(ap);
+
+	return sysctl_read(filename, out_c, sizeof(char));
+}
+
+LIB_EXPORT int l_sysctl_set_char(char c, const char *format, ...)
+{
+	_auto_(l_free) char *filename = NULL;
+	va_list ap;
+
+	va_start(ap, format);
+	filename = l_strdup_vprintf(format, ap);
+	va_end(ap);
+
+	return sysctl_write(filename, &c, sizeof(char));
+}
diff --git a/ell/sysctl.h b/ell/sysctl.h
index b777eb5186f1..a1f9501493a5 100644
--- a/ell/sysctl.h
+++ b/ell/sysctl.h
@@ -20,6 +20,11 @@ int l_sysctl_get_u32(uint32_t *out_v, const char *format, ...)
 int l_sysctl_set_u32(uint32_t v, const char *format, ...)
 			__attribute__((format(printf, 2, 3)));
 
+int l_sysctl_get_char(char *out_c, const char *format, ...)
+			__attribute__((format(printf, 2, 3)));
+int l_sysctl_set_char(char c, const char *format, ...)
+			__attribute__((format(printf, 2, 3)));
+
 #ifdef __cplusplus
 }
 #endif
-- 
2.45.0