return empty string for empty match
This commit is contained in:
parent
d5d0c15c8d
commit
2a77acf1c0
|
|
@ -221,6 +221,10 @@ XDB_PUBLIC(int) xdb_region_buffer_init(xdb_region_buffer_t *, char *, size_t);
|
||||||
// returns: 0 for ok or failed
|
// returns: 0 for ok or failed
|
||||||
XDB_PUBLIC(int) xdb_region_buffer_alloc(xdb_region_buffer_t *, int);
|
XDB_PUBLIC(int) xdb_region_buffer_alloc(xdb_region_buffer_t *, int);
|
||||||
|
|
||||||
|
// empty alloc - empty string
|
||||||
|
// returns: 0 - always
|
||||||
|
XDB_PUBLIC(int) xdb_region_buffer_empty(xdb_region_buffer_t *);
|
||||||
|
|
||||||
XDB_PUBLIC(void) xdb_region_buffer_free(xdb_region_buffer_t *);
|
XDB_PUBLIC(void) xdb_region_buffer_free(xdb_region_buffer_t *);
|
||||||
|
|
||||||
// xdb searcher structure
|
// xdb searcher structure
|
||||||
|
|
|
||||||
|
|
@ -57,9 +57,38 @@ XDB_PUBLIC(int) xdb_region_buffer_alloc(xdb_region_buffer_t *region, int length)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fixed internal empty string ptr
|
||||||
|
static char * _empty_region_string = "\0";
|
||||||
|
|
||||||
|
XDB_PUBLIC(int) xdb_region_buffer_empty(xdb_region_buffer_t *region) {
|
||||||
|
// no allocation supports for the buffer wapper
|
||||||
|
if (region->type == xdb_region_buffer_wrapper) {
|
||||||
|
region->value[0] = '\0';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ensure that the value were freed
|
||||||
|
// by calling #xdb_region_buffer_free
|
||||||
|
if (region->value != NULL) {
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
region->value = _empty_region_string;
|
||||||
|
region->length = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
XDB_PUBLIC(void) xdb_region_buffer_free(xdb_region_buffer_t *region) {
|
XDB_PUBLIC(void) xdb_region_buffer_free(xdb_region_buffer_t *region) {
|
||||||
if (region->type == xdb_region_buffer_auto) {
|
if (region->type == xdb_region_buffer_auto) {
|
||||||
xdb_free(region->value);
|
// empty string interception
|
||||||
|
if (region->length == 0
|
||||||
|
|| region->value == _empty_region_string) {
|
||||||
|
// do nothing for empty string
|
||||||
|
} else {
|
||||||
|
xdb_free(region->value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// reset the value
|
||||||
region->value = NULL;
|
region->value = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -196,7 +225,9 @@ XDB_PUBLIC(int) xdb_search(xdb_searcher_t *xdb, const bytes_ip_t *ip_bytes, int
|
||||||
|
|
||||||
// printf("data_len=%u, data_ptr=%u\n", data_len, data_ptr);
|
// printf("data_len=%u, data_ptr=%u\n", data_len, data_ptr);
|
||||||
if (data_len == 0) {
|
if (data_len == 0) {
|
||||||
return 100;
|
// return 100;
|
||||||
|
xdb_region_buffer_empty(region);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
// buffer alloc checking
|
// buffer alloc checking
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue