1 /* 2 * Copyright (C) 2006-2010 B.A.T.M.A.N. contributors: 3 * 4 * Simon Wunderlich, Marek Lindner 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of version 2 of the GNU General Public 8 * License as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18 * 02110-1301, USA 19 * 20 */ 21 22 #include "main.h" 23 #include "hash.h" 24 25 /* clears the hash */ 26 static void hash_init(struct hashtable_t *hash) 27 { 28 int i; 29 30 for (i = 0 ; i < hash->size; i++) 31 INIT_HLIST_HEAD(&hash->table[i]); 32 } 33 34 /* free only the hashtable and the hash itself. */ 35 void hash_destroy(struct hashtable_t *hash) 36 { 37 kfree(hash->table); 38 kfree(hash); 39 } 40 41 /* allocates and clears the hash */ 42 struct hashtable_t *hash_new(int size) 43 { 44 struct hashtable_t *hash; 45 46 hash = kmalloc(sizeof(struct hashtable_t) , GFP_ATOMIC); 47 48 if (!hash) 49 return NULL; 50 51 hash->size = size; 52 hash->table = kmalloc(sizeof(struct element_t *) * size, GFP_ATOMIC); 53 54 if (!hash->table) { 55 kfree(hash); 56 return NULL; 57 } 58 59 hash_init(hash); 60 61 return hash; 62 } 63