summaryrefslogtreecommitdiffstats
path: root/ScreenManager.c
diff options
context:
space:
mode:
authorSilke Hofstra <silke@slxh.eu>2021-08-16 22:50:36 +0200
committerBenBE <BenBE@geshi.org>2021-10-27 21:20:59 +0200
commit696f79fe5099d510fc6ecc6d1e2f0ab3ae29e04e (patch)
tree2c9fa20e121b5c4b6cb90072fa016e5a642ddb65 /ScreenManager.c
parent4374a267bec655e704faaa379d1ed62eca90b71a (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.c9
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) {

© 2014-2024 Faster IT GmbH | imprint | privacy policy