mirror of https://github.com/bol-van/zapret/
4 changed files with 0 additions and 272 deletions
@ -1,107 +0,0 @@ |
|||
#define _GNU_SOURCE |
|||
#include "strpool.h" |
|||
#include <string.h> |
|||
#include <stdlib.h> |
|||
|
|||
#undef uthash_nonfatal_oom |
|||
#define uthash_nonfatal_oom(elt) ut_oom_recover(elt) |
|||
|
|||
static bool oom = false; |
|||
static void ut_oom_recover(strpool *elem) |
|||
{ |
|||
oom = true; |
|||
} |
|||
|
|||
// for zero terminated strings
|
|||
bool StrPoolAddStr(strpool **pp, const char *s) |
|||
{ |
|||
strpool *elem; |
|||
if (!(elem = (strpool*)malloc(sizeof(strpool)))) |
|||
return false; |
|||
if (!(elem->str = strdup(s))) |
|||
{ |
|||
free(elem); |
|||
return false; |
|||
} |
|||
oom = false; |
|||
HASH_ADD_KEYPTR(hh, *pp, elem->str, strlen(elem->str), elem); |
|||
if (oom) |
|||
{ |
|||
free(elem->str); |
|||
free(elem); |
|||
return false; |
|||
} |
|||
return true; |
|||
} |
|||
// for not zero terminated strings
|
|||
bool StrPoolAddStrLen(strpool **pp, const char *s, size_t slen) |
|||
{ |
|||
strpool *elem; |
|||
if (!(elem = (strpool*)malloc(sizeof(strpool)))) |
|||
return false; |
|||
if (!(elem->str = malloc(slen + 1))) |
|||
{ |
|||
free(elem); |
|||
return false; |
|||
} |
|||
memcpy(elem->str, s, slen); |
|||
elem->str[slen] = 0; |
|||
oom = false; |
|||
HASH_ADD_KEYPTR(hh, *pp, elem->str, strlen(elem->str), elem); |
|||
if (oom) |
|||
{ |
|||
free(elem->str); |
|||
free(elem); |
|||
return false; |
|||
} |
|||
return true; |
|||
} |
|||
|
|||
bool StrPoolCheckStr(strpool *p, const char *s) |
|||
{ |
|||
strpool *elem; |
|||
HASH_FIND_STR(p, s, elem); |
|||
return elem != NULL; |
|||
} |
|||
|
|||
void StrPoolDestroy(strpool **p) |
|||
{ |
|||
strpool *elem, *tmp; |
|||
HASH_ITER(hh, *p, elem, tmp) { |
|||
free(elem->str); |
|||
HASH_DEL(*p, elem); |
|||
free(elem); |
|||
} |
|||
*p = NULL; |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
bool strlist_add(struct str_list_head *head, const char *filename) |
|||
{ |
|||
struct str_list *entry = malloc(sizeof(struct str_list)); |
|||
if (!entry) return false; |
|||
entry->str = strdup(filename); |
|||
if (!entry->str) |
|||
{ |
|||
free(entry); |
|||
return false; |
|||
} |
|||
LIST_INSERT_HEAD(head, entry, next); |
|||
return true; |
|||
} |
|||
static void strlist_entry_destroy(struct str_list *entry) |
|||
{ |
|||
if (entry->str) free(entry->str); |
|||
free(entry); |
|||
} |
|||
void strlist_destroy(struct str_list_head *head) |
|||
{ |
|||
struct str_list *entry; |
|||
while ((entry = LIST_FIRST(head))) |
|||
{ |
|||
LIST_REMOVE(entry, next); |
|||
strlist_entry_destroy(entry); |
|||
} |
|||
} |
@ -1,29 +0,0 @@ |
|||
#pragma once |
|||
|
|||
#include <stdbool.h> |
|||
#include <ctype.h> |
|||
#include <sys/queue.h> |
|||
|
|||
//#define HASH_BLOOM 20
|
|||
#define HASH_NONFATAL_OOM 1 |
|||
#define HASH_FUNCTION HASH_BER |
|||
#include "uthash.h" |
|||
|
|||
typedef struct strpool { |
|||
char *str; /* key */ |
|||
UT_hash_handle hh; /* makes this structure hashable */ |
|||
} strpool; |
|||
|
|||
void StrPoolDestroy(strpool **p); |
|||
bool StrPoolAddStr(strpool **pp,const char *s); |
|||
bool StrPoolAddStrLen(strpool **pp,const char *s,size_t slen); |
|||
bool StrPoolCheckStr(strpool *p,const char *s); |
|||
|
|||
struct str_list { |
|||
char *str; |
|||
LIST_ENTRY(str_list) next; |
|||
}; |
|||
LIST_HEAD(str_list_head, str_list); |
|||
|
|||
bool strlist_add(struct str_list_head *head, const char *filename); |
|||
void strlist_destroy(struct str_list_head *head); |
@ -1,107 +0,0 @@ |
|||
#define _GNU_SOURCE |
|||
#include "strpool.h" |
|||
#include <string.h> |
|||
#include <stdlib.h> |
|||
|
|||
#undef uthash_nonfatal_oom |
|||
#define uthash_nonfatal_oom(elt) ut_oom_recover(elt) |
|||
|
|||
static bool oom = false; |
|||
static void ut_oom_recover(strpool *elem) |
|||
{ |
|||
oom = true; |
|||
} |
|||
|
|||
// for zero terminated strings
|
|||
bool StrPoolAddStr(strpool **pp, const char *s) |
|||
{ |
|||
strpool *elem; |
|||
if (!(elem = (strpool*)malloc(sizeof(strpool)))) |
|||
return false; |
|||
if (!(elem->str = strdup(s))) |
|||
{ |
|||
free(elem); |
|||
return false; |
|||
} |
|||
oom = false; |
|||
HASH_ADD_KEYPTR(hh, *pp, elem->str, strlen(elem->str), elem); |
|||
if (oom) |
|||
{ |
|||
free(elem->str); |
|||
free(elem); |
|||
return false; |
|||
} |
|||
return true; |
|||
} |
|||
// for not zero terminated strings
|
|||
bool StrPoolAddStrLen(strpool **pp, const char *s, size_t slen) |
|||
{ |
|||
strpool *elem; |
|||
if (!(elem = (strpool*)malloc(sizeof(strpool)))) |
|||
return false; |
|||
if (!(elem->str = malloc(slen + 1))) |
|||
{ |
|||
free(elem); |
|||
return false; |
|||
} |
|||
memcpy(elem->str, s, slen); |
|||
elem->str[slen] = 0; |
|||
oom = false; |
|||
HASH_ADD_KEYPTR(hh, *pp, elem->str, strlen(elem->str), elem); |
|||
if (oom) |
|||
{ |
|||
free(elem->str); |
|||
free(elem); |
|||
return false; |
|||
} |
|||
return true; |
|||
} |
|||
|
|||
bool StrPoolCheckStr(strpool *p, const char *s) |
|||
{ |
|||
strpool *elem; |
|||
HASH_FIND_STR(p, s, elem); |
|||
return elem != NULL; |
|||
} |
|||
|
|||
void StrPoolDestroy(strpool **p) |
|||
{ |
|||
strpool *elem, *tmp; |
|||
HASH_ITER(hh, *p, elem, tmp) { |
|||
free(elem->str); |
|||
HASH_DEL(*p, elem); |
|||
free(elem); |
|||
} |
|||
*p = NULL; |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
bool strlist_add(struct str_list_head *head, const char *filename) |
|||
{ |
|||
struct str_list *entry = malloc(sizeof(struct str_list)); |
|||
if (!entry) return false; |
|||
entry->str = strdup(filename); |
|||
if (!entry->str) |
|||
{ |
|||
free(entry); |
|||
return false; |
|||
} |
|||
LIST_INSERT_HEAD(head, entry, next); |
|||
return true; |
|||
} |
|||
static void strlist_entry_destroy(struct str_list *entry) |
|||
{ |
|||
if (entry->str) free(entry->str); |
|||
free(entry); |
|||
} |
|||
void strlist_destroy(struct str_list_head *head) |
|||
{ |
|||
struct str_list *entry; |
|||
while ((entry = LIST_FIRST(head))) |
|||
{ |
|||
LIST_REMOVE(entry, next); |
|||
strlist_entry_destroy(entry); |
|||
} |
|||
} |
@ -1,29 +0,0 @@ |
|||
#pragma once |
|||
|
|||
#include <stdbool.h> |
|||
#include <ctype.h> |
|||
#include <sys/queue.h> |
|||
|
|||
//#define HASH_BLOOM 20
|
|||
#define HASH_NONFATAL_OOM 1 |
|||
#define HASH_FUNCTION HASH_BER |
|||
#include "uthash.h" |
|||
|
|||
typedef struct strpool { |
|||
char *str; /* key */ |
|||
UT_hash_handle hh; /* makes this structure hashable */ |
|||
} strpool; |
|||
|
|||
void StrPoolDestroy(strpool **p); |
|||
bool StrPoolAddStr(strpool **pp,const char *s); |
|||
bool StrPoolAddStrLen(strpool **pp,const char *s,size_t slen); |
|||
bool StrPoolCheckStr(strpool *p,const char *s); |
|||
|
|||
struct str_list { |
|||
char *str; |
|||
LIST_ENTRY(str_list) next; |
|||
}; |
|||
LIST_HEAD(str_list_head, str_list); |
|||
|
|||
bool strlist_add(struct str_list_head *head, const char *filename); |
|||
void strlist_destroy(struct str_list_head *head); |
Loading…
Reference in new issue