mirror of
https://github.com/cathugger/mkp224o.git
synced 2025-04-21 22:39:09 +00:00
some tweaks
This commit is contained in:
parent
3368452fee
commit
bc76dc4331
1 changed files with 64 additions and 33 deletions
79
filters.h
79
filters.h
|
@ -1,5 +1,9 @@
|
||||||
// filters stuff
|
// filters stuff
|
||||||
|
|
||||||
|
#ifndef INTFILTER
|
||||||
|
# define BINFILTER
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef INTFILTER
|
#ifdef INTFILTER
|
||||||
# ifdef BINSEARCH
|
# ifdef BINSEARCH
|
||||||
# ifndef BESORT
|
# ifndef BESORT
|
||||||
|
@ -12,6 +16,16 @@
|
||||||
# define EXPANDMASK
|
# define EXPANDMASK
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// whether binfilter struct is needed
|
||||||
|
#ifdef BINFILTER
|
||||||
|
# define NEEDBINFILTER
|
||||||
|
#endif
|
||||||
|
#ifdef INTFILTER
|
||||||
|
# define NEEDBINFILTER
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef NEEDBINFILTER
|
||||||
# ifndef BINFILTERLEN
|
# ifndef BINFILTERLEN
|
||||||
# define BINFILTERLEN PUBLIC_LEN
|
# define BINFILTERLEN PUBLIC_LEN
|
||||||
# endif
|
# endif
|
||||||
|
@ -20,6 +34,12 @@ struct binfilter {
|
||||||
size_t len; // real len minus one
|
size_t len; // real len minus one
|
||||||
u8 mask;
|
u8 mask;
|
||||||
} ;
|
} ;
|
||||||
|
#endif // NEEDBINFILTER
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BINFILTER
|
||||||
|
VEC_STRUCT(bfiltervec,struct binfilter) filters;
|
||||||
|
#endif // BINFILTER
|
||||||
|
|
||||||
#ifdef INTFILTER
|
#ifdef INTFILTER
|
||||||
struct intfilter {
|
struct intfilter {
|
||||||
|
@ -32,8 +52,6 @@ VEC_STRUCT(ifiltervec,struct intfilter) filters;
|
||||||
# ifdef OMITMASK
|
# ifdef OMITMASK
|
||||||
IFT ifiltermask;
|
IFT ifiltermask;
|
||||||
# endif // BINSEARCH
|
# endif // BINSEARCH
|
||||||
#else // INTFILTER
|
|
||||||
VEC_STRUCT(bfiltervec,struct binfilter) filters;
|
|
||||||
#endif // INTFILTER
|
#endif // INTFILTER
|
||||||
|
|
||||||
static void filters_init()
|
static void filters_init()
|
||||||
|
@ -43,11 +61,6 @@ static void filters_init()
|
||||||
|
|
||||||
#ifdef INTFILTER
|
#ifdef INTFILTER
|
||||||
|
|
||||||
static void filter_sort(int (*compf)(const void *,const void *))
|
|
||||||
{
|
|
||||||
qsort(&VEC_BUF(filters,0),VEC_LENGTH(filters),sizeof(struct intfilter),compf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline size_t filter_len(size_t i)
|
static inline size_t filter_len(size_t i)
|
||||||
{
|
{
|
||||||
# ifndef OMITMASK
|
# ifndef OMITMASK
|
||||||
|
@ -74,7 +87,7 @@ static inline size_t filter_len(size_t i)
|
||||||
|
|
||||||
# ifdef OMITMASK
|
# ifdef OMITMASK
|
||||||
|
|
||||||
static int filter_compare(const void *p1,const void *p2)
|
static inline int filter_compare(const void *p1,const void *p2)
|
||||||
{
|
{
|
||||||
if (((const struct intfilter *)p1)->f < ((const struct intfilter *)p2)->f)
|
if (((const struct intfilter *)p1)->f < ((const struct intfilter *)p2)->f)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -222,13 +235,21 @@ static inline void ifilter_addflatten(struct intfilter *ifltr,IFT mask)
|
||||||
* memcmp is aplicable there too
|
* memcmp is aplicable there too
|
||||||
* due to struct intfilter layout, it all can be stuffed into one memcmp call
|
* due to struct intfilter layout, it all can be stuffed into one memcmp call
|
||||||
*/
|
*/
|
||||||
static int filter_compare(const void *p1,const void *p2)
|
static inline int filter_compare(const void *p1,const void *p2)
|
||||||
{
|
{
|
||||||
return memcmp(p1,p2,sizeof(struct intfilter));
|
return memcmp(p1,p2,sizeof(struct intfilter));
|
||||||
}
|
}
|
||||||
|
|
||||||
# endif // OMITMASK
|
# endif // OMITMASK
|
||||||
#else // INTFILTER
|
|
||||||
|
static void filter_sort(void)
|
||||||
|
{
|
||||||
|
qsort(&VEC_BUF(filters,0),VEC_LENGTH(filters),sizeof(struct intfilter),&filter_compare);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // INTFILTER
|
||||||
|
|
||||||
|
#ifdef BINFILTER
|
||||||
|
|
||||||
static inline size_t filter_len(size_t i)
|
static inline size_t filter_len(size_t i)
|
||||||
{
|
{
|
||||||
|
@ -244,12 +265,7 @@ static inline size_t filter_len(size_t i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void filter_sort(int (*compf)(const void *,const void *))
|
static inline int filter_compare(const void *p1,const void *p2)
|
||||||
{
|
|
||||||
qsort(&VEC_BUF(filters,0),VEC_LENGTH(filters),sizeof(struct binfilter),compf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int filter_compare(const void *p1,const void *p2)
|
|
||||||
{
|
{
|
||||||
const struct binfilter *b1 = (const struct binfilter *)p1;
|
const struct binfilter *b1 = (const struct binfilter *)p1;
|
||||||
const struct binfilter *b2 = (const struct binfilter *)p2;
|
const struct binfilter *b2 = (const struct binfilter *)p2;
|
||||||
|
@ -268,7 +284,12 @@ static int filter_compare(const void *p1,const void *p2)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // INTFILTER
|
static void filter_sort(void)
|
||||||
|
{
|
||||||
|
qsort(&VEC_BUF(filters,0),VEC_LENGTH(filters),sizeof(struct binfilter),&filter_compare);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // BINFILTER
|
||||||
|
|
||||||
static void filters_add(const char *filter)
|
static void filters_add(const char *filter)
|
||||||
{
|
{
|
||||||
|
@ -314,6 +335,7 @@ static void filters_add(const char *filter)
|
||||||
}
|
}
|
||||||
base32_from(bf.f,&bf.mask,filter);
|
base32_from(bf.f,&bf.mask,filter);
|
||||||
bf.len = ret - 1;
|
bf.len = ret - 1;
|
||||||
|
|
||||||
#ifdef INTFILTER
|
#ifdef INTFILTER
|
||||||
mc.i = 0;
|
mc.i = 0;
|
||||||
for (size_t i = 0;i < bf.len;++i)
|
for (size_t i = 0;i < bf.len;++i)
|
||||||
|
@ -332,9 +354,11 @@ static void filters_add(const char *filter)
|
||||||
# else // OMITMASK
|
# else // OMITMASK
|
||||||
VEC_ADD(filters,ifltr);
|
VEC_ADD(filters,ifltr);
|
||||||
# endif // OMITMASK
|
# endif // OMITMASK
|
||||||
#else // INTFILTER
|
|
||||||
VEC_ADD(filters,bf);
|
|
||||||
#endif // INTFILTER
|
#endif // INTFILTER
|
||||||
|
|
||||||
|
#ifdef BINFILTER
|
||||||
|
VEC_ADD(filters,bf);
|
||||||
|
#endif // BINFILTER
|
||||||
}
|
}
|
||||||
|
|
||||||
static void filters_dedup()
|
static void filters_dedup()
|
||||||
|
@ -346,7 +370,7 @@ static void filters_prepare()
|
||||||
{
|
{
|
||||||
if (!quietflag)
|
if (!quietflag)
|
||||||
fprintf(stderr,"sorting filters...");
|
fprintf(stderr,"sorting filters...");
|
||||||
filter_sort(&filter_compare);
|
filter_sort();
|
||||||
if (wantdedup) {
|
if (wantdedup) {
|
||||||
if (!quietflag)
|
if (!quietflag)
|
||||||
fprintf(stderr," removing duplicates...");
|
fprintf(stderr," removing duplicates...");
|
||||||
|
@ -426,7 +450,10 @@ do { \
|
||||||
|
|
||||||
# endif // BINSEARCH
|
# endif // BINSEARCH
|
||||||
|
|
||||||
#else // INTFILTER
|
#endif // INTFILTER
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BINFILTER
|
||||||
|
|
||||||
# ifndef BINSEARCH
|
# ifndef BINSEARCH
|
||||||
|
|
||||||
|
@ -482,7 +509,9 @@ do { \
|
||||||
|
|
||||||
# endif // BINSEARCH
|
# endif // BINSEARCH
|
||||||
|
|
||||||
#endif // INTFILTER
|
#endif // BINFILTER
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void loadfilterfile(const char *fname)
|
static void loadfilterfile(const char *fname)
|
||||||
{
|
{
|
||||||
|
@ -532,11 +561,13 @@ static void filters_print()
|
||||||
while (len < sizeof(IFT) && imraw[len] != 0x00) ++len;
|
while (len < sizeof(IFT) && imraw[len] != 0x00) ++len;
|
||||||
u8 mask = imraw[len-1];
|
u8 mask = imraw[len-1];
|
||||||
u8 *ifraw = (u8 *)&VEC_BUF(filters,i).f;
|
u8 *ifraw = (u8 *)&VEC_BUF(filters,i).f;
|
||||||
#else
|
#endif // INTFILTER
|
||||||
|
|
||||||
|
#ifdef BINFILTER
|
||||||
size_t len = VEC_BUF(filters,i).len + 1;
|
size_t len = VEC_BUF(filters,i).len + 1;
|
||||||
u8 mask = VEC_BUF(filters,i).mask;
|
u8 mask = VEC_BUF(filters,i).mask;
|
||||||
u8 *ifraw = VEC_BUF(filters,i).f;
|
u8 *ifraw = VEC_BUF(filters,i).f;
|
||||||
#endif
|
#endif // BINFILTER
|
||||||
base32_to(buf0,ifraw,len);
|
base32_to(buf0,ifraw,len);
|
||||||
memcpy(bufx,ifraw,len);
|
memcpy(bufx,ifraw,len);
|
||||||
bufx[len - 1] |= ~mask;
|
bufx[len - 1] |= ~mask;
|
||||||
|
|
Loading…
Add table
Reference in a new issue