tweaks: elide an intermediate copy of a character during injection, twice
parent
a0703ab62d
commit
78767b583d
|
@ -1638,10 +1638,9 @@ void process_a_keystroke(void)
|
||||||
/* The user typed output_len multibyte characters. Add them to the buffer. */
|
/* The user typed output_len multibyte characters. Add them to the buffer. */
|
||||||
void inject(char *output, size_t output_len)
|
void inject(char *output, size_t output_len)
|
||||||
{
|
{
|
||||||
char onechar[MAXCHARLEN];
|
|
||||||
int charlen;
|
|
||||||
size_t current_len = strlen(openfile->current->data);
|
size_t current_len = strlen(openfile->current->data);
|
||||||
size_t index = 0;
|
size_t index = 0;
|
||||||
|
int charlen;
|
||||||
#ifndef NANO_TINY
|
#ifndef NANO_TINY
|
||||||
size_t original_row = 0, old_amount = 0;
|
size_t original_row = 0, old_amount = 0;
|
||||||
|
|
||||||
|
@ -1657,8 +1656,7 @@ void inject(char *output, size_t output_len)
|
||||||
if (output[index] == '\0')
|
if (output[index] == '\0')
|
||||||
output[index] = '\n';
|
output[index] = '\n';
|
||||||
|
|
||||||
/* Get the next multibyte character. */
|
charlen = char_length(output + index);
|
||||||
charlen = collect_char(output + index, onechar);
|
|
||||||
|
|
||||||
/* Make room for the new character and copy it into the line. */
|
/* Make room for the new character and copy it into the line. */
|
||||||
openfile->current->data = charealloc(openfile->current->data,
|
openfile->current->data = charealloc(openfile->current->data,
|
||||||
|
@ -1666,7 +1664,8 @@ void inject(char *output, size_t output_len)
|
||||||
memmove(openfile->current->data + openfile->current_x + charlen,
|
memmove(openfile->current->data + openfile->current_x + charlen,
|
||||||
openfile->current->data + openfile->current_x,
|
openfile->current->data + openfile->current_x,
|
||||||
current_len - openfile->current_x + 1);
|
current_len - openfile->current_x + 1);
|
||||||
strncpy(openfile->current->data + openfile->current_x, onechar, charlen);
|
strncpy(openfile->current->data + openfile->current_x,
|
||||||
|
output + index, charlen);
|
||||||
|
|
||||||
current_len += charlen;
|
current_len += charlen;
|
||||||
index += charlen;
|
index += charlen;
|
||||||
|
|
|
@ -176,7 +176,6 @@ int do_statusbar_input(bool *finished)
|
||||||
/* The user typed input_len multibyte characters. Add them to the answer. */
|
/* The user typed input_len multibyte characters. Add them to the answer. */
|
||||||
void inject_into_answer(char *output, size_t input_len)
|
void inject_into_answer(char *output, size_t input_len)
|
||||||
{
|
{
|
||||||
char onechar[MAXCHARLEN];
|
|
||||||
size_t charlen, index = 0;
|
size_t charlen, index = 0;
|
||||||
|
|
||||||
while (index < input_len) {
|
while (index < input_len) {
|
||||||
|
@ -184,14 +183,13 @@ void inject_into_answer(char *output, size_t input_len)
|
||||||
if (output[index] == '\0')
|
if (output[index] == '\0')
|
||||||
output[index] = '\n';
|
output[index] = '\n';
|
||||||
|
|
||||||
/* Interpret the next multibyte character. */
|
charlen = char_length(output + index);
|
||||||
charlen = collect_char(output + index, onechar);
|
|
||||||
|
|
||||||
/* Insert the typed character into the existing answer string. */
|
/* Insert the typed character into the existing answer string. */
|
||||||
answer = charealloc(answer, strlen(answer) + charlen + 1);
|
answer = charealloc(answer, strlen(answer) + charlen + 1);
|
||||||
memmove(answer + typing_x + charlen, answer + typing_x,
|
memmove(answer + typing_x + charlen, answer + typing_x,
|
||||||
strlen(answer) - typing_x + 1);
|
strlen(answer) - typing_x + 1);
|
||||||
strncpy(answer + typing_x, onechar, charlen);
|
strncpy(answer + typing_x, output + index, charlen);
|
||||||
|
|
||||||
typing_x += charlen;
|
typing_x += charlen;
|
||||||
index += charlen;
|
index += charlen;
|
||||||
|
|
Loading…
Reference in New Issue