diff options
author | Christian Göttsche <cgzones@googlemail.com> | 2021-01-14 10:24:36 +0100 |
---|---|---|
committer | cgzones <cgzones@googlemail.com> | 2021-01-15 20:41:10 +0100 |
commit | b9adc30b86ef550655de1e8a8122dae20a6b13df (patch) | |
tree | 1c61cd8fe540451c7c9175cc70002a285b286581 | |
parent | 08ac22ddb9e848123934dad215c58cb03e7ad094 (diff) |
RichString: implement safe rewind
The current rewind logic causes issues when rewinding over the short
string optimization boundary.
-rw-r--r-- | ProcessList.c | 2 | ||||
-rw-r--r-- | RichString.c | 4 | ||||
-rw-r--r-- | RichString.h | 2 |
3 files changed, 7 insertions, 1 deletions
diff --git a/ProcessList.c b/ProcessList.c index 585a9194..4dfbe21d 100644 --- a/ProcessList.c +++ b/ProcessList.c @@ -113,7 +113,7 @@ void ProcessList_printHeader(const ProcessList* this, RichString* header) { RichString_appendWide(header, color, alignedProcessFieldTitle(fields[i])); if (key == fields[i] && RichString_getCharVal(*header, RichString_size(header) - 1) == ' ') { - header->chlen--; // rewind to override space + RichString_rewind(header, 1); // rewind to override space RichString_appendnWide(header, CRT_colors[PANEL_SELECTION_FOCUS], CRT_treeStr[Settings_getActiveDirection(this->settings) == 1 ? TREE_STR_DESC : TREE_STR_ASC], diff --git a/RichString.c b/RichString.c index 5a2c2e14..c4ecc258 100644 --- a/RichString.c +++ b/RichString.c @@ -46,6 +46,10 @@ static void RichString_setLen(RichString* this, int len) { } } +void RichString_rewind(RichString* this, int count) { + RichString_setLen(this, this->chlen - count); +} + #ifdef HAVE_LIBNCURSESW static inline int RichString_writeFromWide(RichString* this, int attrs, const char* data_c, int from, int len) { diff --git a/RichString.h b/RichString.h index 7464fff1..d317cb2e 100644 --- a/RichString.h +++ b/RichString.h @@ -42,6 +42,8 @@ typedef struct RichString_ { int highlightAttr; } RichString; +void RichString_rewind(RichString* this, int count); + void RichString_setAttrn(RichString* this, int attrs, int start, int charcount); int RichString_findChar(const RichString* this, char c, int start); |