diff options
author | Christian Göttsche <cgzones@googlemail.com> | 2021-01-05 14:45:12 +0100 |
---|---|---|
committer | BenBE <BenBE@geshi.org> | 2021-01-11 20:12:34 +0100 |
commit | 958112c5a396815da7a731f406dbfd27bf713572 (patch) | |
tree | 49b8640137ba6e70072d5ade0bc8260abc59dc8e | |
parent | a118928dee0874eef98be81531a98577c1ae3f7d (diff) |
Refactor setting filter and use safe strncpy
-rw-r--r-- | IncSet.c | 7 | ||||
-rw-r--r-- | IncSet.h | 2 | ||||
-rw-r--r-- | htop.c | 7 |
3 files changed, 10 insertions, 6 deletions
@@ -29,6 +29,13 @@ void IncSet_reset(IncSet* this, IncType type) { IncMode_reset(&this->modes[type]); } +void IncSet_setFilter(IncSet* this, const char* filter) { + IncMode* mode = &this->modes[INC_FILTER]; + size_t len = String_safeStrncpy(mode->buffer, filter, sizeof(mode->buffer)); + mode->index = len; + this->filtering = true; +} + static const char* const searchFunctions[] = {"Next ", "Prev ", "Cancel ", " Search: ", NULL}; static const char* const searchKeys[] = {"F3", "S-F3", "Esc", " "}; static const int searchEvents[] = {KEY_F(3), KEY_F(15), 27, ERR}; @@ -40,6 +40,8 @@ static inline const char* IncSet_filter(const IncSet* this) { return this->filtering ? this->modes[INC_FILTER].buffer : NULL; } +void IncSet_setFilter(IncSet* this, const char* filter); + typedef const char* (*IncMode_GetPanelValue)(Panel*, int); void IncSet_reset(IncSet* this, IncType type); @@ -248,13 +248,8 @@ static void setCommFilter(State* state, char** commFilter) { MainPanel* panel = (MainPanel*)state->panel; ProcessList* pl = state->pl; IncSet* inc = panel->inc; - size_t maxlen = sizeof(inc->modes[INC_FILTER].buffer) - 1; - char* buffer = inc->modes[INC_FILTER].buffer; - strncpy(buffer, *commFilter, maxlen); - buffer[maxlen] = 0; - inc->modes[INC_FILTER].index = strlen(buffer); - inc->filtering = true; + IncSet_setFilter(inc, *commFilter); pl->incFilter = IncSet_filter(inc); free(*commFilter); |