void __ni_ifsysctl_vars_map(ni_var_array_t *vars, const char *key, const char *val) { ni_stringbuf_t buf = NI_STRINGBUF_INIT_DYNAMIC; const char *ptr; /* Normalize the net.ipv4.ip_forward alias */ if (!strcmp(key, "net.ipv4.ip_forward")) key = "net.ipv4.conf.all.forwarding"; /* * Filter out net.ipv4.conf.* and net.ipv6.conf.* only. */ if (strncmp(key, "net.ipv4.conf.", sizeof("net.ipv4.conf.")-1) && strncmp(key, "net.ipv6.conf.", sizeof("net.ipv6.conf.")-1)) return; /* * Resolve $INTERFACE and $SYSCTL_IF wildcard crap */ if ((ptr = strstr(key, "$INTERFACE"))) { ni_stringbuf_puts(&buf, key); ni_stringbuf_truncate(&buf, ptr - key); ni_stringbuf_puts(&buf, "default"); ptr += sizeof("$INTERFACE")-1; ni_stringbuf_puts(&buf, ptr); key = buf.string; } else if ((ptr = strstr(key, "$SYSCTL_IF"))) { ni_stringbuf_puts(&buf, key); ni_stringbuf_truncate(&buf, ptr - key); ni_stringbuf_puts(&buf, "default"); ptr += sizeof("$SYSCTL_IF")-1; ni_stringbuf_puts(&buf, ptr); key = buf.string; } /* * And finally add it to the array */ ni_var_array_set(vars, key, val); ni_stringbuf_destroy(&buf); }
void ni_stringbuf_trim_head(ni_stringbuf_t *sb, const char *reject) { size_t trim; ni_stringbuf_truncate(sb, sb->len); trim = strspn(sb->string, reject); if (trim) { sb->len -= trim; memmove(sb->string, sb->string + trim, sb->len + 1); } }