all: updated FSF address in GPL text
[sip-router] / modules / db_flatstore / km_flat_id.c
1 /* 
2  * $Id$
3  *
4  * Flatstore module connection identifier
5  *
6  * Copyright (C) 2004 FhG Fokus
7  *
8  * This file is part of Kamailio, a free SIP server.
9  *
10  * Kamailio is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version
14  *
15  * Kamailio is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License 
21  * along with this program; if not, write to the Free Software 
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
23  */
24
25 #include <string.h>
26 #include "../../dprint.h"
27 #include "../../mem/mem.h"
28 #include "km_flat_id.h"
29
30
31
32 /*
33  * Create a new connection identifier
34  */
35 struct flat_id* new_flat_id(char* dir, char* table)
36 {
37         struct flat_id* ptr;
38         char* t;
39         int t_len;
40
41         if (!dir || !table) {
42                 LM_ERR("invalid parameter(s)\n");
43                 return 0;
44         }
45
46         ptr = (struct flat_id*)pkg_malloc(sizeof(struct flat_id));
47         if (!ptr) {
48                 LM_ERR("no pkg memory left\n");
49                 return 0;
50         }
51         memset(ptr, 0, sizeof(struct flat_id));
52
53         /* alloc memory for the table name */
54         t_len = strlen(table);
55         t = (char*)pkg_malloc(t_len+1);
56         if (!t) {
57                 LM_ERR("no pkg memory left\n");
58                 pkg_free(ptr);
59                 return 0;
60         }
61         memset(t, 0, t_len);
62
63         ptr->dir.s = dir;
64         ptr->dir.len = strlen(dir);
65         memcpy(t, table, t_len);
66         t[t_len] = '\0';
67         ptr->table.s = t;
68         ptr->table.len = t_len;
69
70         return ptr;
71 }
72
73
74 /*
75  * Compare two connection identifiers
76  */
77 unsigned char cmp_flat_id(struct flat_id* id1, struct flat_id* id2)
78 {
79         if (!id1 || !id2) return 0;
80         if (id1->dir.len != id2->dir.len) return 0;
81         if (id1->table.len != id2->table.len) return 0;
82
83         if (memcmp(id1->dir.s, id2->dir.s, id1->dir.len)) return 0;
84         if (memcmp(id1->table.s, id2->table.s, id1->table.len)) return 0;
85         return 1;
86 }
87
88
89 /*
90  * Free a connection identifier
91  */
92 void free_flat_id(struct flat_id* id)
93 {
94         if (!id) return;
95         if (id->table.s)
96                 pkg_free(id->table.s);
97         pkg_free(id);
98 }