diff options
author | Silke Hofstra <silke@slxh.eu> | 2021-08-16 22:50:36 +0200 |
---|---|---|
committer | BenBE <BenBE@geshi.org> | 2021-10-27 21:20:59 +0200 |
commit | 696f79fe5099d510fc6ecc6d1e2f0ab3ae29e04e (patch) | |
tree | 2c9fa20e121b5c4b6cb90072fa016e5a642ddb65 /ScreenManager.c | |
parent | 4374a267bec655e704faaa379d1ed62eca90b71a (diff) |
Dynamically scale the ST_UID size to support 32-bit UIDs
While most Unix-like systems use 16-bit user IDs,
Linux supports 32-bit UIDs since version 2.6.
UIDs above 65535 are used for UID namespacing of containers,
where a container has its own set of 16-bit user IDs.
Processes in such containers will have (much) larger UIDs than 65535.
Because the current format strings for `ST_UID` and `USER`
are `%5d` and `%9d` respectively, processes with such UIDs
lead to misaligned columns.
Dynamically scale the `ST_UID` column and increase the size of `USER`
to 10 characters (length of UINT32_MAX) to ensure that the user ID always fits.
Additionally: clean up how the titlebuffer size calculation and ensure
the PID column has a minimum size of 5.
Diffstat (limited to 'ScreenManager.c')
-rw-r--r-- | ScreenManager.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/ScreenManager.c b/ScreenManager.c index 54dec643..96e9c47e 100644 --- a/ScreenManager.c +++ b/ScreenManager.c @@ -88,7 +88,7 @@ void ScreenManager_resize(ScreenManager* this) { Panel_move(panel, lastX, y1_header); } -static void checkRecalculation(ScreenManager* this, double* oldTime, int* sortTimeout, bool* redraw, bool* rescan, bool* timedOut) { +static void checkRecalculation(ScreenManager* this, double* oldTime, int* sortTimeout, bool* redraw, bool* rescan, bool* timedOut, bool *force_redraw) { ProcessList* pl = this->header->pl; Platform_gettime_realtime(&pl->realtime, &pl->realtimeMs); @@ -103,6 +103,7 @@ static void checkRecalculation(ScreenManager* this, double* oldTime, int* sortTi if (*rescan) { *oldTime = newTime; + int oldUidDigits = Process_uidDigits; // scan processes first - some header values are calculated there ProcessList_scan(pl, this->state->pauseProcessUpdate); // always update header, especially to avoid gaps in graph meters @@ -111,6 +112,10 @@ static void checkRecalculation(ScreenManager* this, double* oldTime, int* sortTi ProcessList_sort(pl); *sortTimeout = 1; } + // force redraw if the number of UID digits was changed + if (Process_uidDigits != oldUidDigits) { + *force_redraw = true; + } *redraw = true; } if (*redraw) { @@ -153,7 +158,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) { while (!quit) { if (this->header) { - checkRecalculation(this, &oldTime, &sortTimeout, &redraw, &rescan, &timedOut); + checkRecalculation(this, &oldTime, &sortTimeout, &redraw, &rescan, &timedOut, &force_redraw); } if (redraw || force_redraw) { |