proper filtering of RL markers

This commit is contained in:
Philippe Teuwen 2020-05-08 18:12:10 +02:00
commit ff7b7b3a6f
3 changed files with 18 additions and 5 deletions

View file

@ -331,7 +331,10 @@ check_script:
} }
char prompt[PROXPROMPT_MAX_SIZE] = {0}; char prompt[PROXPROMPT_MAX_SIZE] = {0};
prompt_compose(prompt, sizeof(prompt), prompt_ctx, prompt_dev); prompt_compose(prompt, sizeof(prompt), prompt_ctx, prompt_dev);
PrintAndLogEx(NORMAL, "%s%s", prompt, cmd); // always filter RL magic separators if not using readline
char prompt_filtered[PROXPROMPT_MAX_SIZE] = {0};
memcpy_filter_rlmarkers(prompt_filtered, prompt, sizeof(prompt_filtered));
PrintAndLogEx(NORMAL, "%s%s", prompt_filtered, cmd);
g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG; g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG;
// add to history if not from a script // add to history if not from a script

View file

@ -351,6 +351,19 @@ void SetFlushAfterWrite(bool value) {
flushAfterWrite = value; flushAfterWrite = value;
} }
void memcpy_filter_rlmarkers(void *dest, const void *src, size_t n) {
uint8_t *rdest = (uint8_t *)dest;
uint8_t *rsrc = (uint8_t *)src;
uint16_t si = 0;
for (uint16_t i = 0; i < n; i++) {
if ((i < n)
&& ((rsrc[i] == '\001') || (rsrc[i] == '\002')))
// skip readline special markers
continue;
rdest[si++] = rsrc[i];
}
}
void memcpy_filter_ansi(void *dest, const void *src, size_t n, bool filter) { void memcpy_filter_ansi(void *dest, const void *src, size_t n, bool filter) {
if (filter) { if (filter) {
// Filter out ANSI sequences on these OS // Filter out ANSI sequences on these OS
@ -358,10 +371,6 @@ void memcpy_filter_ansi(void *dest, const void *src, size_t n, bool filter) {
uint8_t *rsrc = (uint8_t *)src; uint8_t *rsrc = (uint8_t *)src;
uint16_t si = 0; uint16_t si = 0;
for (uint16_t i = 0; i < n; i++) { for (uint16_t i = 0; i < n; i++) {
if ((i < n)
&& ((rsrc[i] == '\001') || (rsrc[i] == '\002')))
// skip readline special markers
continue;
if ((i < n - 1) if ((i < n - 1)
&& (rsrc[i] == '\x1b') && (rsrc[i] == '\x1b')
&& (rsrc[i + 1] >= 0x40) && (rsrc[i + 1] >= 0x40)

View file

@ -56,6 +56,7 @@ void PrintAndLogOptions(const char *str[][2], size_t size, size_t space);
void PrintAndLogEx(logLevel_t level, const char *fmt, ...); void PrintAndLogEx(logLevel_t level, const char *fmt, ...);
void SetFlushAfterWrite(bool value); void SetFlushAfterWrite(bool value);
void memcpy_filter_ansi(void *dest, const void *src, size_t n, bool filter); void memcpy_filter_ansi(void *dest, const void *src, size_t n, bool filter);
void memcpy_filter_rlmarkers(void *dest, const void *src, size_t n);
void memcpy_filter_emoji(void *dest, const void *src, size_t n, emojiMode_t mode); void memcpy_filter_emoji(void *dest, const void *src, size_t n, emojiMode_t mode);
int searchHomeFilePath(char **foundpath, const char *filename, bool create_home); int searchHomeFilePath(char **foundpath, const char *filename, bool create_home);