]> source.dussan.org Git - rspamd.git/commitdiff
Use flags instead of size for integers.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 31 Aug 2013 13:31:36 +0000 (14:31 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 31 Aug 2013 13:31:36 +0000 (14:31 +0100)
src/cfg_rcl.c
src/cfg_rcl.h

index 4b11bea4e1c0317d0a765926973ff19ccf6ca4c4..562b734f5a1879d7bfcccb3c1f870c310ac8e083 100644 (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;
index f90bfc3994b53014d32e0e1ccd238938524e2e19..afe27d4800bd6a7e05c97fb1a4d4016ed1099c67 100644 (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;
 };