浏览代码

[Minor] Allow unconditional special handlers

tags/1.9.1
Vsevolod Stakhov 5 年前
父节点
当前提交
ab4950c5ea
共有 2 个文件被更改,包括 12 次插入2 次删除
  1. 9
    0
      contrib/libucl/ucl.h
  2. 3
    2
      contrib/libucl/ucl_parser.c

+ 9
- 0
contrib/libucl/ucl.h 查看文件

@@ -1294,12 +1294,21 @@ typedef bool (*ucl_parser_special_handler_t) (struct ucl_parser *parser,
unsigned char **destination, size_t *dest_len,
void *user_data);

/**
* Special handler flags
*/
enum ucl_special_handler_flags {
UCL_SPECIAL_HANDLER_DEFAULT = 0,
UCL_SPECIAL_HANDLER_PREPROCESS_ALL = (1u << 0),
};

/**
* Special handler structure
*/
struct ucl_parser_special_handler {
const unsigned char *magic;
size_t magic_len;
enum ucl_special_handler_flags flags;
ucl_parser_special_handler_t handler;
void (*free_function) (unsigned char *data, size_t len, void *user_data);
void *user_data;

+ 3
- 2
contrib/libucl/ucl_parser.c 查看文件

@@ -2862,8 +2862,9 @@ ucl_parser_add_chunk_full (struct ucl_parser *parser, const unsigned char *data,
memset (chunk, 0, sizeof (*chunk));

LL_FOREACH (parser->special_handlers, special_handler) {
if (len >= special_handler->magic_len &&
memcmp (data, special_handler->magic, special_handler->magic_len) == 0) {
if ((special_handler->flags & UCL_SPECIAL_HANDLER_PREPROCESS_ALL) ||
(len >= special_handler->magic_len &&
memcmp (data, special_handler->magic, special_handler->magic_len) == 0)) {
unsigned char *ndata = NULL;
size_t nlen = 0;


正在加载...
取消
保存