|
@@ -109,11 +109,16 @@ static bool sysvar_str_set(sysvar_t *to, sysvar_t from)
|
|
|
return sysvar_str_fromstr(to, from.v_str);
|
|
|
}
|
|
|
|
|
|
+static size_t sysvar_str_datasize(sysvar_t val)
|
|
|
+{
|
|
|
+ return (val.v_str ? strlen(val.v_str) : 0) + 1;
|
|
|
+}
|
|
|
+
|
|
|
const struct sysvar_ops sysvar_str_ops = {
|
|
|
.set = sysvar_str_set,
|
|
|
.tostr = sysvar_str_tostr,
|
|
|
.fromstr = sysvar_str_fromstr,
|
|
|
- .is_ptr = true
|
|
|
+ .datasize = sysvar_str_datasize
|
|
|
};
|
|
|
|
|
|
static void sysvar_tz_update(sysvar_t val, bool isset)
|
|
@@ -130,7 +135,7 @@ const struct sysvar_ops sysvar_tz_ops = {
|
|
|
.tostr = sysvar_str_tostr,
|
|
|
.fromstr = sysvar_str_fromstr,
|
|
|
.update = sysvar_tz_update,
|
|
|
- .is_ptr = true
|
|
|
+ .datasize = sysvar_str_datasize
|
|
|
};
|
|
|
|
|
|
static const char *sysvar_ip_tostr(sysvar_t from, char *buf)
|
|
@@ -224,12 +229,18 @@ static bool sysvar_mac_fromstr(sysvar_t *to, const char *str)
|
|
|
return sysvar_mac_set(to, from);
|
|
|
}
|
|
|
|
|
|
+static size_t sysvar_mac_datasize(sysvar_t val)
|
|
|
+{
|
|
|
+ (void)val;
|
|
|
+ return 6;
|
|
|
+}
|
|
|
+
|
|
|
const struct sysvar_ops sysvar_mac_ops = {
|
|
|
.set = sysvar_mac_set,
|
|
|
.tostr = sysvar_mac_tostr,
|
|
|
.fromstr = sysvar_mac_fromstr,
|
|
|
.buflen = MAC_BUFLEN,
|
|
|
- .is_ptr = true
|
|
|
+ .datasize = sysvar_mac_datasize
|
|
|
};
|
|
|
|
|
|
/* --- Generic getters/setters --- */
|
|
@@ -251,10 +262,10 @@ static bool do_setvar(size_t var, sysvar_t val, bool is_set)
|
|
|
sysvar_t *to = &sysvar_val[var];
|
|
|
void *free_ptr = NULL;
|
|
|
|
|
|
- if (type->is_ptr)
|
|
|
+ if (type->datasize)
|
|
|
free_ptr = to->v_ptr;
|
|
|
|
|
|
- if (!type->set || (type->is_ptr && !val.v_ptr)) {
|
|
|
+ if (!type->set || (type->datasize && !val.v_ptr)) {
|
|
|
sysvar_val[var] = val;
|
|
|
} else {
|
|
|
if (!type->set(to, val))
|
|
@@ -321,7 +332,7 @@ bool setvar_fromstr(size_t var, const char *str)
|
|
|
sysvar_t *to = &sysvar_val[var];
|
|
|
void *free_ptr = NULL;
|
|
|
|
|
|
- if (type->is_ptr)
|
|
|
+ if (type->datasize)
|
|
|
free_ptr = to->v_ptr;
|
|
|
|
|
|
/* A fromstr method is required */
|