From 65357c8c46154de4e4eca14075bfe5523bb5fc14 Mon Sep 17 00:00:00 2001 From: Daniel Lange Date: Mon, 7 Dec 2020 10:26:01 +0100 Subject: New upstream version 3.0.3 --- Meter.h | 85 +++++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 28 deletions(-) (limited to 'Meter.h') diff --git a/Meter.h b/Meter.h index c4d0039..cb05405 100644 --- a/Meter.h +++ b/Meter.h @@ -3,25 +3,57 @@ /* htop - Meter.h (C) 2004-2011 Hisham H. Muhammad -Released under the GNU GPL, see the COPYING file +Released under the GNU GPLv2, see the COPYING file in the source distribution for its full text. */ -#include "ListItem.h" +#include "config.h" // IWYU pragma: keep + +#include +#include #include +#include "ListItem.h" +#include "Object.h" +#include "ProcessList.h" + + #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_ { - ObjectClass super; + const ObjectClass super; const Meter_Init init; const Meter_Done done; const Meter_UpdateMode updateMode; @@ -29,16 +61,15 @@ typedef struct MeterClass_ { const Meter_UpdateValues updateValues; const int defaultMode; const double total; - const int* attributes; - const char* name; - const char* uiName; - const char* caption; - const char* description; - const char maxItems; - char curItems; + const int* const attributes; + const char* const name; /* internal name of the meter, must not contain any space */ + const char* const uiName; /* display name in header setup menu */ + const char* const caption; /* prefix in the actual header */ + const char* const description; /* optional meter description in header setup menu */ + const uint8_t maxItems; } MeterClass; -#define As_Meter(this_) ((MeterClass*)((this_)->super.klass)) +#define As_Meter(this_) ((const MeterClass*)((this_)->super.klass)) #define Meter_initFn(this_) As_Meter(this_)->init #define Meter_init(this_) As_Meter(this_)->init((Meter*)(this_)) #define Meter_done(this_) As_Meter(this_)->done((Meter*)(this_)) @@ -49,12 +80,15 @@ typedef struct MeterClass_ { #define Meter_updateValues(this_, buf_, sz_) \ As_Meter(this_)->updateValues((Meter*)(this_), buf_, sz_) #define Meter_defaultMode(this_) As_Meter(this_)->defaultMode -#define Meter_getItems(this_) As_Meter(this_)->curItems -#define Meter_setItems(this_, n_) As_Meter(this_)->curItems = (n_) #define Meter_attributes(this_) As_Meter(this_)->attributes #define Meter_name(this_) As_Meter(this_)->name #define Meter_uiName(this_) As_Meter(this_)->uiName +typedef struct GraphData_ { + struct timeval time; + double values[METER_BUFFER_LEN]; +} GraphData; + struct Meter_ { Object super; Meter_Draw draw; @@ -62,11 +96,13 @@ struct Meter_ { char* caption; int mode; int param; - void* drawData; + GraphData* drawData; int h; - struct ProcessList_* pl; + const ProcessList* pl; + uint8_t curItems; double* values; double total; + void* meterData; }; typedef struct MeterMode_ { @@ -84,16 +120,11 @@ typedef enum { LAST_METERMODE } MeterModeId; -typedef struct GraphData_ { - struct timeval time; - double values[METER_BUFFER_LEN]; -} GraphData; - -extern MeterClass Meter_class; +extern const MeterClass Meter_class; -Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type); +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); @@ -103,10 +134,8 @@ void Meter_setMode(Meter* this, int modeIndex); ListItem* Meter_toListItem(Meter* this, bool moving); -extern MeterMode* Meter_modes[]; - -extern int BlankMeter_attributes[]; +extern const MeterMode* const Meter_modes[]; -extern MeterClass BlankMeter_class; +extern const MeterClass BlankMeter_class; #endif -- cgit v1.2.3