]> source.dussan.org Git - rspamd.git/commitdiff
Parse big limits on 32 bits machine (for file sizes).
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 28 Mar 2012 10:53:58 +0000 (14:53 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 28 Mar 2012 10:53:58 +0000 (14:53 +0400)
src/cfg_file.h
src/cfg_utils.c
src/cfg_xml.c
src/cfg_xml.h

index f0753929580969ab1d55a8d2628efaa8a6c8988c..203558e9a276a45145e5ce15901dc2e267e50943 100644 (file)
@@ -395,7 +395,7 @@ gchar* get_module_opt (struct config_file *cfg, gchar *module_name, gchar *opt_n
  * @param limit string representation of limit (eg. 1M)
  * @return numeric value of limit
  */
-gsize parse_limit (const gchar *limit, guint len);
+guint64 parse_limit (const gchar *limit, guint len);
 
 /**
  * Parse time
index c872583f2654996dbd816f40aa468a83f6aafc28..28430df141843cc492b2ebc38b8a12476535c590 100644 (file)
@@ -300,10 +300,10 @@ get_module_opt (struct config_file *cfg, gchar *module_name, gchar *opt_name)
        return NULL;
 }
 
-gsize
+guint64
 parse_limit (const gchar *limit, guint len)
 {
-       gsize                          result = 0;
+       guint64                        result = 0;
        const gchar                   *err_str;
 
        if (!limit || *limit == '\0' || len == 0) {
@@ -311,7 +311,7 @@ parse_limit (const gchar *limit, guint len)
        }
 
        errno = 0;
-       result = strtoul (limit, (gchar **)&err_str, 10);
+       result = strtoull (limit, (gchar **)&err_str, 10);
 
        if (*err_str != '\0') {
                /* Megabytes */
index 8ecd7a986a317b53419cfc087942c57bf067c59a..ea0685ca492f133b20bebc0eb694669daee2250f 100644 (file)
@@ -1507,11 +1507,23 @@ xml_handle_size (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHash
        gsize                      *dest;
 
        dest = (gsize *)G_STRUCT_MEMBER_P (dest_struct, offset);
-       *dest = parse_limit (data, -1);
+       *dest = (gsize)parse_limit (data, -1);
        
        return TRUE;
 }
 
+/* Guint64 variant */
+gboolean
+xml_handle_size_64 (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, gint offset)
+{
+       guint64                    *dest;
+
+       dest = (guint64 *)G_STRUCT_MEMBER_P (dest_struct, offset);
+       *dest = parse_limit (data, -1);
+
+       return TRUE;
+}
+
 gboolean 
 xml_handle_seconds (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, gint offset)
 {
index f1a1742d3fb6311c62d1a5b21c2fda60ce611f93..4e7f1481aaf7adc08f54b10ab44c2f1600fa7380 100644 (file)
@@ -97,6 +97,7 @@ gboolean xml_handle_string_list (struct config_file *cfg, struct rspamd_xml_user
 
 /* Numeric params */
 gboolean xml_handle_size (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, gint offset);
+gboolean xml_handle_size_64 (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, gint offset);
 gboolean xml_handle_double (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, gint offset);
 gboolean xml_handle_seconds (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, gint offset);
 gboolean xml_handle_int (struct config_file *cfg, struct rspamd_xml_userdata *ctx, GHashTable *attrs, gchar *data, gpointer user_data, gpointer dest_struct, gint offset);