Skip to content

Commit f2f1bbb

Browse files
committed
filter-modify: UTF8 encode to stack or heap, depending on encoded length
Signed-off-by: Nigel Stewart <[email protected]>
1 parent 8ff6c75 commit f2f1bbb

27 files changed

+190
-6
lines changed

lib/tutf8e/codegen.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,11 @@
133133
name = e.replace('-', '_').lower()
134134
include.write('extern char * % -33s(char *input);\n'%('tutf8e_string_encode_%s_realloc'%(name)))
135135

136+
include.write('\n/* Buffer length as UTF8 */\n')
137+
for e in sorted(encodings):
138+
name = e.replace('-', '_').lower()
139+
include.write('extern int % -33s(const char *i, size_t ilen, size_t *length);\n'%('tutf8e_buffer_length_%s'%(name)))
140+
136141
include.write('\n/* Encode buffer to UTF8 */\n')
137142
for e in sorted(encodings):
138143
name = e.replace('-', '_').lower()
@@ -182,6 +187,13 @@
182187
src.write(' return tutf8e_buffer_encode(%s_utf8, input, len, output, &olen);\n'%(name))
183188
src.write('}\n')
184189

190+
src.write('''
191+
int tutf8e_buffer_length_%s(const char *i, size_t ilen, size_t *length)
192+
{
193+
return tutf8e_buffer_length(%s_utf8, i, ilen, length);
194+
}
195+
'''%(name, name))
196+
185197
src.write('\n')
186198
src.write('int tutf8e_buffer_encode_%s(char *output, size_t *olen, const char *input, size_t ilen)\n'%(name))
187199
src.write('{\n')

lib/tutf8e/include/tutf8e.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,32 @@ extern char * tutf8e_string_encode_windows_1256_realloc(char *input);
6868
extern char * tutf8e_string_encode_windows_1257_realloc(char *input);
6969
extern char * tutf8e_string_encode_windows_1258_realloc(char *input);
7070

71+
/* Buffer length as UTF8 */
72+
extern int tutf8e_buffer_length_iso_8859_1 (const char *i, size_t ilen, size_t *length);
73+
extern int tutf8e_buffer_length_iso_8859_10 (const char *i, size_t ilen, size_t *length);
74+
extern int tutf8e_buffer_length_iso_8859_11 (const char *i, size_t ilen, size_t *length);
75+
extern int tutf8e_buffer_length_iso_8859_13 (const char *i, size_t ilen, size_t *length);
76+
extern int tutf8e_buffer_length_iso_8859_14 (const char *i, size_t ilen, size_t *length);
77+
extern int tutf8e_buffer_length_iso_8859_15 (const char *i, size_t ilen, size_t *length);
78+
extern int tutf8e_buffer_length_iso_8859_16 (const char *i, size_t ilen, size_t *length);
79+
extern int tutf8e_buffer_length_iso_8859_2 (const char *i, size_t ilen, size_t *length);
80+
extern int tutf8e_buffer_length_iso_8859_3 (const char *i, size_t ilen, size_t *length);
81+
extern int tutf8e_buffer_length_iso_8859_4 (const char *i, size_t ilen, size_t *length);
82+
extern int tutf8e_buffer_length_iso_8859_5 (const char *i, size_t ilen, size_t *length);
83+
extern int tutf8e_buffer_length_iso_8859_6 (const char *i, size_t ilen, size_t *length);
84+
extern int tutf8e_buffer_length_iso_8859_7 (const char *i, size_t ilen, size_t *length);
85+
extern int tutf8e_buffer_length_iso_8859_8 (const char *i, size_t ilen, size_t *length);
86+
extern int tutf8e_buffer_length_iso_8859_9 (const char *i, size_t ilen, size_t *length);
87+
extern int tutf8e_buffer_length_windows_1250(const char *i, size_t ilen, size_t *length);
88+
extern int tutf8e_buffer_length_windows_1251(const char *i, size_t ilen, size_t *length);
89+
extern int tutf8e_buffer_length_windows_1252(const char *i, size_t ilen, size_t *length);
90+
extern int tutf8e_buffer_length_windows_1253(const char *i, size_t ilen, size_t *length);
91+
extern int tutf8e_buffer_length_windows_1254(const char *i, size_t ilen, size_t *length);
92+
extern int tutf8e_buffer_length_windows_1255(const char *i, size_t ilen, size_t *length);
93+
extern int tutf8e_buffer_length_windows_1256(const char *i, size_t ilen, size_t *length);
94+
extern int tutf8e_buffer_length_windows_1257(const char *i, size_t ilen, size_t *length);
95+
extern int tutf8e_buffer_length_windows_1258(const char *i, size_t ilen, size_t *length);
96+
7197
/* Encode buffer to UTF8 */
7298
extern int tutf8e_buffer_encode_iso_8859_1 (char *output, size_t *olen, const char *input, size_t ilen);
7399
extern int tutf8e_buffer_encode_iso_8859_10 (char *output, size_t *olen, const char *input, size_t ilen);

lib/tutf8e/src/iso_8859_1.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ int tutf8e_string_encode_iso_8859_1(char *output, size_t olen, const char *input
2929
return tutf8e_buffer_encode(iso_8859_1_utf8, input, len, output, &olen);
3030
}
3131

