diff --git a/src/char_convert_loader.c b/src/char_convert_loader.c index 69b8c1b..01be465 100644 --- a/src/char_convert_loader.c +++ b/src/char_convert_loader.c @@ -18,12 +18,18 @@ int char_convert_loader_init(FastCharConverter *pCharConverter, const IniItem *items, const int count) +{ + char_convert_loader_init(pCharConverter, NULL, 0); + return char_convert_loader_add(pCharConverter, items, count); +} + +int char_convert_loader_add(FastCharConverter *pCharConverter, + const IniItem *items, const int count) { const IniItem *pItem; const IniItem *pEnd; int result; - char_convert_loader_init(pCharConverter, NULL, 0); pEnd = items + count; for (pItem=items; pItemchar_table[src].op = FAST_CHAR_OP_NO_BACKSLASH; + pCharConverter->char_table[src].op = op; pCharConverter->char_table[src].dest = charPairs[i].dest; } return 0; @@ -61,10 +62,28 @@ int std_space_char_converter_init(FastCharConverter *pCharConverter, return char_converter_init(pCharConverter, pairs, SPACE_CHAR_PAIR_COUNT); } +int std_spaces_add_backslash_converter_init(FastCharConverter *pCharConverter) +{ +#define SPACE_CHAR_PAIR_COUNT 7 + FastCharPair pairs[SPACE_CHAR_PAIR_COUNT]; + + pairs[0].src = '\0'; pairs[0].dest = '0'; + pairs[1].src = '\t'; pairs[1].dest = 't'; + pairs[2].src = '\n'; pairs[2].dest = 'n'; + pairs[3].src = '\v'; pairs[3].dest = 'v'; + pairs[4].src = '\f'; pairs[4].dest = 'f'; + pairs[5].src = '\r'; pairs[5].dest = 'r'; + pairs[6].src = ' '; pairs[6].dest = '-'; + + return char_converter_init_ex(pCharConverter, pairs, + SPACE_CHAR_PAIR_COUNT, FAST_CHAR_OP_ADD_BACKSLASH); +} + void char_converter_set_pair(FastCharConverter *pCharConverter, const unsigned char src, const unsigned char dest) { - char_converter_set_pair_ex(pCharConverter, src, FAST_CHAR_OP_NO_BACKSLASH, dest); + char_converter_set_pair_ex(pCharConverter, src, + FAST_CHAR_OP_NO_BACKSLASH, dest); } void char_converter_set_pair_ex(FastCharConverter *pCharConverter, @@ -93,7 +112,6 @@ int fast_char_convert(FastCharConverter *pCharConverter, unsigned char *po; unsigned char *end; int out_size_sub1; - int remain_len; count = 0; po = (unsigned char *)output; @@ -115,8 +133,7 @@ int fast_char_convert(FastCharConverter *pCharConverter, } } - remain_len = end - pi; - if (remain_len == 0) { + if (pi == end) { *out_len = po - (unsigned char *)output; return count; } diff --git a/src/char_converter.h b/src/char_converter.h index dd7742c..5ddec1f 100644 --- a/src/char_converter.h +++ b/src/char_converter.h @@ -55,10 +55,27 @@ typedef struct fast_char_converter * pCharConverter: the char converter * charPairs: the char pairs * count: the count of char pairs + * op: the operator type * return: 0 for success, != 0 fail */ -int char_converter_init(FastCharConverter *pCharConverter, - const FastCharPair *charPairs, const int count); +int char_converter_init_ex(FastCharConverter *pCharConverter, + const FastCharPair *charPairs, const int count, + const unsigned op); + +/** + * char converter init function + * parameters: + * pCharConverter: the char converter + * charPairs: the char pairs + * count: the count of char pairs + * return: 0 for success, != 0 fail +*/ +static inline int char_converter_init(FastCharConverter *pCharConverter, + const FastCharPair *charPairs, const int count) +{ + return char_converter_init_ex(pCharConverter, charPairs, count, + FAST_CHAR_OP_NO_BACKSLASH); +} /** * standard space chars to convert @@ -70,6 +87,14 @@ int char_converter_init(FastCharConverter *pCharConverter, int std_space_char_converter_init(FastCharConverter *pCharConverter, const unsigned char dest_base); +/** + * standard space chars init to add backslash + * parameters: + * pCharConverter: the char converter + * return: 0 for success, != 0 fail +*/ +int std_spaces_add_backslash_converter_init(FastCharConverter *pCharConverter); + /** * set char pair to converter * parameters: