Coverage Report

Created: 2024-02-25 06:34

/src/kamailio/src/core/str_hash.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (C) 2006 iptelorg GmbH
3
 *
4
 * Permission to use, copy, modify, and distribute this software for any
5
 * purpose with or without fee is hereby granted, provided that the above
6
 * copyright notice and this permission notice appear in all copies.
7
 *
8
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
 */
16
17
#ifndef _str_hashs_h
18
#define _str_hashs_h
19
20
#include "str.h"
21
#include "hashes.h"
22
#include "mem/mem.h"
23
#include "clist.h"
24
#include <string.h>
25
26
27
/* generic, simple str keyed hash */
28
29
struct str_hash_entry
30
{
31
  struct str_hash_entry *next;
32
  struct str_hash_entry *prev;
33
  str key;
34
  unsigned int flags;
35
  union
36
  {
37
    void *p;
38
    char *s;
39
    int n;
40
    char data[sizeof(void *)];
41
  } u;
42
};
43
44
45
struct str_hash_head
46
{
47
  struct str_hash_entry *next;
48
  struct str_hash_entry *prev;
49
};
50
51
52
struct str_hash_table
53
{
54
  struct str_hash_head *table;
55
  int size;
56
};
57
58
59
/* returns 0 on success, <0 on failure */
60
inline static int str_hash_alloc(struct str_hash_table *ht, int size)
61
0
{
62
0
  ht->table = (struct str_hash_head *)pkg_mallocxz(
63
0
      sizeof(struct str_hash_head) * size);
64
0
  if(ht->table == 0) {
65
0
    PKG_MEM_ERROR;
66
0
    return -1;
67
0
  }
68
0
  ht->size = size;
69
0
  return 0;
70
0
}
Unexecuted instantiation: main.c:str_hash_alloc
Unexecuted instantiation: modparam.c:str_hash_alloc
Unexecuted instantiation: pt.c:str_hash_alloc
Unexecuted instantiation: pvapi.c:str_hash_alloc
Unexecuted instantiation: receive.c:str_hash_alloc
Unexecuted instantiation: route.c:str_hash_alloc
Unexecuted instantiation: rpc_lookup.c:str_hash_alloc
Unexecuted instantiation: rvalue.c:str_hash_alloc
Unexecuted instantiation: select_core.c:str_hash_alloc
Unexecuted instantiation: sr_module.c:str_hash_alloc
Unexecuted instantiation: switch.c:str_hash_alloc
Unexecuted instantiation: tcp_main.c:str_hash_alloc
Unexecuted instantiation: tcp_read.c:str_hash_alloc
Unexecuted instantiation: timer_proc.c:str_hash_alloc
Unexecuted instantiation: usr_avp.c:str_hash_alloc
Unexecuted instantiation: action.c:str_hash_alloc
Unexecuted instantiation: async_task.c:str_hash_alloc
Unexecuted instantiation: cfg.tab.c:str_hash_alloc
Unexecuted instantiation: core_cmd.c:str_hash_alloc
Unexecuted instantiation: counters.c:str_hash_alloc
Unexecuted instantiation: events.c:str_hash_alloc
Unexecuted instantiation: flags.c:str_hash_alloc
Unexecuted instantiation: forward.c:str_hash_alloc
Unexecuted instantiation: kemi.c:str_hash_alloc
Unexecuted instantiation: lvalue.c:str_hash_alloc
Unexecuted instantiation: mod_fix.c:str_hash_alloc
Unexecuted instantiation: msg_translator.c:str_hash_alloc
Unexecuted instantiation: onsend.c:str_hash_alloc
71
72
73
inline static void str_hash_init(struct str_hash_table *ht)
74
0
{
75
0
  int r;
76
77
0
  for(r = 0; r < ht->size; r++)
78
0
    clist_init(&(ht->table[r]), next, prev);
79
0
}
Unexecuted instantiation: main.c:str_hash_init
Unexecuted instantiation: modparam.c:str_hash_init
Unexecuted instantiation: pt.c:str_hash_init
Unexecuted instantiation: pvapi.c:str_hash_init
Unexecuted instantiation: receive.c:str_hash_init
Unexecuted instantiation: route.c:str_hash_init
Unexecuted instantiation: rpc_lookup.c:str_hash_init
Unexecuted instantiation: rvalue.c:str_hash_init
Unexecuted instantiation: select_core.c:str_hash_init
Unexecuted instantiation: sr_module.c:str_hash_init
Unexecuted instantiation: switch.c:str_hash_init
Unexecuted instantiation: tcp_main.c:str_hash_init
Unexecuted instantiation: tcp_read.c:str_hash_init
Unexecuted instantiation: timer_proc.c:str_hash_init
Unexecuted instantiation: usr_avp.c:str_hash_init
Unexecuted instantiation: action.c:str_hash_init
Unexecuted instantiation: async_task.c:str_hash_init
Unexecuted instantiation: cfg.tab.c:str_hash_init
Unexecuted instantiation: core_cmd.c:str_hash_init
Unexecuted instantiation: counters.c:str_hash_init
Unexecuted instantiation: events.c:str_hash_init
Unexecuted instantiation: flags.c:str_hash_init
Unexecuted instantiation: forward.c:str_hash_init
Unexecuted instantiation: kemi.c:str_hash_init
Unexecuted instantiation: lvalue.c:str_hash_init
Unexecuted instantiation: mod_fix.c:str_hash_init
Unexecuted instantiation: msg_translator.c:str_hash_init
Unexecuted instantiation: onsend.c:str_hash_init
80
81
82
inline static void str_hash_add(
83
    struct str_hash_table *ht, struct str_hash_entry *e)
