]> git.ipfire.org Git - thirdparty/sarg.git/blobdiff - btree_cache.c
Add support to decompress xz files
[thirdparty/sarg.git] / btree_cache.c
index 719c3810141e1fa4c73faaef67c33e9afa7b0ddc..5f5caeb8ddeb5a8ee5047ae290e964962f76c82a 100644 (file)
@@ -1,10 +1,11 @@
 /*
- * AUTHOR: Pedro Lineu Orso                         pedro.orso@gmail.com
- *                                                            1998, 2009
  * SARG Squid Analysis Report Generator      http://sarg.sourceforge.net
+ *                                                            1998, 2015
  *
  * SARG donations:
  *      please look at http://sarg.sourceforge.net/donations.php
+ * Support:
+ *     http://sourceforge.net/projects/sarg/forums/forum/363374
  * ---------------------------------------------------------------------
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -32,9 +33,9 @@
 #define AVL_DOUBLE_LEFT_ROTATION  4
 
 struct bt {
-           char value[64], targetattr[256];
-           struct bt *left, *right;
-           int balanceinfo;
+       char value[64], targetattr[256];
+       struct bt *left, *right;
+       int balanceinfo;
 };
 
 struct bt *root_bt = NULL;
@@ -42,12 +43,12 @@ int sizeof_bt;
 
 FILE *dbgfp = NULL;
 
-void set_balance_info(struct bt *node);
-struct bt *get_disbalanced_node(struct bt *node);
-void balance_node(struct bt *node);
+static void set_balance_info(struct bt *node);
+static struct bt *get_disbalanced_node(struct bt *node);
+static void balance_node(struct bt *node);
 
 
-struct bt *insert_node(struct bt *root, const char *item, const char *value)
+static struct bt *insert_node(struct bt *root, const char *item, const char *value)
 {
        struct bt *new_item_bt = NULL;
        if (!root)
@@ -55,8 +56,8 @@ struct bt *insert_node(struct bt *root, const char *item, const char *value)
                new_item_bt = malloc(sizeof_bt);
                new_item_bt->left = NULL;
                new_item_bt->right = NULL;
-               strncpy(new_item_bt->value, item, 64);
-               strncpy(new_item_bt->targetattr, value, 256);
+               safe_strcpy(new_item_bt->value, item, sizeof(new_item_bt->value));
+               safe_strcpy(new_item_bt->targetattr, value, sizeof(new_item_bt->targetattr));
                new_item_bt->balanceinfo = 0;
                return new_item_bt;
        }
@@ -86,7 +87,7 @@ struct bt *insert_node(struct bt *root, const char *item, const char *value)
 
 
 
-void balance_tree(struct bt *node)
+static void balance_tree(struct bt *node)
 {
        struct bt *disbalanced_node = NULL;
        do
@@ -102,7 +103,7 @@ void balance_tree(struct bt *node)
 
 
 
-void delete_tree(struct bt *root)
+static void delete_tree(struct bt *root)
 {
        if (root)
        {
@@ -113,7 +114,7 @@ void delete_tree(struct bt *root)
        }
 }
 
-struct bt *search_item(struct bt *root, const char *item)
+static struct bt *search_item(struct bt *root, const char *item)
 {
        int result;
        while (root && (result = strncmp(root->value, item, 64)))
@@ -126,7 +127,7 @@ struct bt *search_item(struct bt *root, const char *item)
        return root;
 }
 
-int get_length(struct bt *node, int d)
+static int get_length(struct bt *node, int d)
 {
        int l_depth = d, r_depth = d;
        if (node->left)
@@ -136,7 +137,7 @@ int get_length(struct bt *node, int d)
        return( ( l_depth > r_depth ) ? l_depth : r_depth );
 }
 
-struct bt *get_parent(struct bt *node)
+static struct bt *get_parent(struct bt *node)
 {
        if (node == root_bt)
                return NULL;
@@ -164,7 +165,7 @@ struct bt *get_parent(struct bt *node)
        }
 }
 
-void set_balance_info(struct bt *node)
+static void set_balance_info(struct bt *node)
 {
        int l_depth = 0, r_depth = 0;
        if (node->left)
@@ -180,7 +181,7 @@ void set_balance_info(struct bt *node)
        node->balanceinfo = r_depth - l_depth;
 }
 
-void rotate_right(struct bt *node)
+static void rotate_right(struct bt *node)
 {
        struct bt *left, *right, *tmp, *parent = get_parent(node);
        left = node->left;
@@ -202,7 +203,7 @@ void rotate_right(struct bt *node)
        }
 }
 
-void rotate_left(struct bt *node)
+static void rotate_left(struct bt *node)
 {
        struct bt *left, *right, *tmp, *parent = get_parent(node);
        left = node->right->left;
@@ -222,10 +223,9 @@ void rotate_left(struct bt *node)
                        if (parent->right == tmp)
                                parent->right = node;
        }
-
 }
 
-int get_disbalance_type(struct bt *node)
+static int get_disbalance_type(struct bt *node)
 {
        if (node->balanceinfo < 0)
                if (node->left->balanceinfo > 0)
@@ -239,7 +239,7 @@ int get_disbalance_type(struct bt *node)
                        return AVL_SINGLE_LEFT_ROTATION;
 }
 
-void balance_node(struct bt *node)
+static void balance_node(struct bt *node)
 {
        switch (get_disbalance_type(node))
        {
@@ -257,14 +257,15 @@ void balance_node(struct bt *node)
                        rotate_left(node);
                        rotate_left(node);
                        break;
-               default:
-                       exit(1);
+               default://compiler pacifier: should never happen!
+                       debuga(__FILE__,__LINE__,_("Failed to balance the b-tree cache"));
+                       exit(EXIT_FAILURE);
                        break;
 
        }
 }
 
-struct bt *get_disbalanced_node(struct bt *node)
+static struct bt *get_disbalanced_node(struct bt *node)
 {
        struct bt *rdn;
        if (fabs(node->balanceinfo) > 1)
@@ -294,9 +295,7 @@ void init_cache(void)
 
 int insert_to_cache(const char *key, const char *value)
 {
-
        struct bt *root = NULL;
-
        char  strict_chars[] = " ~!@^&(){}|<>?:;\"\'\\[]`,\r\n\0", *strict_chars_ptr;
 
        strict_chars_ptr = strict_chars;
@@ -316,7 +315,6 @@ int insert_to_cache(const char *key, const char *value)
        }
        else
                return 1;
-
 }
 
 char *search_in_cache(const char *key)