Skip to content

Commit

Permalink
Rewrite update_output as function
Browse files Browse the repository at this point in the history
  • Loading branch information
czchen committed Jul 21, 2014
1 parent 0f70b9c commit cb8f83d
Showing 1 changed file with 23 additions and 18 deletions.
41 changes: 23 additions & 18 deletions src/uao.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,19 +125,16 @@ const struct Config UTF8_TO_BIG5_CONFIG = {
utf8_to_big5_get_output,
};

#define UPDATE_OUTPUT(final_len, output, output_len, input) \
do { \
int len = strlen(input); \
if (output_len > len) { \
memcpy(output, input, len); \
output_len -= len; \
output += len; \
} else if (output_len > 0) { \
output[0] = 0; \
output_len = 0; \
} \
final_len += len; \
} while (0)
static int update_output(char *output, size_t output_len, const char *input)
{
int len = strlen(input);
if (output_len > len) {
memcpy(output, input, len);
} else if (output_len > 0) {
output[0] = 0;
}
return len;
}

static int convert(const struct Config *config, const char *input, char *output, size_t output_len)
{
Expand All @@ -153,27 +150,35 @@ static int convert(const struct Config *config, const char *input, char *output,

while (input[0]) {
int input_len = config->copy_input(input, buf);
int len;

if (input_len == 1) {
// ASCII
UPDATE_OUTPUT(final_len, output, output_len, buf);
len = update_output(output, output_len, buf);

} else {
struct Big5_UTF8_Table *res = bsearch(buf, config->table, config->table_len, sizeof(config->table[0]), config->compare);

if (res) {
UPDATE_OUTPUT(final_len, output, output_len, config->get_output(res));
len = update_output(output, output_len, config->get_output(res));
} else {
UPDATE_OUTPUT(final_len, output, output_len, UNKNOWN_CHAR);
len = update_output(output, output_len, UNKNOWN_CHAR);
}
}

if (output_len > 0) {
output[0] = 0;
if (len < output_len) {
output += len;
output_len -= len;
}

final_len += len;
input += input_len;
}

if (output_len > 0) {
output[0] = 0;
}

return final_len;
}

Expand Down

0 comments on commit cb8f83d

Please sign in to comment.