ubase

suckless linux base utils
git clone git://git.2f30.org/ubase
Log | Files | Refs | README | LICENSE

commit 0897d999e63be4e2e6e5c385b72a02dd649086ee
parent 6ba9fe35f1716763cfa95ed8c27510822b4b96d0
Author: sin <sin@2f30.org>
Date:   Thu, 17 Apr 2014 16:38:31 +0100

Implement streplace()

Restore variable as early as possible and in error conditions

Diffstat:
Msysctl.c | 24++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/sysctl.c b/sysctl.c @@ -7,6 +7,16 @@ #include <unistd.h> #include "util.h" +static void +streplace(char *s, int a, int b) +{ + char *p; + + for (p = s; *p; p++) + if (*p == a) + *p = b; +} + static int getsysctl(char *variable, char **value) { @@ -17,13 +27,15 @@ getsysctl(char *variable, char **value) ssize_t n; size_t sz, i; - for (p = variable; *p; p++) - if (*p == '.') - *p = '/'; + streplace(variable, '.', '/'); strlcpy(path, "/proc/sys/", sizeof(path)); - if (strlcat(path, variable, sizeof(path)) >= sizeof(path)) + if (strlcat(path, variable, sizeof(path)) >= sizeof(path)) { + streplace(variable, '/', '.'); return -1; + } + + streplace(variable, '/', '.'); fd = open(path, O_RDONLY); if (fd < 0) @@ -59,10 +71,6 @@ getsysctl(char *variable, char **value) if (p) *p = '\0'; - for (p = variable; *p; p++) - if (*p == '/') - *p = '.'; - *value = buf; close(fd);