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);