32+
int tutf8e_buffer_length_iso_8859_1(const char *i, size_t ilen, size_t *length)
33+
{
34+
return tutf8e_buffer_length(iso_8859_1_utf8, i, ilen, length);
35+
}
36+
3237
int tutf8e_buffer_encode_iso_8859_1(char *output, size_t *olen, const char *input, size_t ilen)
3338
{
3439
return tutf8e_buffer_encode(iso_8859_1_utf8, input, ilen, output, olen);

lib/tutf8e/src/iso_8859_10.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ int tutf8e_string_encode_iso_8859_10(char *output, size_t olen, const char *inpu
2929
return tutf8e_buffer_encode(iso_8859_10_utf8, input, len, output, &olen);
3030
}
3131

32+
int tutf8e_buffer_length_iso_8859_10(const char *i, size_t ilen, size_t *length)
33+
{
34+
return tutf8e_buffer_length(iso_8859_10_utf8, i, ilen, length);
35+
}
36+
3237
int tutf8e_buffer_encode_iso_8859_10(char *output, size_t *olen, const char *input, size_t ilen)
3338
{
3439
return tutf8e_buffer_encode(iso_8859_10_utf8, input, ilen, output, olen);

lib/tutf8e/src/iso_8859_11.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ int tutf8e_string_encode_iso_8859_11(char *output, size_t olen, const char *inpu
2929
return tutf8e_buffer_encode(iso_8859_11_utf8, input, len, output, &olen);
3030
}
3131

32+
int tutf8e_buffer_length_iso_8859_11(const char *i, size_t ilen, size_t *length)
33+
{
34+
return tutf8e_buffer_length(iso_8859_11_utf8, i, ilen, length);
35+
}
36+
3237
int tutf8e_buffer_encode_iso_8859_11(char *output, size_t *olen, const char *input, size_t ilen)
3338
{
3439
return tutf8e_buffer_encode(iso_8859_11_utf8, input, ilen, output, olen);

lib/tutf8e/src/iso_8859_13.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ int tutf8e_string_encode_iso_8859_13(char *output, size_t olen, const char *inpu
2929
return tutf8e_buffer_encode(iso_8859_13_utf8, input, len, output, &olen);
3030
}
3131

32+
int tutf8e_buffer_length_iso_8859_13(const char *i, size_t ilen, size_t *length)
33+
{
34+
return tutf8e_buffer_length(iso_8859_13_utf8, i, ilen, length);
35+
}
36+
3237
int tutf8e_buffer_encode_iso_8859_13(char *output, size_t *olen, const char *input, size_t ilen)
3338
{
3439
return tutf8e_buffer_encode(iso_8859_13_utf8, input, ilen, output, olen);

lib/tutf8e/src/iso_8859_14.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ int tutf8e_string_encode_iso_8859_14(char *output, size_t olen, const char *inpu
2929
return tutf8e_buffer_encode(iso_8859_14_utf8, input, len, output, &olen);
3030
}
3131

32+
int tutf8e_buffer_length_iso_8859_14(const char *i, size_t ilen, size_t *length)
33+
{
34+
return tutf8e_buffer_length(iso_8859_14_utf8, i, ilen, length);
35+
}
36+
3237
int tutf8e_buffer_encode_iso_8859_14(char *output, size_t *olen, const char *input, size_t ilen)
3338
{
3439
return tutf8e_buffer_encode(iso_8859_14_utf8, input, ilen, output, olen);

lib/tutf8e/src/iso_8859_15.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ int tutf8e_string_encode_iso_8859_15(char *output, size_t olen, const char *inpu
2929
return tutf8e_buffer_encode(iso_8859_15_utf8, input, len, output, &olen);
3030
}
3131

32+
int tutf8e_buffer_length_iso_8859_15(const char *i, size_t ilen, size_t *length)
33+
{
34+
return tutf8e_buffer_length(iso_8859_15_utf8, i, ilen, length);
35+
}
36+
3237
int tutf8e_buffer_encode_iso_8859_15(char *output, size_t *olen, const char *input, size_t ilen)
3338
{
3439
return tutf8e_buffer_encode(iso_8859_15_utf8, input, ilen, output, olen);

lib/tutf8e/src/iso_8859_16.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ int tutf8e_string_encode_iso_8859_16(char *output, size_t olen, const char *inpu
2929
return tutf8e_buffer_encode(iso_8859_16_utf8, input, len, output, &olen);
3030
}
3131

32+
int tutf8e_buffer_length_iso_8859_16(const char *i, size_t ilen, size_t *length)
33+
{
34+
return tutf8e_buffer_length(iso_8859_16_utf8, i, ilen, length);
35+
}
36+
3237
int tutf8e_buffer_encode_iso_8859_16(char *output, size_t *olen, const char *input, size_t ilen)
3338
{
3439
return tutf8e_buffer_encode(iso_8859_16_utf8, input, ilen, output, olen);

lib/tutf8e/src/iso_8859_2.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ int tutf8e_string_encode_iso_8859_2(char *output, size_t olen, const char *input
2929
return tutf8e_buffer_encode(iso_8859_2_utf8, input, len, output, &olen);
3030
}
3131

32+
int tutf8e_buffer_length_iso_8859_2(const char *i, size_t ilen, size_t *length)
33+
{
34+
return tutf8e_buffer_length(iso_8859_2_utf8, i, ilen, length);
35+
}
36+
3237
int tutf8e_buffer_encode_iso_8859_2(char *output, size_t *olen, const char *input, size_t ilen)
3338
{
3439
return tutf8e_buffer_encode(iso_8859_2_utf8, input, ilen, output, olen);

0 commit comments

Comments
 (0)