84
0
{
85
0
  int h;
86
87
0
  h = get_hash1_raw(e->key.s, e->key.len) % ht->size;
88
0
  clist_insert(&ht->table[h], e, next, prev);
89
0
}
Unexecuted instantiation: main.c:str_hash_add
Unexecuted instantiation: modparam.c:str_hash_add
Unexecuted instantiation: pt.c:str_hash_add
Unexecuted instantiation: pvapi.c:str_hash_add
Unexecuted instantiation: receive.c:str_hash_add
Unexecuted instantiation: route.c:str_hash_add
Unexecuted instantiation: rpc_lookup.c:str_hash_add
Unexecuted instantiation: rvalue.c:str_hash_add
Unexecuted instantiation: select_core.c:str_hash_add
Unexecuted instantiation: sr_module.c:str_hash_add
Unexecuted instantiation: switch.c:str_hash_add
Unexecuted instantiation: tcp_main.c:str_hash_add
Unexecuted instantiation: tcp_read.c:str_hash_add
Unexecuted instantiation: timer_proc.c:str_hash_add
Unexecuted instantiation: usr_avp.c:str_hash_add
Unexecuted instantiation: action.c:str_hash_add
Unexecuted instantiation: async_task.c:str_hash_add
Unexecuted instantiation: cfg.tab.c:str_hash_add
Unexecuted instantiation: core_cmd.c:str_hash_add
Unexecuted instantiation: counters.c:str_hash_add
Unexecuted instantiation: events.c:str_hash_add
Unexecuted instantiation: flags.c:str_hash_add
Unexecuted instantiation: forward.c:str_hash_add
Unexecuted instantiation: kemi.c:str_hash_add
Unexecuted instantiation: lvalue.c:str_hash_add
Unexecuted instantiation: mod_fix.c:str_hash_add
Unexecuted instantiation: msg_translator.c:str_hash_add
Unexecuted instantiation: onsend.c:str_hash_add
90
91
92
inline static struct str_hash_entry *str_hash_get(
93
    struct str_hash_table *ht, const char *key, int len)
94
0
{
95
0
  int h;
96
0
  struct str_hash_entry *e;
97
98
0
  h = get_hash1_raw(key, len) % ht->size;
99
0
  clist_foreach(&ht->table[h], e, next)
100
0
  {
101
0
    if((e->key.len == len) && (memcmp(e->key.s, key, len) == 0))
102
0
      return e;
103
0
  }
104
0
  return 0;
105
0
}
Unexecuted instantiation: main.c:str_hash_get
Unexecuted instantiation: modparam.c:str_hash_get
Unexecuted instantiation: pt.c:str_hash_get
Unexecuted instantiation: pvapi.c:str_hash_get
Unexecuted instantiation: receive.c:str_hash_get
Unexecuted instantiation: route.c:str_hash_get
Unexecuted instantiation: rpc_lookup.c:str_hash_get
Unexecuted instantiation: rvalue.c:str_hash_get
Unexecuted instantiation: select_core.c:str_hash_get
Unexecuted instantiation: sr_module.c:str_hash_get
Unexecuted instantiation: switch.c:str_hash_get
Unexecuted instantiation: tcp_main.c:str_hash_get
Unexecuted instantiation: tcp_read.c:str_hash_get
Unexecuted instantiation: timer_proc.c:str_hash_get
Unexecuted instantiation: usr_avp.c:str_hash_get
Unexecuted instantiation: action.c:str_hash_get
Unexecuted instantiation: async_task.c:str_hash_get
Unexecuted instantiation: cfg.tab.c:str_hash_get
Unexecuted instantiation: core_cmd.c:str_hash_get
Unexecuted instantiation: counters.c:str_hash_get
Unexecuted instantiation: events.c:str_hash_get
Unexecuted instantiation: flags.c:str_hash_get
Unexecuted instantiation: forward.c:str_hash_get
Unexecuted instantiation: kemi.c:str_hash_get
Unexecuted instantiation: lvalue.c:str_hash_get
Unexecuted instantiation: mod_fix.c:str_hash_get
Unexecuted instantiation: msg_translator.c:str_hash_get
Unexecuted instantiation: onsend.c:str_hash_get
106
107
inline static void str_hash_case_add(
108
    struct str_hash_table *ht, struct str_hash_entry *e)
