Browse Source

Use flags instead of size for integers.

tags/0.6.0
Vsevolod Stakhov 10 years ago
parent
commit
89281e03ae
2 changed files with 13 additions and 15 deletions
  1. 9
    13
      src/cfg_rcl.c
  2. 4
    2
      src/cfg_rcl.h

+ 9
- 13
src/cfg_rcl.c View File

@@ -340,15 +340,7 @@ rspamd_rcl_parse_struct_integer (struct config_file *cfg, rspamd_cl_object_t *ob
} target;
gint64 val;

if (pd->size == sizeof (gint)) {
target.ip = (gint *)(((gchar *)pd->user_struct) + pd->offset);
if (!rspamd_cl_obj_toint_safe (obj, &val)) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "cannot convert param to integer");
return FALSE;
}
*target.ip = val;
}
else if (pd->size == sizeof (gint32)) {
if (pd->flags == RSPAMD_CL_FLAG_INT_32) {
target.i32p = (gint32 *)(((gchar *)pd->user_struct) + pd->offset);
if (!rspamd_cl_obj_toint_safe (obj, &val)) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "cannot convert param to integer");
@@ -356,7 +348,7 @@ rspamd_rcl_parse_struct_integer (struct config_file *cfg, rspamd_cl_object_t *ob
}
*target.i32p = val;
}
else if (pd->size == sizeof (gint16)) {
else if (pd->flags == RSPAMD_CL_FLAG_INT_16) {
target.i16p = (gint16 *)(((gchar *)pd->user_struct) + pd->offset);
if (!rspamd_cl_obj_toint_safe (obj, &val)) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "cannot convert param to integer");
@@ -364,7 +356,7 @@ rspamd_rcl_parse_struct_integer (struct config_file *cfg, rspamd_cl_object_t *ob
}
*target.i16p = val;
}
else if (pd->size == sizeof (gint64)) {
else if (pd->flags == RSPAMD_CL_FLAG_INT_64) {
target.i64p = (gint64 *)(((gchar *)pd->user_struct) + pd->offset);
if (!rspamd_cl_obj_toint_safe (obj, &val)) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "cannot convert param to integer");
@@ -373,8 +365,12 @@ rspamd_rcl_parse_struct_integer (struct config_file *cfg, rspamd_cl_object_t *ob
*target.i64p = val;
}
else {
g_set_error (err, CFG_RCL_ERROR, E2BIG, "unknown integer size");
return FALSE;
target.ip = (gint *)(((gchar *)pd->user_struct) + pd->offset);
if (!rspamd_cl_obj_toint_safe (obj, &val)) {
g_set_error (err, CFG_RCL_ERROR, EINVAL, "cannot convert param to integer");
return FALSE;
}
*target.ip = val;
}

return TRUE;

+ 4
- 2
src/cfg_rcl.h View File

@@ -40,12 +40,14 @@ struct rspamd_rcl_section;
struct rspamd_rcl_struct_parser {
gpointer user_struct;
goffset offset;
gsize size;
enum {
RSPAMD_CL_FLAG_TIME_FLOAT = 0x1 << 0,
RSPAMD_CL_FLAG_TIME_TIMEVAL = 0x1 << 1,
RSPAMD_CL_FLAG_TIME_TIMESPEC = 0x1 << 2,
RSPAMD_CL_FLAG_TIME_INTEGER = 0x1 << 3
RSPAMD_CL_FLAG_TIME_INTEGER = 0x1 << 3,
RSPAMD_CL_FLAG_INT_16 = 0x1 << 4,
RSPAMD_CL_FLAG_INT_32 = 0x1 << 5,
RSPAMD_CL_FLAG_INT_64 = 0x1 << 6
} flags;
};


Loading…
Cancel
Save