summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Scott <nathans@redhat.com>2020-12-07 11:41:22 +1100
committerNathan Scott <nathans@redhat.com>2020-12-07 11:41:22 +1100
commitb92cfa7d7ac09b4e8a3c377496edd49228221f72 (patch)
treeaefa244b8140e21e2d02018e57c7b9fa0c7d23ec
parent57d9ecc5519a44d4d08f1739ab4b741ccfc2d35a (diff)
parentad764ff972082608604634c84e5427e7bfdcda1a (diff)
Merge branch 'conversion' of https://github.com/cgzones/htop into cgzones-conversion
-rw-r--r--BatteryMeter.c2
-rw-r--r--CPUMeter.c2
-rw-r--r--ClockMeter.c2
-rw-r--r--DateMeter.c2
-rw-r--r--DateTimeMeter.c2
-rw-r--r--DiskIOMeter.c2
-rw-r--r--HostnameMeter.c2
-rw-r--r--LoadAverageMeter.c4
-rw-r--r--MemoryMeter.c13
-rw-r--r--Meter.c15
-rw-r--r--Meter.h27
-rw-r--r--NetworkIOMeter.c2
-rw-r--r--Process.c6
-rw-r--r--Process.h2
-rw-r--r--SwapMeter.c13
-rw-r--r--TasksMeter.c2
-rw-r--r--UptimeMeter.c2
-rw-r--r--XUtils.c4
-rw-r--r--XUtils.h2
-rw-r--r--linux/LinuxProcess.c2
-rw-r--r--linux/PressureStallMeter.c2
-rw-r--r--linux/SELinuxMeter.c2
-rw-r--r--linux/SystemdMeter.c2
-rw-r--r--linux/ZramMeter.c35
-rw-r--r--zfs/ZfsArcMeter.c13
-rw-r--r--zfs/ZfsCompressedArcMeter.c4
26 files changed, 87 insertions, 79 deletions
diff --git a/BatteryMeter.c b/BatteryMeter.c
index 5a06825f..4836809b 100644
--- a/BatteryMeter.c
+++ b/BatteryMeter.c
@@ -21,7 +21,7 @@ static const int BatteryMeter_attributes[] = {
BATTERY
};
-static void BatteryMeter_updateValues(Meter* this, char* buffer, int len) {
+static void BatteryMeter_updateValues(Meter* this, char* buffer, size_t len) {
ACPresence isOnAC;
double percent;
diff --git a/CPUMeter.c b/CPUMeter.c
index 855d94bd..97fc3f0b 100644
--- a/CPUMeter.c
+++ b/CPUMeter.c
@@ -50,7 +50,7 @@ static void CPUMeter_init(Meter* this) {
Meter_setCaption(this, "Avg");
}
-static void CPUMeter_updateValues(Meter* this, char* buffer, int size) {
+static void CPUMeter_updateValues(Meter* this, char* buffer, size_t size) {
int cpu = this->param;
if (cpu > this->pl->cpuCount) {
xSnprintf(buffer, size, "absent");
diff --git a/ClockMeter.c b/ClockMeter.c
index 3cc9dd03..023ca425 100644
--- a/ClockMeter.c
+++ b/ClockMeter.c
@@ -19,7 +19,7 @@ static const int ClockMeter_attributes[] = {
CLOCK
};
-static void ClockMeter_updateValues(Meter* this, char* buffer, int size) {
+static void ClockMeter_updateValues(Meter* this, char* buffer, size_t size) {
time_t t = time(NULL);
struct tm result;
struct tm* lt = localtime_r(&t, &result);
diff --git a/DateMeter.c b/DateMeter.c
index bfe0cbf1..bd6a306b 100644
--- a/DateMeter.c
+++ b/DateMeter.c
@@ -19,7 +19,7 @@ static const int DateMeter_attributes[] = {
DATE
};
-static void DateMeter_updateValues(Meter* this, char* buffer, int size) {
+static void DateMeter_updateValues(Meter* this, char* buffer, size_t size) {
time_t t = time(NULL);
struct tm result;
struct tm* lt = localtime_r(&t, &result);
diff --git a/DateTimeMeter.c b/DateTimeMeter.c
index ad5e81ea..0d231cd5 100644
--- a/DateTimeMeter.c
+++ b/DateTimeMeter.c
@@ -19,7 +19,7 @@ static const int DateTimeMeter_attributes[] = {
DATETIME
};
-static void DateTimeMeter_updateValues(Meter* this, char* buffer, int size) {
+static void DateTimeMeter_updateValues(Meter* this, char* buffer, size_t size) {
time_t t = time(NULL);
struct tm result;
struct tm* lt = localtime_r(&t, &result);
diff --git a/DiskIOMeter.c b/DiskIOMeter.c
index da6ae7d5..0105ce35 100644
--- a/DiskIOMeter.c
+++ b/DiskIOMeter.c
@@ -30,7 +30,7 @@ static unsigned long int cached_read_diff = 0;
static unsigned long int cached_write_diff = 0;
static double cached_utilisation_diff = 0.0;
-static void DiskIOMeter_updateValues(Meter* this, char* buffer, int len) {
+static void DiskIOMeter_updateValues(Meter* this, char* buffer, size_t len) {
static unsigned long long int cached_last_update = 0;
struct timeval tv;
diff --git a/HostnameMeter.c b/HostnameMeter.c
index 000bc3fd..af8e3493 100644
--- a/HostnameMeter.c
+++ b/HostnameMeter.c
@@ -19,7 +19,7 @@ static const int HostnameMeter_attributes[] = {
HOSTNAME
};
-static void HostnameMeter_updateValues(Meter* this, char* buffer, int size) {
+static void HostnameMeter_updateValues(Meter* this, char* buffer, size_t size) {
(void) this;
gethostname(buffer, size - 1);
}
diff --git a/LoadAverageMeter.c b/LoadAverageMeter.c
index 76b89ea1..d5424cd2 100644
--- a/LoadAverageMeter.c
+++ b/LoadAverageMeter.c
@@ -24,7 +24,7 @@ static const int LoadMeter_attributes[] = {
LOAD
};
-static void LoadAverageMeter_updateValues(Meter* this, char* buffer, int size) {
+static void LoadAverageMeter_updateValues(Meter* this, char* buffer, size_t size) {
Platform_getLoadAverage(&this->values[0], &this->values[1], &this->values[2]);
xSnprintf(buffer, size, "%.2f/%.2f/%.2f", this->values[0], this->values[1], this->values[2]);
}
@@ -40,7 +40,7 @@ static void LoadAverageMeter_display(const Object* cast, RichString* out) {
RichString_append(out, CRT_colors[LOAD_AVERAGE_FIFTEEN], buffer);
}
-static void LoadMeter_updateValues(Meter* this, char* buffer, int size) {
+static void LoadMeter_updateValues(Meter* this, char* buffer, size_t size) {
double five, fifteen;
Platform_getLoadAverage(&this->values[0], &five, &fifteen);
if (this->values[0] > this->total) {
diff --git a/MemoryMeter.c b/MemoryMeter.c
index 3d29ddf4..9830bf51 100644
--- a/MemoryMeter.c
+++ b/MemoryMeter.c
@@ -19,17 +19,16 @@ static const int MemoryMeter_attributes[] = {
MEMORY_CACHE
};
-static void MemoryMeter_updateValues(Meter* this, char* buffer, int size) {
+static void MemoryMeter_updateValues(Meter* this, char* buffer, size_t size) {
int written;
Platform_setMemoryValues(this);
written = Meter_humanUnit(buffer, this->values[0], size);
- buffer += written;
- if ((size -= written) > 0) {
- *buffer++ = '/';
- size--;
- Meter_humanUnit(buffer, this->total, size);
- }
+ METER_BUFFER_CHECK(buffer, size, written);
+
+ METER_BUFFER_APPEND_CHR(buffer, size, '/');
+
+ Meter_humanUnit(buffer, this->total, size);
}
static void MemoryMeter_display(const Object* cast, RichString* out) {
diff --git a/Meter.c b/Meter.c
index 71457d4d..945911c9 100644
--- a/Meter.c
+++ b/Meter.c
@@ -49,7 +49,7 @@ Meter* Meter_new(const struct ProcessList_* pl, int param, const MeterClass* typ
return this;
}
-int Meter_humanUnit(char* buffer, unsigned long int value, int size) {
+int Meter_humanUnit(char* buffer, unsigned long int value, size_t size) {
const char* prefix = "KMGTPEZY";
unsigned long int powi = 1;
unsigned int powj = 1, precision = 2;
@@ -155,7 +155,7 @@ ListItem* Meter_toListItem(Meter* this, bool moving) {
static void TextMeterMode_draw(Meter* this, int x, int y, int w) {
char buffer[METER_BUFFER_LEN];
- Meter_updateValues(this, buffer, METER_BUFFER_LEN - 1);
+ Meter_updateValues(this, buffer, sizeof(buffer));
(void) w;
attrset(CRT_colors[METER_TEXT]);
@@ -175,7 +175,7 @@ static const char BarMeterMode_characters[] = "|#*@$%&.";
static void BarMeterMode_draw(Meter* this, int x, int y, int w) {
char buffer[METER_BUFFER_LEN];
- Meter_updateValues(this, buffer, METER_BUFFER_LEN - 1);
+ Meter_updateValues(this, buffer, sizeof(buffer));
w -= 2;
attrset(CRT_colors[METER_TEXT]);
@@ -309,8 +309,8 @@ static void GraphMeterMode_draw(Meter* this, int x, int y, int w) {
for (int i = 0; i < nValues - 1; i++)
data->values[i] = data->values[i + 1];
- char buffer[nValues];
- Meter_updateValues(this, buffer, nValues - 1);
+ char buffer[METER_BUFFER_LEN];
+ Meter_updateValues(this, buffer, sizeof(buffer));
double value = 0.0;
for (uint8_t i = 0; i < this->curItems; i++)
@@ -378,7 +378,7 @@ static void LEDMeterMode_draw(Meter* this, int x, int y, int w) {
LEDMeterMode_digits = LEDMeterMode_digitsAscii;
char buffer[METER_BUFFER_LEN];
- Meter_updateValues(this, buffer, METER_BUFFER_LEN - 1);
+ Meter_updateValues(this, buffer, sizeof(buffer));
RichString_begin(out);
Meter_displayBuffer(this, buffer, &out);
@@ -441,8 +441,7 @@ const MeterMode* const Meter_modes[] = {
/* Blank meter */
-static void BlankMeter_updateValues(Meter* this, char* buffer, int size) {
- (void) this; (void) buffer; (void) size;
+static void BlankMeter_updateValues(ATTR_UNUSED Meter* this, char* buffer, size_t size) {
if (size > 0) {
*buffer = 0;
}
diff --git a/Meter.h b/Meter.h
index 43518e52..cb054057 100644
--- a/Meter.h
+++ b/Meter.h
@@ -20,13 +20,36 @@ in the source distribution for its full text.
#define METER_BUFFER_LEN 256
+#define METER_BUFFER_CHECK(buffer, size, written) \
+ do { \
+ if ((written) < 0 || (size_t)(written) >= (size)) { \
+ return; \
+ } \
+ (buffer) += (written); \
+ (size) -= (size_t)(written); \
+ } while (0)
+
+#define METER_BUFFER_APPEND_CHR(buffer, size, c) \
+ do { \
+ if ((size) < 2) { \
+ return; \
+ } \
+ *(buffer)++ = c; \
+ *(buffer) = '\0'; \
+ (size)--; \
+ if ((size) == 0) { \
+ return; \
+ } \
+ } while (0)
+
+
struct Meter_;
typedef struct Meter_ Meter;
typedef void(*Meter_Init)(Meter*);
typedef void(*Meter_Done)(Meter*);
typedef void(*Meter_UpdateMode)(Meter*, int);
-typedef void(*Meter_UpdateValues)(Meter*, char*, int);
+typedef void(*Meter_UpdateValues)(Meter*, char*, size_t);
typedef void(*Meter_Draw)(Meter*, int, int, int);
typedef struct MeterClass_ {
@@ -101,7 +124,7 @@ extern const MeterClass Meter_class;
Meter* Meter_new(const ProcessList* pl, int param, const MeterClass* type);
-int Meter_humanUnit(char* buffer, unsigned long int value, int size);
+int Meter_humanUnit(char* buffer, unsigned long int value, size_t size);
void Meter_delete(Object* cast);
diff --git a/NetworkIOMeter.c b/NetworkIOMeter.c
index a28738a2..90ec9909 100644
--- a/NetworkIOMeter.c
+++ b/NetworkIOMeter.c
@@ -24,7 +24,7 @@ static unsigned long int cached_rxp_diff = 0;
static unsigned long int cached_txb_diff = 0;
static unsigned long int cached_txp_diff = 0;
-static void NetworkIOMeter_updateValues(ATTR_UNUSED Meter* this, char* buffer, int len) {
+static void NetworkIOMeter_updateValues(ATTR_UNUSED Meter* this, char* buffer, size_t len) {
static unsigned long long int cached_last_update = 0;
struct timeval tv;
diff --git a/Process.c b/Process.c
index 7ea2c4af..8245f86d 100644
--- a/Process.c
+++ b/Process.c
@@ -223,7 +223,7 @@ static inline void Process_writeCommand(const Process* this, int attr, int basea
}
}
-void Process_outputRate(RichString* str, char* buffer, int n, double rate, int coloring) {
+void Process_outputRate(RichString* str, char* buffer, size_t n, double rate, int coloring) {
int largeNumberColor = CRT_colors[LARGE_NUMBER];
int processMegabytesColor = CRT_colors[PROCESS_MEGABYTES];
int processColor = CRT_colors[PROCESS];
@@ -258,7 +258,7 @@ void Process_writeField(const Process* this, RichString* str, ProcessField field
char buffer[256]; buffer[255] = '\0';
int attr = CRT_colors[DEFAULT_COLOR];
int baseattr = CRT_colors[PROCESS_BASENAME];
- int n = sizeof(buffer) - 1;
+ size_t n = sizeof(buffer) - 1;
bool coloring = this->settings->highlightMegabytes;
switch (field) {
@@ -312,7 +312,7 @@ void Process_writeField(const Process* this, RichString* str, ProcessField field
} else {
ret = snprintf(buf, n, " ");
}
- if (ret < 0 || ret >= n) {
+ if (ret < 0 || (size_t)ret >= n) {
written = n;
} else {
written = ret;
diff --git a/Process.h b/Process.h
index 7a68c69f..48e31b1d 100644
--- a/Process.h
+++ b/Process.h
@@ -176,7 +176,7 @@ void Process_printTime(RichString* str, unsigned long long totalHundredths);
void Process_fillStarttimeBuffer(Process* this);
-void Process_outputRate(RichString* str, char* buffer, int n, double rate, int coloring);
+void Process_outputRate(RichString* str, char* buffer, size_t n, double rate, int coloring);
void Process_display(const Object* cast, RichString* out);
diff --git a/SwapMeter.c b/SwapMeter.c
index 9de7fa35..8e39c752 100644
--- a/SwapMeter.c
+++ b/SwapMeter.c
@@ -17,17 +17,16 @@ static const int SwapMeter_attributes[] = {
SWAP
};
-static void SwapMeter_updateValues(Meter* this, char* buffer, int size) {
+static void SwapMeter_updateValues(Meter* this, char* buffer, size_t size) {
int written;
Platform_setSwapValues(this);
written = Meter_humanUnit(buffer, this->values[0], size);
- buffer += written;
- if ((size -= written) > 0) {
- *buffer++ = '/';
- size--;
- Meter_humanUnit(buffer, this->total, size);
- }
+ METER_BUFFER_CHECK(buffer, size, written);
+
+ METER_BUFFER_APPEND_CHR(buffer, size, '/');
+
+ Meter_humanUnit(buffer, this->total, size);
}
static void SwapMeter_display(const Object* cast, RichString* out) {
diff --git a/TasksMeter.c b/TasksMeter.c
index 562cc8fc..7696988a 100644
--- a/TasksMeter.c
+++ b/TasksMeter.c
@@ -23,7 +23,7 @@ static const int TasksMeter_attributes[] = {
TASKS_RUNNING
};
-static void TasksMeter_updateValues(Meter* this, char* buffer, int len) {
+static void TasksMeter_updateValues(Meter* this, char* buffer, size_t len) {
const ProcessList* pl = this->pl;
this->values[0] = pl->kernelThreads;
this->values[1] = pl->userlandThreads;
diff --git a/UptimeMeter.c b/UptimeMeter.c
index 79070286..37740c21 100644
--- a/UptimeMeter.c
+++ b/UptimeMeter.c
@@ -17,7 +17,7 @@ static const int UptimeMeter_attributes[] = {
UPTIME
};
-static void UptimeMeter_updateValues(Meter* this, char* buffer, int len) {
+static void UptimeMeter_updateValues(Meter* this, char* buffer, size_t len) {
int totalseconds = Platform_getUptime();
if (totalseconds == -1) {
xSnprintf(buffer, len, "(unknown)");
diff --git a/XUtils.c b/XUtils.c
index 743d98bf..cd5edb91 100644
--- a/XUtils.c
+++ b/XUtils.c
@@ -184,13 +184,13 @@ int xAsprintf(char** strp, const char* fmt, ...) {
return r;
}
-int xSnprintf(char* buf, int len, const char* fmt, ...) {
+int xSnprintf(char* buf, size_t len, const char* fmt, ...) {
va_list vl;
va_start(vl, fmt);
int n = vsnprintf(buf, len, fmt, vl);
va_end(vl);
- if (n < 0 || n >= len) {
+ if (n < 0 || (size_t)n >= len) {
fail();
}
diff --git a/XUtils.h b/XUtils.h
index e0aeebe2..19cfadb3 100644
--- a/XUtils.h
+++ b/XUtils.h
@@ -59,7 +59,7 @@ ATTR_FORMAT(printf, 2, 3)
int xAsprintf(char** strp, const char* fmt, ...);
ATTR_FORMAT(printf, 3, 4)
-int xSnprintf(char* buf, int len, const char* fmt, ...);
+int xSnprintf(char* buf, size_t len, const char* fmt, ...);
char* xStrdup(const char* str) ATTR_NONNULL;
diff --git a/linux/LinuxProcess.c b/linux/LinuxProcess.c
index f51cf1e3..8298000a 100644
--- a/linux/LinuxProcess.c
+++ b/linux/LinuxProcess.c
@@ -618,7 +618,7 @@ static void LinuxProcess_writeField(const Process* this, RichString* str, Proces
bool coloring = this->settings->highlightMegabytes;
char buffer[256]; buffer[255] = '\0';
int attr = CRT_colors[DEFAULT_COLOR];
- int n = sizeof(buffer) - 1;
+ size_t n = sizeof(buffer) - 1;
switch ((int)field) {
case TTY_NR: {
if (lp->ttyDevice) {
diff --git a/linux/PressureStallMeter.c b/linux/PressureStallMeter.c
index d2fd7d37..745068c9 100644
--- a/linux/PressureStallMeter.c
+++ b/linux/PressureStallMeter.c
@@ -25,7 +25,7 @@ static const int PressureStallMeter_attributes[] = {
PRESSURE_STALL_THREEHUNDRED
};
-static void PressureStallMeter_updateValues(Meter* this, char* buffer, int len) {
+static void PressureStallMeter_updateValues(Meter* this, char* buffer, size_t len) {
const char* file;
if (strstr(Meter_name(this), "CPU")) {
file = "cpu";
diff --git a/linux/SELinuxMeter.c b/linux/SELinuxMeter.c
index a8b07bd3..64a3f2a7 100644
--- a/linux/SELinuxMeter.c
+++ b/linux/SELinuxMeter.c
@@ -70,7 +70,7 @@ static bool isSelinuxEnforcing(void) {
return !!enforce;
}
-static void SELinuxMeter_updateValues(ATTR_UNUSED Meter* this, char* buffer, int len) {
+static void SELinuxMeter_updateValues(ATTR_UNUSED Meter* this, char* buffer, size_t len) {
enabled = isSelinuxEnabled();
enforcing = isSelinuxEnforcing();
diff --git a/linux/SystemdMeter.c b/linux/SystemdMeter.c
index d49185ee..4350d264 100644
--- a/linux/SystemdMeter.c
+++ b/linux/SystemdMeter.c
@@ -229,7 +229,7 @@ static void updateViaExec(void) {
fclose(commandOutput);
}
-static void SystemdMeter_updateValues(ATTR_UNUSED Meter* this, char* buffer, int size) {
+static void SystemdMeter_updateValues(ATTR_UNUSED Meter* this, char* buffer, size_t size) {
free(systemState);
systemState = NULL;
nFailedUnits = nInstalledJobs = nNames = nJobs = INVALID_VALUE;
diff --git a/linux/ZramMeter.c b/linux/ZramMeter.c
index cee70586..e6b6937e 100644
--- a/linux/ZramMeter.c
+++ b/linux/ZramMeter.c
@@ -11,7 +11,7 @@ static const int ZramMeter_attributes[] = {
ZRAM
};
-static void ZramMeter_updateValues(Meter* this, char* buffer, int size) {
+static void ZramMeter_updateValues(Meter* this, char* buffer, size_t size) {
int written;
Platform_setZramValues(this);
@@ -20,29 +20,18 @@ static void ZramMeter_updateValues(Meter* this, char* buffer, int size) {
this->curItems = 1;
written = Meter_humanUnit(buffer, this->values[0], size);
- buffer += written;
- size -= written;
- if (size <= 0) {
- return;
- }
- *buffer++ = '(';
- size--;
- if (size <= 0) {
- return;
- }
+ METER_BUFFER_CHECK(buffer, size, written);
+
+ METER_BUFFER_APPEND_CHR(buffer, size, '(');
+
written = Meter_humanUnit(buffer, this->values[1], size);
- buffer += written;
- size -= written;
- if (size <= 0) {
- return;
- }
- *buffer++ = ')';
- size--;
- if ((size -= written) > 0) {
- *buffer++ = '/';
- size--;
- Meter_humanUnit(buffer, this->total, size);
- }
+ METER_BUFFER_CHECK(buffer, size, written);
+
+ METER_BUFFER_APPEND_CHR(buffer, size, ')');
+
+ METER_BUFFER_APPEND_CHR(buffer, size, '/');
+
+ Meter_humanUnit(buffer, this->total, size);
}
static void ZramMeter_display(const Object* cast, RichString* out) {
diff --git a/zfs/ZfsArcMeter.c b/zfs/ZfsArcMeter.c
index 9bfc44b7..e844d779 100644
--- a/zfs/ZfsArcMeter.c
+++ b/zfs/ZfsArcMeter.c
@@ -33,17 +33,16 @@ void ZfsArcMeter_readStats(Meter* this, const ZfsArcStats* stats) {
this->values[5] = stats->size;
}
-static void ZfsArcMeter_updateValues(Meter* this, char* buffer, int size) {
+static void ZfsArcMeter_updateValues(Meter* this, char* buffer, size_t size) {
int written;
Platform_setZfsArcValues(this);
written = Meter_humanUnit(buffer, this->values[5], size);
- buffer += written;
- if ((size -= written) > 0) {
- *buffer++ = '/';
- size--;
- Meter_humanUnit(buffer, this->total, size);
- }
+ METER_BUFFER_CHECK(buffer, size, written);
+
+ METER_BUFFER_APPEND_CHR(buffer, size, '/');
+
+ Meter_humanUnit(buffer, this->total, size);
}
static void ZfsArcMeter_display(const Object* cast, RichString* out) {
diff --git a/zfs/ZfsCompressedArcMeter.c b/zfs/ZfsCompressedArcMeter.c
index 31773664..8766f801 100644
--- a/zfs/ZfsCompressedArcMeter.c
+++ b/zfs/ZfsCompressedArcMeter.c
@@ -32,11 +32,11 @@ void ZfsCompressedArcMeter_readStats(Meter* this, const ZfsArcStats* stats) {
}
}
-static void ZfsCompressedArcMeter_printRatioString(const Meter* this, char* buffer, int size) {
+static void ZfsCompressedArcMeter_printRatioString(const Meter* this, char* buffer, size_t size) {
xSnprintf(buffer, size, "%.2f:1", this->total / this->values[0]);
}
-static void ZfsCompressedArcMeter_updateValues(Meter* this, char* buffer, int size) {
+static void ZfsCompressedArcMeter_updateValues(Meter* this, char* buffer, size_t size) {
Platform_setZfsCompressedArcValues(this);
ZfsCompressedArcMeter_printRatioString(this, buffer, size);

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