109
0
{
110
0
  int h;
111
0
112
0
  h = get_hash1_case_raw(e->key.s, e->key.len) % ht->size;
113
0
  clist_insert(&ht->table[h], e, next, prev);
114
0
}
Unexecuted instantiation: main.c:str_hash_case_add
Unexecuted instantiation: modparam.c:str_hash_case_add
Unexecuted instantiation: pt.c:str_hash_case_add
Unexecuted instantiation: pvapi.c:str_hash_case_add
Unexecuted instantiation: receive.c:str_hash_case_add
Unexecuted instantiation: route.c:str_hash_case_add
Unexecuted instantiation: rpc_lookup.c:str_hash_case_add
Unexecuted instantiation: rvalue.c:str_hash_case_add
Unexecuted instantiation: select_core.c:str_hash_case_add
Unexecuted instantiation: sr_module.c:str_hash_case_add
Unexecuted instantiation: switch.c:str_hash_case_add
Unexecuted instantiation: tcp_main.c:str_hash_case_add
Unexecuted instantiation: tcp_read.c:str_hash_case_add
Unexecuted instantiation: timer_proc.c:str_hash_case_add
Unexecuted instantiation: usr_avp.c:str_hash_case_add
Unexecuted instantiation: action.c:str_hash_case_add
Unexecuted instantiation: async_task.c:str_hash_case_add
Unexecuted instantiation: cfg.tab.c:str_hash_case_add
Unexecuted instantiation: core_cmd.c:str_hash_case_add
Unexecuted instantiation: counters.c:str_hash_case_add
Unexecuted instantiation: events.c:str_hash_case_add
Unexecuted instantiation: flags.c:str_hash_case_add
Unexecuted instantiation: forward.c:str_hash_case_add
Unexecuted instantiation: kemi.c:str_hash_case_add
Unexecuted instantiation: lvalue.c:str_hash_case_add
Unexecuted instantiation: mod_fix.c:str_hash_case_add
Unexecuted instantiation: msg_translator.c:str_hash_case_add
Unexecuted instantiation: onsend.c:str_hash_case_add
115
116
117
inline static struct str_hash_entry *str_hash_case_get(
118
    struct str_hash_table *ht, const char *key, int len)
119
0
{
120
0
  int h;
121
0
  struct str_hash_entry *e;
122
0
123
0
  h = get_hash1_case_raw(key, len) % ht->size;
124
0
  clist_foreach(&ht->table[h], e, next)
125
0
  {
126
0
    if((e->key.len == len) && (strncasecmp(e->key.s, key, len) == 0))
127
0
      return e;
128
0
  }
129
0
  return 0;
130
0
}
Unexecuted instantiation: main.c:str_hash_case_get
Unexecuted instantiation: modparam.c:str_hash_case_get
Unexecuted instantiation: pt.c:str_hash_case_get
Unexecuted instantiation: pvapi.c:str_hash_case_get
Unexecuted instantiation: receive.c:str_hash_case_get
Unexecuted instantiation: route.c:str_hash_case_get
Unexecuted instantiation: rpc_lookup.c:str_hash_case_get
Unexecuted instantiation: rvalue.c:str_hash_case_get
Unexecuted instantiation: select_core.c:str_hash_case_get
Unexecuted instantiation: sr_module.c:str_hash_case_get
Unexecuted instantiation: switch.c:str_hash_case_get
Unexecuted instantiation: tcp_main.c:str_hash_case_get
Unexecuted instantiation: tcp_read.c:str_hash_case_get
Unexecuted instantiation: timer_proc.c:str_hash_case_get
Unexecuted instantiation: usr_avp.c:str_hash_case_get
Unexecuted instantiation: action.c:str_hash_case_get
Unexecuted instantiation: async_task.c:str_hash_case_get
Unexecuted instantiation: cfg.tab.c:str_hash_case_get
Unexecuted instantiation: core_cmd.c:str_hash_case_get
Unexecuted instantiation: counters.c:str_hash_case_get
Unexecuted instantiation: events.c:str_hash_case_get
Unexecuted instantiation: flags.c:str_hash_case_get
Unexecuted instantiation: forward.c:str_hash_case_get
Unexecuted instantiation: kemi.c:str_hash_case_get
Unexecuted instantiation: lvalue.c:str_hash_case_get
Unexecuted instantiation: mod_fix.c:str_hash_case_get
Unexecuted instantiation: msg_translator.c:str_hash_case_get
Unexecuted instantiation: onsend.c:str_hash_case_get
131
132
#define str_hash_del(e) clist_rm(e, next, prev)
133
134
#endif