-
Notifications
You must be signed in to change notification settings - Fork 0
/
_delete_entry.c
43 lines (41 loc) · 814 Bytes
/
_delete_entry.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "shell.h"
/**
* _delete_entry - function that removes
* entry from hashmap by given key index
*
* @map: map to delete entry from
* @key: string key of the entry
* Return: (0) success, (1) error
*/
int _delete_entry(map_t *map, const char *key)
{
list_t *list, *tmp;
int backet_index;
entry_t *entry;
backet_index = _get_hash_code(key);
list = map->backets[backet_index];
if (!list)
return (0);
entry = list->data;
if (_strcmp(entry->key, key))
{
map->backets[backet_index] = list->next;
_clear_entry(list->data);
free(list);
return (0);
}
while (list->next)
{
entry = list->next->data;
if (_strcmp(entry->key, key))
{
tmp = list->next;
list->next = list->next->next;
_clear_entry(tmp->data);
free(tmp);
break;
}
list = list->next;
}
return (0);
}