From 958112c5a396815da7a731f406dbfd27bf713572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= Date: Tue, 5 Jan 2021 14:45:12 +0100 Subject: [PATCH] Refactor setting filter and use safe strncpy --- IncSet.c | 7 +++++++ IncSet.h | 2 ++ htop.c | 7 +------ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/IncSet.c b/IncSet.c index aba5e750..f1031bd0 100644 --- a/IncSet.c +++ b/IncSet.c @@ -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}; diff --git a/IncSet.h b/IncSet.h index 28580023..4ff19aad 100644 --- a/IncSet.h +++ b/IncSet.h @@ -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); diff --git a/htop.c b/htop.c index 00ff1dab..a8935f40 100644 --- a/htop.c +++ b/htop.c @@ -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);