|
23 | 23 |
|
24 | 24 | #ifdef FLB_HAVE_ENCODE |
25 | 25 | #include <tutf8e.h> |
26 | | -#endif |
27 | 26 |
|
28 | | -const size_t TUTF8_DEFAULT_BUFFER = 256; |
| 27 | +#define TUTF8_BUFFER_SIZE 256 |
29 | 28 |
|
30 | | -void flb_msgpack_iso_8859_2_as_utf8(msgpack_packer* pk, const void* b, size_t l) |
| 29 | +flb_encoder flb_get_encoder(const char *encoding) |
31 | 30 | { |
32 | | -#ifdef FLB_HAVE_ENCODE |
33 | | - size_t size = 0; |
34 | | - if (!tutf8e_buffer_length_iso_8859_2(b, l, &size) && size) |
35 | | - { |
36 | | - /* Already UTF8 encoded? */ |
37 | | - if (size == l) { |
38 | | - } |
39 | | - /* Small enough for encoding to stack? */ |
40 | | - else if (size<=TUTF8_DEFAULT_BUFFER) |
41 | | - { |
42 | | - size = TUTF8_DEFAULT_BUFFER; |
43 | | - char buffer[TUTF8_DEFAULT_BUFFER]; |
44 | | - if (!tutf8e_buffer_encode_iso_8859_2(buffer, &size, b, l) && size) { |
45 | | - msgpack_pack_str(pk, size); |
46 | | - msgpack_pack_str_body(pk, buffer, size); |
47 | | - return; |
| 31 | + return tutf8e_encoder(encoding); |
| 32 | +} |
| 33 | + |
| 34 | +void flb_msgpack_encode_utf8(flb_encoder enc, msgpack_packer* pk, const void* b, size_t l) |
| 35 | +{ |
| 36 | + if (enc) { |
| 37 | + size_t size = 0; |
| 38 | + if (!tutf8e_encoder_buffer_length(enc, b, l, &size) && size) { |
| 39 | + /* Already UTF8 encoded? */ |
| 40 | + if (size == l) { |
48 | 41 | } |
49 | | - } |
50 | | - /* malloc/free the encoded copy */ |
51 | | - else { |
52 | | - char *buffer = (char *) flb_malloc(size); |
53 | | - if (buffer && !tutf8e_buffer_encode_iso_8859_2(buffer, &size, b, l) && size) { |
54 | | - msgpack_pack_str(pk, size); |
55 | | - msgpack_pack_str_body(pk, buffer, size); |
| 42 | + /* Small enough for encoding to stack? */ |
| 43 | + else if (size<=TUTF8_BUFFER_SIZE) { |
| 44 | + char buffer[TUTF8_BUFFER_SIZE]; |
| 45 | + if (!tutf8e_encoder_buffer_encode(enc, b, l, buffer, &size) && size) { |
| 46 | + msgpack_pack_str(pk, size); |
| 47 | + msgpack_pack_str_body(pk, buffer, size); |
| 48 | + return; |
| 49 | + } |
| 50 | + } |
| 51 | + /* malloc/free the encoded copy */ |
| 52 | + else { |
| 53 | + char *buffer = (char *) flb_malloc(size); |
| 54 | + if (buffer && !tutf8e_encoder_buffer_encode(enc, b, l, buffer, &size) && size) { |
| 55 | + msgpack_pack_str(pk, size); |
| 56 | + msgpack_pack_str_body(pk, buffer, size); |
| 57 | + free(buffer); |
| 58 | + return; |
| 59 | + } |
56 | 60 | free(buffer); |
57 | | - return; |
58 | | - } |
59 | | - free(buffer); |
| 61 | + } |
60 | 62 | } |
61 | 63 | } |
62 | | -#endif |
63 | 64 |
|
64 | 65 | /* Could not or need not encode to UTF8 */ |
65 | 66 | msgpack_pack_str(pk, l); |
66 | 67 | msgpack_pack_str_body(pk, b, l); |
67 | 68 | } |
| 69 | +#endif |
| 70 | + |
0 commit comments