mirror of https://github.com/xzeldon/htop.git
Security review: check results of snprintf.
Calls marked with xSnprintf shouldn't fail. Abort program cleanly if any of them does.
This commit is contained in:
parent
3975e9ce5c
commit
09e241fb12
|
@ -52,7 +52,7 @@ Panel* AffinityPanel_new(ProcessList* pl, Affinity* affinity) {
|
||||||
int curCpu = 0;
|
int curCpu = 0;
|
||||||
for (int i = 0; i < pl->cpuCount; i++) {
|
for (int i = 0; i < pl->cpuCount; i++) {
|
||||||
char number[10];
|
char number[10];
|
||||||
snprintf(number, 9, "%d", Settings_cpuId(pl->settings, i));
|
xSnprintf(number, 9, "%d", Settings_cpuId(pl->settings, i));
|
||||||
bool mode;
|
bool mode;
|
||||||
if (curCpu < affinity->used && affinity->cpus[curCpu] == i) {
|
if (curCpu < affinity->used && affinity->cpus[curCpu] == i) {
|
||||||
mode = true;
|
mode = true;
|
||||||
|
|
|
@ -81,7 +81,7 @@ AvailableColumnsPanel* AvailableColumnsPanel_new(Panel* columns) {
|
||||||
for (int i = 1; i < Platform_numberOfFields; i++) {
|
for (int i = 1; i < Platform_numberOfFields; i++) {
|
||||||
if (i != COMM && Process_fields[i].description) {
|
if (i != COMM && Process_fields[i].description) {
|
||||||
char description[256];
|
char description[256];
|
||||||
snprintf(description, sizeof(description), "%s - %s", Process_fields[i].name, Process_fields[i].description);
|
xSnprintf(description, sizeof(description), "%s - %s", Process_fields[i].name, Process_fields[i].description);
|
||||||
Panel_add(super, (Object*) ListItem_new(description, i));
|
Panel_add(super, (Object*) ListItem_new(description, i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,7 @@ AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Header* heade
|
||||||
Panel_add(super, (Object*) ListItem_new("CPU average", 0));
|
Panel_add(super, (Object*) ListItem_new("CPU average", 0));
|
||||||
for (int i = 1; i <= cpus; i++) {
|
for (int i = 1; i <= cpus; i++) {
|
||||||
char buffer[50];
|
char buffer[50];
|
||||||
snprintf(buffer, 50, "%s %d", type->uiName, i);
|
xSnprintf(buffer, 50, "%s %d", type->uiName, i);
|
||||||
Panel_add(super, (Object*) ListItem_new(buffer, i));
|
Panel_add(super, (Object*) ListItem_new(buffer, i));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -40,7 +40,7 @@ static void BatteryMeter_updateValues(Meter * this, char *buffer, int len) {
|
||||||
|
|
||||||
if (percent == -1) {
|
if (percent == -1) {
|
||||||
this->values[0] = 0;
|
this->values[0] = 0;
|
||||||
snprintf(buffer, len, "n/a");
|
xSnprintf(buffer, len, "n/a");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,11 +58,11 @@ static void BatteryMeter_updateValues(Meter * this, char *buffer, int len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isOnAC == AC_PRESENT) {
|
if (isOnAC == AC_PRESENT) {
|
||||||
snprintf(buffer, len, onAcText, percent);
|
xSnprintf(buffer, len, onAcText, percent);
|
||||||
} else if (isOnAC == AC_ABSENT) {
|
} else if (isOnAC == AC_ABSENT) {
|
||||||
snprintf(buffer, len, onBatteryText, percent);
|
xSnprintf(buffer, len, onBatteryText, percent);
|
||||||
} else {
|
} else {
|
||||||
snprintf(buffer, len, unknownText, percent);
|
xSnprintf(buffer, len, unknownText, percent);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
28
CPUMeter.c
28
CPUMeter.c
|
@ -48,7 +48,7 @@ static void CPUMeter_init(Meter* this) {
|
||||||
int cpu = this->param;
|
int cpu = this->param;
|
||||||
if (this->pl->cpuCount > 1) {
|
if (this->pl->cpuCount > 1) {
|
||||||
char caption[10];
|
char caption[10];
|
||||||
snprintf(caption, sizeof(caption), "%-3d", Settings_cpuId(this->pl->settings, cpu - 1));
|
xSnprintf(caption, sizeof(caption), "%-3d", Settings_cpuId(this->pl->settings, cpu - 1));
|
||||||
Meter_setCaption(this, caption);
|
Meter_setCaption(this, caption);
|
||||||
}
|
}
|
||||||
if (this->param == 0)
|
if (this->param == 0)
|
||||||
|
@ -58,12 +58,12 @@ static void CPUMeter_init(Meter* this) {
|
||||||
static void CPUMeter_updateValues(Meter* this, char* buffer, int size) {
|
static void CPUMeter_updateValues(Meter* this, char* buffer, int size) {
|
||||||
int cpu = this->param;
|
int cpu = this->param;
|
||||||
if (cpu > this->pl->cpuCount) {
|
if (cpu > this->pl->cpuCount) {
|
||||||
snprintf(buffer, size, "absent");
|
xSnprintf(buffer, size, "absent");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
memset(this->values, 0, sizeof(double) * CPU_METER_ITEMCOUNT);
|
memset(this->values, 0, sizeof(double) * CPU_METER_ITEMCOUNT);
|
||||||
double percent = Platform_setCPUValues(this, cpu);
|
double percent = Platform_setCPUValues(this, cpu);
|
||||||
snprintf(buffer, size, "%5.1f%%", percent);
|
xSnprintf(buffer, size, "%5.1f%%", percent);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CPUMeter_display(Object* cast, RichString* out) {
|
static void CPUMeter_display(Object* cast, RichString* out) {
|
||||||
|
@ -74,44 +74,44 @@ static void CPUMeter_display(Object* cast, RichString* out) {
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "absent");
|
RichString_append(out, CRT_colors[METER_TEXT], "absent");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NORMAL]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NORMAL]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], ":");
|
RichString_append(out, CRT_colors[METER_TEXT], ":");
|
||||||
RichString_append(out, CRT_colors[CPU_NORMAL], buffer);
|
RichString_append(out, CRT_colors[CPU_NORMAL], buffer);
|
||||||
if (this->pl->settings->detailedCPUTime) {
|
if (this->pl->settings->detailedCPUTime) {
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_KERNEL]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_KERNEL]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "sy:");
|
RichString_append(out, CRT_colors[METER_TEXT], "sy:");
|
||||||
RichString_append(out, CRT_colors[CPU_KERNEL], buffer);
|
RichString_append(out, CRT_colors[CPU_KERNEL], buffer);
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NICE]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NICE]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "ni:");
|
RichString_append(out, CRT_colors[METER_TEXT], "ni:");
|
||||||
RichString_append(out, CRT_colors[CPU_NICE_TEXT], buffer);
|
RichString_append(out, CRT_colors[CPU_NICE_TEXT], buffer);
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IRQ]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IRQ]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "hi:");
|
RichString_append(out, CRT_colors[METER_TEXT], "hi:");
|
||||||
RichString_append(out, CRT_colors[CPU_IRQ], buffer);
|
RichString_append(out, CRT_colors[CPU_IRQ], buffer);
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_SOFTIRQ]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_SOFTIRQ]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "si:");
|
RichString_append(out, CRT_colors[METER_TEXT], "si:");
|
||||||
RichString_append(out, CRT_colors[CPU_SOFTIRQ], buffer);
|
RichString_append(out, CRT_colors[CPU_SOFTIRQ], buffer);
|
||||||
if (this->values[CPU_METER_STEAL]) {
|
if (this->values[CPU_METER_STEAL]) {
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_STEAL]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_STEAL]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "st:");
|
RichString_append(out, CRT_colors[METER_TEXT], "st:");
|
||||||
RichString_append(out, CRT_colors[CPU_STEAL], buffer);
|
RichString_append(out, CRT_colors[CPU_STEAL], buffer);
|
||||||
}
|
}
|
||||||
if (this->values[CPU_METER_GUEST]) {
|
if (this->values[CPU_METER_GUEST]) {
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_GUEST]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_GUEST]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "gu:");
|
RichString_append(out, CRT_colors[METER_TEXT], "gu:");
|
||||||
RichString_append(out, CRT_colors[CPU_GUEST], buffer);
|
RichString_append(out, CRT_colors[CPU_GUEST], buffer);
|
||||||
}
|
}
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IOWAIT]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IOWAIT]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "wa:");
|
RichString_append(out, CRT_colors[METER_TEXT], "wa:");
|
||||||
RichString_append(out, CRT_colors[CPU_IOWAIT], buffer);
|
RichString_append(out, CRT_colors[CPU_IOWAIT], buffer);
|
||||||
} else {
|
} else {
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_KERNEL]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_KERNEL]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "sys:");
|
RichString_append(out, CRT_colors[METER_TEXT], "sys:");
|
||||||
RichString_append(out, CRT_colors[CPU_KERNEL], buffer);
|
RichString_append(out, CRT_colors[CPU_KERNEL], buffer);
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NICE]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NICE]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "low:");
|
RichString_append(out, CRT_colors[METER_TEXT], "low:");
|
||||||
RichString_append(out, CRT_colors[CPU_NICE_TEXT], buffer);
|
RichString_append(out, CRT_colors[CPU_NICE_TEXT], buffer);
|
||||||
if (this->values[CPU_METER_IRQ]) {
|
if (this->values[CPU_METER_IRQ]) {
|
||||||
snprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IRQ]);
|
xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IRQ]);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "vir:");
|
RichString_append(out, CRT_colors[METER_TEXT], "vir:");
|
||||||
RichString_append(out, CRT_colors[CPU_GUEST], buffer);
|
RichString_append(out, CRT_colors[CPU_GUEST], buffer);
|
||||||
}
|
}
|
||||||
|
|
6
Header.c
6
Header.c
|
@ -91,9 +91,9 @@ void Header_writeBackToSettings(const Header* this) {
|
||||||
Meter* meter = (Meter*) Vector_get(vec, i);
|
Meter* meter = (Meter*) Vector_get(vec, i);
|
||||||
char* name = xCalloc(64, sizeof(char));
|
char* name = xCalloc(64, sizeof(char));
|
||||||
if (meter->param) {
|
if (meter->param) {
|
||||||
snprintf(name, 63, "%s(%d)", As_Meter(meter)->name, meter->param);
|
xSnprintf(name, 63, "%s(%d)", As_Meter(meter)->name, meter->param);
|
||||||
} else {
|
} else {
|
||||||
snprintf(name, 63, "%s", As_Meter(meter)->name);
|
xSnprintf(name, 63, "%s", As_Meter(meter)->name);
|
||||||
}
|
}
|
||||||
colSettings->names[i] = name;
|
colSettings->names[i] = name;
|
||||||
colSettings->modes[i] = meter->mode;
|
colSettings->modes[i] = meter->mode;
|
||||||
|
@ -155,7 +155,7 @@ char* Header_readMeterName(Header* this, int i, int column) {
|
||||||
strncpy(name, Meter_name(meter), nameLen);
|
strncpy(name, Meter_name(meter), nameLen);
|
||||||
name[nameLen] = '\0';
|
name[nameLen] = '\0';
|
||||||
if (meter->param)
|
if (meter->param)
|
||||||
snprintf(name + nameLen, len - nameLen, "(%d)", meter->param);
|
xSnprintf(name + nameLen, len - nameLen, "(%d)", meter->param);
|
||||||
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ static void ListItem_display(Object* cast, RichString* out) {
|
||||||
/*
|
/*
|
||||||
int len = strlen(this->value)+1;
|
int len = strlen(this->value)+1;
|
||||||
char buffer[len+1];
|
char buffer[len+1];
|
||||||
snprintf(buffer, len, "%s", this->value);
|
xSnprintf(buffer, len, "%s", this->value);
|
||||||
*/
|
*/
|
||||||
if (this->moving) {
|
if (this->moving) {
|
||||||
RichString_write(out, CRT_colors[DEFAULT_COLOR],
|
RichString_write(out, CRT_colors[DEFAULT_COLOR],
|
||||||
|
|
|
@ -22,17 +22,17 @@ int LoadMeter_attributes[] = { LOAD };
|
||||||
|
|
||||||
static void LoadAverageMeter_updateValues(Meter* this, char* buffer, int size) {
|
static void LoadAverageMeter_updateValues(Meter* this, char* buffer, int size) {
|
||||||
Platform_getLoadAverage(&this->values[0], &this->values[1], &this->values[2]);
|
Platform_getLoadAverage(&this->values[0], &this->values[1], &this->values[2]);
|
||||||
snprintf(buffer, size, "%.2f/%.2f/%.2f", this->values[0], this->values[1], this->values[2]);
|
xSnprintf(buffer, size, "%.2f/%.2f/%.2f", this->values[0], this->values[1], this->values[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LoadAverageMeter_display(Object* cast, RichString* out) {
|
static void LoadAverageMeter_display(Object* cast, RichString* out) {
|
||||||
Meter* this = (Meter*)cast;
|
Meter* this = (Meter*)cast;
|
||||||
char buffer[20];
|
char buffer[20];
|
||||||
snprintf(buffer, sizeof(buffer), "%.2f ", this->values[0]);
|
xSnprintf(buffer, sizeof(buffer), "%.2f ", this->values[0]);
|
||||||
RichString_write(out, CRT_colors[LOAD_AVERAGE_ONE], buffer);
|
RichString_write(out, CRT_colors[LOAD_AVERAGE_ONE], buffer);
|
||||||
snprintf(buffer, sizeof(buffer), "%.2f ", this->values[1]);
|
xSnprintf(buffer, sizeof(buffer), "%.2f ", this->values[1]);
|
||||||
RichString_append(out, CRT_colors[LOAD_AVERAGE_FIVE], buffer);
|
RichString_append(out, CRT_colors[LOAD_AVERAGE_FIVE], buffer);
|
||||||
snprintf(buffer, sizeof(buffer), "%.2f ", this->values[2]);
|
xSnprintf(buffer, sizeof(buffer), "%.2f ", this->values[2]);
|
||||||
RichString_append(out, CRT_colors[LOAD_AVERAGE_FIFTEEN], buffer);
|
RichString_append(out, CRT_colors[LOAD_AVERAGE_FIFTEEN], buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,13 +42,13 @@ static void LoadMeter_updateValues(Meter* this, char* buffer, int size) {
|
||||||
if (this->values[0] > this->total) {
|
if (this->values[0] > this->total) {
|
||||||
this->total = this->values[0];
|
this->total = this->values[0];
|
||||||
}
|
}
|
||||||
snprintf(buffer, size, "%.2f", this->values[0]);
|
xSnprintf(buffer, size, "%.2f", this->values[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void LoadMeter_display(Object* cast, RichString* out) {
|
static void LoadMeter_display(Object* cast, RichString* out) {
|
||||||
Meter* this = (Meter*)cast;
|
Meter* this = (Meter*)cast;
|
||||||
char buffer[20];
|
char buffer[20];
|
||||||
snprintf(buffer, sizeof(buffer), "%.2f ", ((Meter*)this)->values[0]);
|
xSnprintf(buffer, sizeof(buffer), "%.2f ", ((Meter*)this)->values[0]);
|
||||||
RichString_write(out, CRT_colors[LOAD], buffer);
|
RichString_write(out, CRT_colors[LOAD], buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
8
Meter.c
8
Meter.c
|
@ -225,16 +225,16 @@ void Meter_setMode(Meter* this, int modeIndex) {
|
||||||
ListItem* Meter_toListItem(Meter* this, bool moving) {
|
ListItem* Meter_toListItem(Meter* this, bool moving) {
|
||||||
char mode[21];
|
char mode[21];
|
||||||
if (this->mode)
|
if (this->mode)
|
||||||
snprintf(mode, 20, " [%s]", Meter_modes[this->mode]->uiName);
|
xSnprintf(mode, 20, " [%s]", Meter_modes[this->mode]->uiName);
|
||||||
else
|
else
|
||||||
mode[0] = '\0';
|
mode[0] = '\0';
|
||||||
char number[11];
|
char number[11];
|
||||||
if (this->param > 0)
|
if (this->param > 0)
|
||||||
snprintf(number, 10, " %d", this->param);
|
xSnprintf(number, 10, " %d", this->param);
|
||||||
else
|
else
|
||||||
number[0] = '\0';
|
number[0] = '\0';
|
||||||
char buffer[51];
|
char buffer[51];
|
||||||
snprintf(buffer, 50, "%s%s%s", Meter_uiName(this), number, mode);
|
xSnprintf(buffer, 50, "%s%s%s", Meter_uiName(this), number, mode);
|
||||||
ListItem* li = ListItem_new(buffer, 0);
|
ListItem* li = ListItem_new(buffer, 0);
|
||||||
li->moving = moving;
|
li->moving = moving;
|
||||||
return li;
|
return li;
|
||||||
|
@ -287,7 +287,7 @@ static void BarMeterMode_draw(Meter* this, int x, int y, int w) {
|
||||||
|
|
||||||
int blockSizes[10];
|
int blockSizes[10];
|
||||||
|
|
||||||
snprintf(bar, w + 1, "%*s", w, buffer);
|
xSnprintf(bar, w + 1, "%*s", w, buffer);
|
||||||
|
|
||||||
// First draw in the bar[] buffer...
|
// First draw in the bar[] buffer...
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
|
@ -77,7 +77,7 @@ void OpenFilesScreen_draw(InfoScreen* this) {
|
||||||
|
|
||||||
static OpenFiles_ProcessData* OpenFilesScreen_getProcessData(pid_t pid) {
|
static OpenFiles_ProcessData* OpenFilesScreen_getProcessData(pid_t pid) {
|
||||||
char command[1025];
|
char command[1025];
|
||||||
snprintf(command, 1024, "lsof -P -p %d -F 2> /dev/null", pid);
|
xSnprintf(command, 1024, "lsof -P -p %d -F 2> /dev/null", pid);
|
||||||
FILE* fd = popen(command, "r");
|
FILE* fd = popen(command, "r");
|
||||||
OpenFiles_ProcessData* pdata = xCalloc(1, sizeof(OpenFiles_ProcessData));
|
OpenFiles_ProcessData* pdata = xCalloc(1, sizeof(OpenFiles_ProcessData));
|
||||||
OpenFiles_FileData* fdata = NULL;
|
OpenFiles_FileData* fdata = NULL;
|
||||||
|
@ -131,7 +131,7 @@ void OpenFilesScreen_scan(InfoScreen* this) {
|
||||||
int lenN = data['n'] ? strlen(data['n']) : 0;
|
int lenN = data['n'] ? strlen(data['n']) : 0;
|
||||||
int sizeEntry = 5 + 7 + 10 + 10 + 10 + lenN + 5 /*spaces*/ + 1 /*null*/;
|
int sizeEntry = 5 + 7 + 10 + 10 + 10 + lenN + 5 /*spaces*/ + 1 /*null*/;
|
||||||
char* entry = xMalloc(sizeEntry);
|
char* entry = xMalloc(sizeEntry);
|
||||||
snprintf(entry, sizeEntry, "%5.5s %7.7s %10.10s %10.10s %10.10s %s",
|
xSnprintf(entry, sizeEntry, "%5.5s %7.7s %10.10s %10.10s %10.10s %s",
|
||||||
data['f'] ? data['f'] : "",
|
data['f'] ? data['f'] : "",
|
||||||
data['t'] ? data['t'] : "",
|
data['t'] ? data['t'] : "",
|
||||||
data['D'] ? data['D'] : "",
|
data['D'] ? data['D'] : "",
|
||||||
|
|
64
Process.c
64
Process.c
|
@ -195,10 +195,10 @@ void Process_setupColumnWidths() {
|
||||||
assert(digits < 20);
|
assert(digits < 20);
|
||||||
for (int i = 0; Process_pidColumns[i].label; i++) {
|
for (int i = 0; Process_pidColumns[i].label; i++) {
|
||||||
assert(i < 20);
|
assert(i < 20);
|
||||||
snprintf(Process_titleBuffer[i], 20, "%*s ", digits, Process_pidColumns[i].label);
|
xSnprintf(Process_titleBuffer[i], 20, "%*s ", digits, Process_pidColumns[i].label);
|
||||||
Process_fields[Process_pidColumns[i].id].title = Process_titleBuffer[i];
|
Process_fields[Process_pidColumns[i].id].title = Process_titleBuffer[i];
|
||||||
}
|
}
|
||||||
snprintf(Process_pidFormat, sizeof(Process_pidFormat), "%%%dd ", digits);
|
xSnprintf(Process_pidFormat, sizeof(Process_pidFormat), "%%%dd ", digits);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Process_humanNumber(RichString* str, unsigned long number, bool coloring) {
|
void Process_humanNumber(RichString* str, unsigned long number, bool coloring) {
|
||||||
|
@ -266,12 +266,12 @@ void Process_colorNumber(RichString* str, unsigned long long number, bool colori
|
||||||
int len = snprintf(buffer, 13, " no perm ");
|
int len = snprintf(buffer, 13, " no perm ");
|
||||||
RichString_appendn(str, CRT_colors[PROCESS_SHADOW], buffer, len);
|
RichString_appendn(str, CRT_colors[PROCESS_SHADOW], buffer, len);
|
||||||
} else if (number > 10000000000) {
|
} else if (number > 10000000000) {
|
||||||
snprintf(buffer, 13, "%11lld ", number / 1000);
|
xSnprintf(buffer, 13, "%11lld ", number / 1000);
|
||||||
RichString_appendn(str, largeNumberColor, buffer, 5);
|
RichString_appendn(str, largeNumberColor, buffer, 5);
|
||||||
RichString_appendn(str, processMegabytesColor, buffer+5, 3);
|
RichString_appendn(str, processMegabytesColor, buffer+5, 3);
|
||||||
RichString_appendn(str, processColor, buffer+8, 4);
|
RichString_appendn(str, processColor, buffer+8, 4);
|
||||||
} else {
|
} else {
|
||||||
snprintf(buffer, 13, "%11llu ", number);
|
xSnprintf(buffer, 13, "%11llu ", number);
|
||||||
RichString_appendn(str, largeNumberColor, buffer, 2);
|
RichString_appendn(str, largeNumberColor, buffer, 2);
|
||||||
RichString_appendn(str, processMegabytesColor, buffer+2, 3);
|
RichString_appendn(str, processMegabytesColor, buffer+2, 3);
|
||||||
RichString_appendn(str, processColor, buffer+5, 3);
|
RichString_appendn(str, processColor, buffer+5, 3);
|
||||||
|
@ -288,15 +288,15 @@ void Process_printTime(RichString* str, unsigned long long totalHundredths) {
|
||||||
int hundredths = totalHundredths - (totalSeconds * 100);
|
int hundredths = totalHundredths - (totalSeconds * 100);
|
||||||
char buffer[11];
|
char buffer[11];
|
||||||
if (hours >= 100) {
|
if (hours >= 100) {
|
||||||
snprintf(buffer, 10, "%7lluh ", hours);
|
xSnprintf(buffer, 10, "%7lluh ", hours);
|
||||||
RichString_append(str, CRT_colors[LARGE_NUMBER], buffer);
|
RichString_append(str, CRT_colors[LARGE_NUMBER], buffer);
|
||||||
} else {
|
} else {
|
||||||
if (hours) {
|
if (hours) {
|
||||||
snprintf(buffer, 10, "%2lluh", hours);
|
xSnprintf(buffer, 10, "%2lluh", hours);
|
||||||
RichString_append(str, CRT_colors[LARGE_NUMBER], buffer);
|
RichString_append(str, CRT_colors[LARGE_NUMBER], buffer);
|
||||||
snprintf(buffer, 10, "%02d:%02d ", minutes, seconds);
|
xSnprintf(buffer, 10, "%02d:%02d ", minutes, seconds);
|
||||||
} else {
|
} else {
|
||||||
snprintf(buffer, 10, "%2d:%02d.%02d ", minutes, seconds, hundredths);
|
xSnprintf(buffer, 10, "%2d:%02d.%02d ", minutes, seconds, hundredths);
|
||||||
}
|
}
|
||||||
RichString_append(str, CRT_colors[DEFAULT_COLOR], buffer);
|
RichString_append(str, CRT_colors[DEFAULT_COLOR], buffer);
|
||||||
}
|
}
|
||||||
|
@ -368,19 +368,19 @@ void Process_writeField(Process* this, RichString* str, ProcessField field) {
|
||||||
switch (field) {
|
switch (field) {
|
||||||
case PERCENT_CPU: {
|
case PERCENT_CPU: {
|
||||||
if (this->percent_cpu > 999.9) {
|
if (this->percent_cpu > 999.9) {
|
||||||
snprintf(buffer, n, "%4d ", (unsigned int)this->percent_cpu);
|
xSnprintf(buffer, n, "%4d ", (unsigned int)this->percent_cpu);
|
||||||
} else if (this->percent_cpu > 99.9) {
|
} else if (this->percent_cpu > 99.9) {
|
||||||
snprintf(buffer, n, "%3d. ", (unsigned int)this->percent_cpu);
|
xSnprintf(buffer, n, "%3d. ", (unsigned int)this->percent_cpu);
|
||||||
} else {
|
} else {
|
||||||
snprintf(buffer, n, "%4.1f ", this->percent_cpu);
|
xSnprintf(buffer, n, "%4.1f ", this->percent_cpu);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PERCENT_MEM: {
|
case PERCENT_MEM: {
|
||||||
if (this->percent_mem > 99.9) {
|
if (this->percent_mem > 99.9) {
|
||||||
snprintf(buffer, n, "100. ");
|
xSnprintf(buffer, n, "100. ");
|
||||||
} else {
|
} else {
|
||||||
snprintf(buffer, n, "%4.1f ", this->percent_mem);
|
xSnprintf(buffer, n, "%4.1f ", this->percent_mem);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -411,7 +411,7 @@ void Process_writeField(Process* this, RichString* str, ProcessField field) {
|
||||||
n -= written;
|
n -= written;
|
||||||
}
|
}
|
||||||
const char* draw = CRT_treeStr[lastItem ? (this->settings->direction == 1 ? TREE_STR_BEND : TREE_STR_TEND) : TREE_STR_RTEE];
|
const char* draw = CRT_treeStr[lastItem ? (this->settings->direction == 1 ? TREE_STR_BEND : TREE_STR_TEND) : TREE_STR_RTEE];
|
||||||
snprintf(buf, n, "%s%s ", draw, this->showChildren ? CRT_treeStr[TREE_STR_SHUT] : CRT_treeStr[TREE_STR_OPEN] );
|
xSnprintf(buf, n, "%s%s ", draw, this->showChildren ? CRT_treeStr[TREE_STR_SHUT] : CRT_treeStr[TREE_STR_OPEN] );
|
||||||
RichString_append(str, CRT_colors[PROCESS_TREE], buffer);
|
RichString_append(str, CRT_colors[PROCESS_TREE], buffer);
|
||||||
Process_writeCommand(this, attr, baseattr, str);
|
Process_writeCommand(this, attr, baseattr, str);
|
||||||
return;
|
return;
|
||||||
|
@ -422,28 +422,28 @@ void Process_writeField(Process* this, RichString* str, ProcessField field) {
|
||||||
case M_RESIDENT: Process_humanNumber(str, this->m_resident * PAGE_SIZE_KB, coloring); return;
|
case M_RESIDENT: Process_humanNumber(str, this->m_resident * PAGE_SIZE_KB, coloring); return;
|
||||||
case M_SIZE: Process_humanNumber(str, this->m_size * PAGE_SIZE_KB, coloring); return;
|
case M_SIZE: Process_humanNumber(str, this->m_size * PAGE_SIZE_KB, coloring); return;
|
||||||
case NICE: {
|
case NICE: {
|
||||||
snprintf(buffer, n, "%3ld ", this->nice);
|
xSnprintf(buffer, n, "%3ld ", this->nice);
|
||||||
attr = this->nice < 0 ? CRT_colors[PROCESS_HIGH_PRIORITY]
|
attr = this->nice < 0 ? CRT_colors[PROCESS_HIGH_PRIORITY]
|
||||||
: this->nice > 0 ? CRT_colors[PROCESS_LOW_PRIORITY]
|
: this->nice > 0 ? CRT_colors[PROCESS_LOW_PRIORITY]
|
||||||
: attr;
|
: attr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NLWP: snprintf(buffer, n, "%4ld ", this->nlwp); break;
|
case NLWP: xSnprintf(buffer, n, "%4ld ", this->nlwp); break;
|
||||||
case PGRP: snprintf(buffer, n, Process_pidFormat, this->pgrp); break;
|
case PGRP: xSnprintf(buffer, n, Process_pidFormat, this->pgrp); break;
|
||||||
case PID: snprintf(buffer, n, Process_pidFormat, this->pid); break;
|
case PID: xSnprintf(buffer, n, Process_pidFormat, this->pid); break;
|
||||||
case PPID: snprintf(buffer, n, Process_pidFormat, this->ppid); break;
|
case PPID: xSnprintf(buffer, n, Process_pidFormat, this->ppid); break;
|
||||||
case PRIORITY: {
|
case PRIORITY: {
|
||||||
if(this->priority <= -100)
|
if(this->priority <= -100)
|
||||||
snprintf(buffer, n, " RT ");
|
xSnprintf(buffer, n, " RT ");
|
||||||
else
|
else
|
||||||
snprintf(buffer, n, "%3ld ", this->priority);
|
xSnprintf(buffer, n, "%3ld ", this->priority);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PROCESSOR: snprintf(buffer, n, "%3d ", Settings_cpuId(this->settings, this->processor)); break;
|
case PROCESSOR: xSnprintf(buffer, n, "%3d ", Settings_cpuId(this->settings, this->processor)); break;
|
||||||
case SESSION: snprintf(buffer, n, Process_pidFormat, this->session); break;
|
case SESSION: xSnprintf(buffer, n, Process_pidFormat, this->session); break;
|
||||||
case STARTTIME: snprintf(buffer, n, "%s", this->starttime_show); break;
|
case STARTTIME: xSnprintf(buffer, n, "%s", this->starttime_show); break;
|
||||||
case STATE: {
|
case STATE: {
|
||||||
snprintf(buffer, n, "%c ", this->state);
|
xSnprintf(buffer, n, "%c ", this->state);
|
||||||
switch(this->state) {
|
switch(this->state) {
|
||||||
case 'R':
|
case 'R':
|
||||||
attr = CRT_colors[PROCESS_R_STATE];
|
attr = CRT_colors[PROCESS_R_STATE];
|
||||||
|
@ -454,18 +454,18 @@ void Process_writeField(Process* this, RichString* str, ProcessField field) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ST_UID: snprintf(buffer, n, "%4d ", this->st_uid); break;
|
case ST_UID: xSnprintf(buffer, n, "%4d ", this->st_uid); break;
|
||||||
case TIME: Process_printTime(str, this->time); return;
|
case TIME: Process_printTime(str, this->time); return;
|
||||||
case TGID: snprintf(buffer, n, Process_pidFormat, this->tgid); break;
|
case TGID: xSnprintf(buffer, n, Process_pidFormat, this->tgid); break;
|
||||||
case TPGID: snprintf(buffer, n, Process_pidFormat, this->tpgid); break;
|
case TPGID: xSnprintf(buffer, n, Process_pidFormat, this->tpgid); break;
|
||||||
case TTY_NR: snprintf(buffer, n, "%3u:%3u ", major(this->tty_nr), minor(this->tty_nr)); break;
|
case TTY_NR: xSnprintf(buffer, n, "%3u:%3u ", major(this->tty_nr), minor(this->tty_nr)); break;
|
||||||
case USER: {
|
case USER: {
|
||||||
if (Process_getuid != (int) this->st_uid)
|
if (Process_getuid != (int) this->st_uid)
|
||||||
attr = CRT_colors[PROCESS_SHADOW];
|
attr = CRT_colors[PROCESS_SHADOW];
|
||||||
if (this->user) {
|
if (this->user) {
|
||||||
snprintf(buffer, n, "%-9s ", this->user);
|
xSnprintf(buffer, n, "%-9s ", this->user);
|
||||||
} else {
|
} else {
|
||||||
snprintf(buffer, n, "%-9d ", this->st_uid);
|
xSnprintf(buffer, n, "%-9d ", this->st_uid);
|
||||||
}
|
}
|
||||||
if (buffer[9] != '\0') {
|
if (buffer[9] != '\0') {
|
||||||
buffer[9] = ' ';
|
buffer[9] = ' ';
|
||||||
|
@ -474,7 +474,7 @@ void Process_writeField(Process* this, RichString* str, ProcessField field) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
snprintf(buffer, n, "- ");
|
xSnprintf(buffer, n, "- ");
|
||||||
}
|
}
|
||||||
RichString_append(str, attr, buffer);
|
RichString_append(str, attr, buffer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ Panel* SignalsPanel_new() {
|
||||||
static char buf[15];
|
static char buf[15];
|
||||||
for (int sig = SIGRTMIN; sig <= SIGRTMAX; i++, sig++) {
|
for (int sig = SIGRTMIN; sig <= SIGRTMAX; i++, sig++) {
|
||||||
int n = sig - SIGRTMIN;
|
int n = sig - SIGRTMIN;
|
||||||
snprintf(buf, 15, "%2d SIGRTMIN%-+3d", sig, n);
|
xSnprintf(buf, 15, "%2d SIGRTMIN%-+3d", sig, n);
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
buf[11] = '\0';
|
buf[11] = '\0';
|
||||||
}
|
}
|
||||||
|
|
10
TasksMeter.c
10
TasksMeter.c
|
@ -30,7 +30,7 @@ static void TasksMeter_updateValues(Meter* this, char* buffer, int len) {
|
||||||
if (this->pl->settings->hideKernelThreads) {
|
if (this->pl->settings->hideKernelThreads) {
|
||||||
this->values[0] = 0;
|
this->values[0] = 0;
|
||||||
}
|
}
|
||||||
snprintf(buffer, len, "%d/%d", (int) this->values[3], (int) this->total);
|
xSnprintf(buffer, len, "%d/%d", (int) this->values[3], (int) this->total);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TasksMeter_display(Object* cast, RichString* out) {
|
static void TasksMeter_display(Object* cast, RichString* out) {
|
||||||
|
@ -40,7 +40,7 @@ static void TasksMeter_display(Object* cast, RichString* out) {
|
||||||
|
|
||||||
int processes = (int) this->values[2];
|
int processes = (int) this->values[2];
|
||||||
|
|
||||||
snprintf(buffer, sizeof(buffer), "%d", processes);
|
xSnprintf(buffer, sizeof(buffer), "%d", processes);
|
||||||
RichString_write(out, CRT_colors[METER_VALUE], buffer);
|
RichString_write(out, CRT_colors[METER_VALUE], buffer);
|
||||||
int threadValueColor = CRT_colors[METER_VALUE];
|
int threadValueColor = CRT_colors[METER_VALUE];
|
||||||
int threadCaptionColor = CRT_colors[METER_TEXT];
|
int threadCaptionColor = CRT_colors[METER_TEXT];
|
||||||
|
@ -50,18 +50,18 @@ static void TasksMeter_display(Object* cast, RichString* out) {
|
||||||
}
|
}
|
||||||
if (!settings->hideUserlandThreads) {
|
if (!settings->hideUserlandThreads) {
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], ", ");
|
RichString_append(out, CRT_colors[METER_TEXT], ", ");
|
||||||
snprintf(buffer, sizeof(buffer), "%d", (int)this->values[1]);
|
xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[1]);
|
||||||
RichString_append(out, threadValueColor, buffer);
|
RichString_append(out, threadValueColor, buffer);
|
||||||
RichString_append(out, threadCaptionColor, " thr");
|
RichString_append(out, threadCaptionColor, " thr");
|
||||||
}
|
}
|
||||||
if (!settings->hideKernelThreads) {
|
if (!settings->hideKernelThreads) {
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], ", ");
|
RichString_append(out, CRT_colors[METER_TEXT], ", ");
|
||||||
snprintf(buffer, sizeof(buffer), "%d", (int)this->values[0]);
|
xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[0]);
|
||||||
RichString_append(out, threadValueColor, buffer);
|
RichString_append(out, threadValueColor, buffer);
|
||||||
RichString_append(out, threadCaptionColor, " kthr");
|
RichString_append(out, threadCaptionColor, " kthr");
|
||||||
}
|
}
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], "; ");
|
RichString_append(out, CRT_colors[METER_TEXT], "; ");
|
||||||
snprintf(buffer, sizeof(buffer), "%d", (int)this->values[3]);
|
xSnprintf(buffer, sizeof(buffer), "%d", (int)this->values[3]);
|
||||||
RichString_append(out, CRT_colors[TASKS_RUNNING], buffer);
|
RichString_append(out, CRT_colors[TASKS_RUNNING], buffer);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], " running");
|
RichString_append(out, CRT_colors[METER_TEXT], " running");
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,8 +91,8 @@ void TraceScreen_draw(InfoScreen* this) {
|
||||||
|
|
||||||
bool TraceScreen_forkTracer(TraceScreen* this) {
|
bool TraceScreen_forkTracer(TraceScreen* this) {
|
||||||
char buffer[1001];
|
char buffer[1001];
|
||||||
int err = pipe(this->fdpair);
|
int error = pipe(this->fdpair);
|
||||||
if (err == -1) return false;
|
if (error == -1) return false;
|
||||||
this->child = fork();
|
this->child = fork();
|
||||||
if (this->child == -1) return false;
|
if (this->child == -1) return false;
|
||||||
if (this->child == 0) {
|
if (this->child == 0) {
|
||||||
|
@ -100,7 +100,7 @@ bool TraceScreen_forkTracer(TraceScreen* this) {
|
||||||
dup2(this->fdpair[1], STDERR_FILENO);
|
dup2(this->fdpair[1], STDERR_FILENO);
|
||||||
int ok = fcntl(this->fdpair[1], F_SETFL, O_NONBLOCK);
|
int ok = fcntl(this->fdpair[1], F_SETFL, O_NONBLOCK);
|
||||||
if (ok != -1) {
|
if (ok != -1) {
|
||||||
snprintf(buffer, sizeof(buffer), "%d", this->super.process->pid);
|
xSnprintf(buffer, sizeof(buffer), "%d", this->super.process->pid);
|
||||||
execlp("strace", "strace", "-p", buffer, NULL);
|
execlp("strace", "strace", "-p", buffer, NULL);
|
||||||
}
|
}
|
||||||
const char* message = "Could not execute 'strace'. Please make sure it is available in your $PATH.";
|
const char* message = "Could not execute 'strace'. Please make sure it is available in your $PATH.";
|
||||||
|
|
|
@ -20,7 +20,7 @@ int UptimeMeter_attributes[] = {
|
||||||
static void UptimeMeter_updateValues(Meter* this, char* buffer, int len) {
|
static void UptimeMeter_updateValues(Meter* this, char* buffer, int len) {
|
||||||
int totalseconds = Platform_getUptime();
|
int totalseconds = Platform_getUptime();
|
||||||
if (totalseconds == -1) {
|
if (totalseconds == -1) {
|
||||||
snprintf(buffer, len, "(unknown)");
|
xSnprintf(buffer, len, "(unknown)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int seconds = totalseconds % 60;
|
int seconds = totalseconds % 60;
|
||||||
|
@ -31,17 +31,17 @@ static void UptimeMeter_updateValues(Meter* this, char* buffer, int len) {
|
||||||
if (days > this->total) {
|
if (days > this->total) {
|
||||||
this->total = days;
|
this->total = days;
|
||||||
}
|
}
|
||||||
char daysbuf[15];
|
char daysbuf[32];
|
||||||
if (days > 100) {
|
if (days > 100) {
|
||||||
snprintf(daysbuf, sizeof(daysbuf), "%d days(!), ", days);
|
xSnprintf(daysbuf, sizeof(daysbuf), "%d days(!), ", days);
|
||||||
} else if (days > 1) {
|
} else if (days > 1) {
|
||||||
snprintf(daysbuf, sizeof(daysbuf), "%d days, ", days);
|
xSnprintf(daysbuf, sizeof(daysbuf), "%d days, ", days);
|
||||||
} else if (days == 1) {
|
} else if (days == 1) {
|
||||||
snprintf(daysbuf, sizeof(daysbuf), "1 day, ");
|
xSnprintf(daysbuf, sizeof(daysbuf), "1 day, ");
|
||||||
} else {
|
} else {
|
||||||
daysbuf[0] = '\0';
|
daysbuf[0] = '\0';
|
||||||
}
|
}
|
||||||
snprintf(buffer, len, "%s%02d:%02d:%02d", daysbuf, hours, minutes, seconds);
|
xSnprintf(buffer, len, "%s%02d:%02d:%02d", daysbuf, hours, minutes, seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
MeterClass UptimeMeter_class = {
|
MeterClass UptimeMeter_class = {
|
||||||
|
|
4
XAlloc.c
4
XAlloc.c
|
@ -5,11 +5,11 @@
|
||||||
#ifndef _GNU_SOURCE
|
#ifndef _GNU_SOURCE
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#endif
|
#endif
|
||||||
#include <err.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
/*{
|
/*{
|
||||||
|
#include <err.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
}*/
|
}*/
|
||||||
|
@ -44,6 +44,8 @@ void* xRealloc(void* ptr, size_t size) {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define xSnprintf(fmt, len, ...) do { int _l=len; int _n=snprintf(fmt, _l, __VA_ARGS__); if (!(_n > -1 && _n < _l)) { curs_set(1); endwin(); err(1, NULL); } } while(0)
|
||||||
|
|
||||||
#undef xStrdup
|
#undef xStrdup
|
||||||
#undef xStrdup_
|
#undef xStrdup_
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
|
|
3
XAlloc.h
3
XAlloc.h
|
@ -7,6 +7,7 @@
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <err.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
@ -16,6 +17,8 @@ void* xCalloc(size_t nmemb, size_t size);
|
||||||
|
|
||||||
void* xRealloc(void* ptr, size_t size);
|
void* xRealloc(void* ptr, size_t size);
|
||||||
|
|
||||||
|
#define xSnprintf(fmt, len, ...) do { int _l=len; int _n=snprintf(fmt, _l, __VA_ARGS__); if (!(_n > -1 && _n < _l)) { curs_set(1); endwin(); err(1, NULL); } } while(0)
|
||||||
|
|
||||||
#undef xStrdup
|
#undef xStrdup
|
||||||
#undef xStrdup_
|
#undef xStrdup_
|
||||||
#ifdef NDEBUG
|
#ifdef NDEBUG
|
||||||
|
|
|
@ -118,10 +118,10 @@ void DragonFlyBSDProcess_writeField(Process* this, RichString* str, ProcessField
|
||||||
int n = sizeof(buffer) - 1;
|
int n = sizeof(buffer) - 1;
|
||||||
switch ((int) field) {
|
switch ((int) field) {
|
||||||
// add Platform-specific fields here
|
// add Platform-specific fields here
|
||||||
case PID: snprintf(buffer, n, Process_pidFormat, (fp->kernel ? -1 : this->pid)); break;
|
case PID: xSnprintf(buffer, n, Process_pidFormat, (fp->kernel ? -1 : this->pid)); break;
|
||||||
case JID: snprintf(buffer, n, Process_pidFormat, fp->jid); break;
|
case JID: xSnprintf(buffer, n, Process_pidFormat, fp->jid); break;
|
||||||
case JAIL:{
|
case JAIL:{
|
||||||
snprintf(buffer, n, "%-11s ", fp->jname); break;
|
xSnprintf(buffer, n, "%-11s ", fp->jname); break;
|
||||||
if (buffer[11] != '\0') {
|
if (buffer[11] != '\0') {
|
||||||
buffer[11] = ' ';
|
buffer[11] = ' ';
|
||||||
buffer[12] = '\0';
|
buffer[12] = '\0';
|
||||||
|
|
|
@ -117,9 +117,9 @@ void FreeBSDProcess_writeField(Process* this, RichString* str, ProcessField fiel
|
||||||
int n = sizeof(buffer) - 1;
|
int n = sizeof(buffer) - 1;
|
||||||
switch ((int) field) {
|
switch ((int) field) {
|
||||||
// add FreeBSD-specific fields here
|
// add FreeBSD-specific fields here
|
||||||
case JID: snprintf(buffer, n, Process_pidFormat, fp->jid); break;
|
case JID: xSnprintf(buffer, n, Process_pidFormat, fp->jid); break;
|
||||||
case JAIL:{
|
case JAIL:{
|
||||||
snprintf(buffer, n, "%-11s ", fp->jname); break;
|
xSnprintf(buffer, n, "%-11s ", fp->jname); break;
|
||||||
if (buffer[11] != '\0') {
|
if (buffer[11] != '\0') {
|
||||||
buffer[11] = ' ';
|
buffer[11] = ' ';
|
||||||
buffer[12] = '\0';
|
buffer[12] = '\0';
|
||||||
|
|
|
@ -398,7 +398,7 @@ char* FreeBSDProcessList_readJailName(struct kinfo_proc* kproc) {
|
||||||
jid = jail_get(jiov, 6, 0);
|
jid = jail_get(jiov, 6, 0);
|
||||||
if (jid < 0) {
|
if (jid < 0) {
|
||||||
if (!jail_errmsg[0])
|
if (!jail_errmsg[0])
|
||||||
snprintf(jail_errmsg, JAIL_ERRMSGLEN, "jail_get: %s", strerror(errno));
|
xSnprintf(jail_errmsg, JAIL_ERRMSGLEN, "jail_get: %s", strerror(errno));
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if (jid == kproc->ki_jid) {
|
} else if (jid == kproc->ki_jid) {
|
||||||
jname = xStrdup(jnamebuf);
|
jname = xStrdup(jnamebuf);
|
||||||
|
|
|
@ -56,7 +56,7 @@ static unsigned long int parseBatInfo(const char *fileName, const unsigned short
|
||||||
unsigned long int total = 0;
|
unsigned long int total = 0;
|
||||||
for (unsigned int i = 0; i < nBatteries; i++) {
|
for (unsigned int i = 0; i < nBatteries; i++) {
|
||||||
char infoPath[30];
|
char infoPath[30];
|
||||||
snprintf(infoPath, sizeof infoPath, "%s%s/%s", batteryPath, batteries[i], fileName);
|
xSnprintf(infoPath, sizeof infoPath, "%s%s/%s", batteryPath, batteries[i], fileName);
|
||||||
|
|
||||||
FILE* file = fopen(infoPath, "r");
|
FILE* file = fopen(infoPath, "r");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
|
@ -106,7 +106,7 @@ static ACPresence procAcpiCheck() {
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
char statePath[50];
|
char statePath[50];
|
||||||
snprintf((char *) statePath, sizeof statePath, "%s/%s/state", power_supplyPath, entryName);
|
xSnprintf((char *) statePath, sizeof statePath, "%s/%s/state", power_supplyPath, entryName);
|
||||||
FILE* file = fopen(statePath, "r");
|
FILE* file = fopen(statePath, "r");
|
||||||
|
|
||||||
if (!file) {
|
if (!file) {
|
||||||
|
@ -196,7 +196,7 @@ static void Battery_getSysData(double* level, ACPresence* isOnAC) {
|
||||||
|
|
||||||
if (entryName[0] == 'B' && entryName[1] == 'A' && entryName[2] == 'T') {
|
if (entryName[0] == 'B' && entryName[1] == 'A' && entryName[2] == 'T') {
|
||||||
|
|
||||||
snprintf((char *) filePath, sizeof filePath, SYS_POWERSUPPLY_DIR "/%s/uevent", entryName);
|
xSnprintf((char *) filePath, sizeof filePath, SYS_POWERSUPPLY_DIR "/%s/uevent", entryName);
|
||||||
int fd = open(filePath, O_RDONLY);
|
int fd = open(filePath, O_RDONLY);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
@ -249,7 +249,7 @@ static void Battery_getSysData(double* level, ACPresence* isOnAC) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf((char *) filePath, sizeof filePath, SYS_POWERSUPPLY_DIR "/%s/online", entryName);
|
xSnprintf((char *) filePath, sizeof filePath, SYS_POWERSUPPLY_DIR "/%s/online", entryName);
|
||||||
int fd = open(filePath, O_RDONLY);
|
int fd = open(filePath, O_RDONLY);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
|
|
|
@ -27,7 +27,7 @@ Panel* IOPriorityPanel_new(IOPriority currPrio) {
|
||||||
for (int c = 0; classes[c].name; c++) {
|
for (int c = 0; classes[c].name; c++) {
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
char name[50];
|
char name[50];
|
||||||
snprintf(name, sizeof(name)-1, "%s %d %s", classes[c].name, i, i == 0 ? "(High)" : (i == 7 ? "(Low)" : ""));
|
xSnprintf(name, sizeof(name)-1, "%s %d %s", classes[c].name, i, i == 0 ? "(High)" : (i == 7 ? "(Low)" : ""));
|
||||||
IOPriority ioprio = IOPriority_tuple(classes[c].klass, i);
|
IOPriority ioprio = IOPriority_tuple(classes[c].klass, i);
|
||||||
Panel_add(this, (Object*) ListItem_new(name, ioprio));
|
Panel_add(this, (Object*) ListItem_new(name, ioprio));
|
||||||
if (currPrio == ioprio) Panel_setSelected(this, Panel_size(this) - 1);
|
if (currPrio == ioprio) Panel_setSelected(this, Panel_size(this) - 1);
|
||||||
|
|
|
@ -296,10 +296,10 @@ void LinuxProcess_writeField(Process* this, RichString* str, ProcessField field)
|
||||||
switch ((int)field) {
|
switch ((int)field) {
|
||||||
case TTY_NR: {
|
case TTY_NR: {
|
||||||
if (lp->ttyDevice) {
|
if (lp->ttyDevice) {
|
||||||
snprintf(buffer, n, "%-9s", lp->ttyDevice + 5 /* skip "/dev/" */);
|
xSnprintf(buffer, n, "%-9s", lp->ttyDevice + 5 /* skip "/dev/" */);
|
||||||
} else {
|
} else {
|
||||||
attr = CRT_colors[PROCESS_SHADOW];
|
attr = CRT_colors[PROCESS_SHADOW];
|
||||||
snprintf(buffer, n, "? ");
|
xSnprintf(buffer, n, "? ");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -332,31 +332,31 @@ void LinuxProcess_writeField(Process* this, RichString* str, ProcessField field)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_OPENVZ
|
#ifdef HAVE_OPENVZ
|
||||||
case CTID: snprintf(buffer, n, "%7u ", lp->ctid); break;
|
case CTID: xSnprintf(buffer, n, "%7u ", lp->ctid); break;
|
||||||
case VPID: snprintf(buffer, n, Process_pidFormat, lp->vpid); break;
|
case VPID: xSnprintf(buffer, n, Process_pidFormat, lp->vpid); break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_VSERVER
|
#ifdef HAVE_VSERVER
|
||||||
case VXID: snprintf(buffer, n, "%5u ", lp->vxid); break;
|
case VXID: xSnprintf(buffer, n, "%5u ", lp->vxid); break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_CGROUP
|
#ifdef HAVE_CGROUP
|
||||||
case CGROUP: snprintf(buffer, n, "%-10s ", lp->cgroup); break;
|
case CGROUP: xSnprintf(buffer, n, "%-10s ", lp->cgroup); break;
|
||||||
#endif
|
#endif
|
||||||
case OOM: snprintf(buffer, n, Process_pidFormat, lp->oom); break;
|
case OOM: xSnprintf(buffer, n, Process_pidFormat, lp->oom); break;
|
||||||
case IO_PRIORITY: {
|
case IO_PRIORITY: {
|
||||||
int klass = IOPriority_class(lp->ioPriority);
|
int klass = IOPriority_class(lp->ioPriority);
|
||||||
if (klass == IOPRIO_CLASS_NONE) {
|
if (klass == IOPRIO_CLASS_NONE) {
|
||||||
// see note [1] above
|
// see note [1] above
|
||||||
snprintf(buffer, n, "B%1d ", (int) (this->nice + 20) / 5);
|
xSnprintf(buffer, n, "B%1d ", (int) (this->nice + 20) / 5);
|
||||||
} else if (klass == IOPRIO_CLASS_BE) {
|
} else if (klass == IOPRIO_CLASS_BE) {
|
||||||
snprintf(buffer, n, "B%1d ", IOPriority_data(lp->ioPriority));
|
xSnprintf(buffer, n, "B%1d ", IOPriority_data(lp->ioPriority));
|
||||||
} else if (klass == IOPRIO_CLASS_RT) {
|
} else if (klass == IOPRIO_CLASS_RT) {
|
||||||
attr = CRT_colors[PROCESS_HIGH_PRIORITY];
|
attr = CRT_colors[PROCESS_HIGH_PRIORITY];
|
||||||
snprintf(buffer, n, "R%1d ", IOPriority_data(lp->ioPriority));
|
xSnprintf(buffer, n, "R%1d ", IOPriority_data(lp->ioPriority));
|
||||||
} else if (klass == IOPRIO_CLASS_IDLE) {
|
} else if (klass == IOPRIO_CLASS_IDLE) {
|
||||||
attr = CRT_colors[PROCESS_LOW_PRIORITY];
|
attr = CRT_colors[PROCESS_LOW_PRIORITY];
|
||||||
snprintf(buffer, n, "id ");
|
xSnprintf(buffer, n, "id ");
|
||||||
} else {
|
} else {
|
||||||
snprintf(buffer, n, "?? ");
|
xSnprintf(buffer, n, "?? ");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -248,7 +248,7 @@ static inline unsigned long long LinuxProcess_adjustTime(unsigned long long t) {
|
||||||
static bool LinuxProcessList_readStatFile(Process *process, const char* dirname, const char* name, char* command, int* commLen) {
|
static bool LinuxProcessList_readStatFile(Process *process, const char* dirname, const char* name, char* command, int* commLen) {
|
||||||
LinuxProcess* lp = (LinuxProcess*) process;
|
LinuxProcess* lp = (LinuxProcess*) process;
|
||||||
char filename[MAX_NAME+1];
|
char filename[MAX_NAME+1];
|
||||||
snprintf(filename, MAX_NAME, "%s/%s/stat", dirname, name);
|
xSnprintf(filename, MAX_NAME, "%s/%s/stat", dirname, name);
|
||||||
int fd = open(filename, O_RDONLY);
|
int fd = open(filename, O_RDONLY);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
return false;
|
return false;
|
||||||
|
@ -326,7 +326,7 @@ static bool LinuxProcessList_statProcessDir(Process* process, const char* dirnam
|
||||||
char filename[MAX_NAME+1];
|
char filename[MAX_NAME+1];
|
||||||
filename[MAX_NAME] = '\0';
|
filename[MAX_NAME] = '\0';
|
||||||
|
|
||||||
snprintf(filename, MAX_NAME, "%s/%s", dirname, name);
|
xSnprintf(filename, MAX_NAME, "%s/%s", dirname, name);
|
||||||
struct stat sstat;
|
struct stat sstat;
|
||||||
int statok = stat(filename, &sstat);
|
int statok = stat(filename, &sstat);
|
||||||
if (statok == -1)
|
if (statok == -1)
|
||||||
|
@ -348,7 +348,7 @@ static void LinuxProcessList_readIoFile(LinuxProcess* process, const char* dirna
|
||||||
char filename[MAX_NAME+1];
|
char filename[MAX_NAME+1];
|
||||||
filename[MAX_NAME] = '\0';
|
filename[MAX_NAME] = '\0';
|
||||||
|
|
||||||
snprintf(filename, MAX_NAME, "%s/%s/io", dirname, name);
|
xSnprintf(filename, MAX_NAME, "%s/%s/io", dirname, name);
|
||||||
int fd = open(filename, O_RDONLY);
|
int fd = open(filename, O_RDONLY);
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
process->io_rate_read_bps = -1;
|
process->io_rate_read_bps = -1;
|
||||||
|
@ -417,7 +417,7 @@ static void LinuxProcessList_readIoFile(LinuxProcess* process, const char* dirna
|
||||||
|
|
||||||
static bool LinuxProcessList_readStatmFile(LinuxProcess* process, const char* dirname, const char* name) {
|
static bool LinuxProcessList_readStatmFile(LinuxProcess* process, const char* dirname, const char* name) {
|
||||||
char filename[MAX_NAME+1];
|
char filename[MAX_NAME+1];
|
||||||
snprintf(filename, MAX_NAME, "%s/%s/statm", dirname, name);
|
xSnprintf(filename, MAX_NAME, "%s/%s/statm", dirname, name);
|
||||||
int fd = open(filename, O_RDONLY);
|
int fd = open(filename, O_RDONLY);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
return false;
|
return false;
|
||||||
|
@ -447,7 +447,7 @@ static void LinuxProcessList_readOpenVZData(LinuxProcess* process, const char* d
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
char filename[MAX_NAME+1];
|
char filename[MAX_NAME+1];
|
||||||
snprintf(filename, MAX_NAME, "%s/%s/stat", dirname, name);
|
xSnprintf(filename, MAX_NAME, "%s/%s/stat", dirname, name);
|
||||||
FILE* file = fopen(filename, "r");
|
FILE* file = fopen(filename, "r");
|
||||||
if (!file)
|
if (!file)
|
||||||
return;
|
return;
|
||||||
|
@ -470,7 +470,7 @@ static void LinuxProcessList_readOpenVZData(LinuxProcess* process, const char* d
|
||||||
|
|
||||||
static void LinuxProcessList_readCGroupFile(LinuxProcess* process, const char* dirname, const char* name) {
|
static void LinuxProcessList_readCGroupFile(LinuxProcess* process, const char* dirname, const char* name) {
|
||||||
char filename[MAX_NAME+1];
|
char filename[MAX_NAME+1];
|
||||||
snprintf(filename, MAX_NAME, "%s/%s/cgroup", dirname, name);
|
xSnprintf(filename, MAX_NAME, "%s/%s/cgroup", dirname, name);
|
||||||
FILE* file = fopen(filename, "r");
|
FILE* file = fopen(filename, "r");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
process->cgroup = xStrdup("");
|
process->cgroup = xStrdup("");
|
||||||
|
@ -491,7 +491,7 @@ static void LinuxProcessList_readCGroupFile(LinuxProcess* process, const char* d
|
||||||
at++;
|
at++;
|
||||||
left--;
|
left--;
|
||||||
}
|
}
|
||||||
int wrote = snprintf(at, left, "%s", group);
|
int wrote = xSnprintf(at, left, "%s", group);
|
||||||
left -= wrote;
|
left -= wrote;
|
||||||
}
|
}
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
@ -505,7 +505,7 @@ static void LinuxProcessList_readCGroupFile(LinuxProcess* process, const char* d
|
||||||
|
|
||||||
static void LinuxProcessList_readVServerData(LinuxProcess* process, const char* dirname, const char* name) {
|
static void LinuxProcessList_readVServerData(LinuxProcess* process, const char* dirname, const char* name) {
|
||||||
char filename[MAX_NAME+1];
|
char filename[MAX_NAME+1];
|
||||||
snprintf(filename, MAX_NAME, "%s/%s/status", dirname, name);
|
xSnprintf(filename, MAX_NAME, "%s/%s/status", dirname, name);
|
||||||
FILE* file = fopen(filename, "r");
|
FILE* file = fopen(filename, "r");
|
||||||
if (!file)
|
if (!file)
|
||||||
return;
|
return;
|
||||||
|
@ -536,7 +536,7 @@ static void LinuxProcessList_readVServerData(LinuxProcess* process, const char*
|
||||||
|
|
||||||
static void LinuxProcessList_readOomData(LinuxProcess* process, const char* dirname, const char* name) {
|
static void LinuxProcessList_readOomData(LinuxProcess* process, const char* dirname, const char* name) {
|
||||||
char filename[MAX_NAME+1];
|
char filename[MAX_NAME+1];
|
||||||
snprintf(filename, MAX_NAME, "%s/%s/oom_score", dirname, name);
|
xSnprintf(filename, MAX_NAME, "%s/%s/oom_score", dirname, name);
|
||||||
FILE* file = fopen(filename, "r");
|
FILE* file = fopen(filename, "r");
|
||||||
if (!file) {
|
if (!file) {
|
||||||
return;
|
return;
|
||||||
|
@ -567,7 +567,7 @@ static bool LinuxProcessList_readCmdlineFile(Process* process, const char* dirna
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
char filename[MAX_NAME+1];
|
char filename[MAX_NAME+1];
|
||||||
snprintf(filename, MAX_NAME, "%s/%s/cmdline", dirname, name);
|
xSnprintf(filename, MAX_NAME, "%s/%s/cmdline", dirname, name);
|
||||||
int fd = open(filename, O_RDONLY);
|
int fd = open(filename, O_RDONLY);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
return false;
|
return false;
|
||||||
|
@ -688,7 +688,7 @@ static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, const char*
|
||||||
LinuxProcess* lp = (LinuxProcess*) proc;
|
LinuxProcess* lp = (LinuxProcess*) proc;
|
||||||
|
|
||||||
char subdirname[MAX_NAME+1];
|
char subdirname[MAX_NAME+1];
|
||||||
snprintf(subdirname, MAX_NAME, "%s/%s/task", dirname, name);
|
xSnprintf(subdirname, MAX_NAME, "%s/%s/task", dirname, name);
|
||||||
LinuxProcessList_recurseProcTree(this, subdirname, proc, period, tv);
|
LinuxProcessList_recurseProcTree(this, subdirname, proc, period, tv);
|
||||||
|
|
||||||
#ifdef HAVE_TASKSTATS
|
#ifdef HAVE_TASKSTATS
|
||||||
|
|
|
@ -215,7 +215,7 @@ void Platform_setSwapValues(Meter* this) {
|
||||||
|
|
||||||
char* Platform_getProcessEnv(pid_t pid) {
|
char* Platform_getProcessEnv(pid_t pid) {
|
||||||
char procname[32+1];
|
char procname[32+1];
|
||||||
snprintf(procname, 32, "/proc/%d/environ", pid);
|
xSnprintf(procname, 32, "/proc/%d/environ", pid);
|
||||||
FILE* fd = fopen(procname, "r");
|
FILE* fd = fopen(procname, "r");
|
||||||
char *env = NULL;
|
char *env = NULL;
|
||||||
if (fd) {
|
if (fd) {
|
||||||
|
|
Loading…
Reference in New Issue