1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-12-23 19:39:06 +00:00

Conky for mac os master (#579)

* Try to amend #31

* BUILD_WLAN should be available for all OS.

Keep BUILD_WLAN OFF by default for compatibility reasons.

* WLAN-related variables should be available for every OS.

There are some problems (probably null-dereference)

* Fix $wireless_essid crashing conky if no argument provided.

Conky wasn't parsing the argument of the variable as it should, thus wasn't allocating the `dev` member variable.

Also fix some documentation stuff.

* Improve `get_freq` #20

Using the Intel® Power Gadget API (https://software.intel.com/en-us/blogs/2012/12/13/using-the-intel-power-gadget-api-on-mac-os-x) we can now get actual Core frequency and not the constant factory one.

Though, for some weird reason the API gives the same freq for all Cores, thus the |cpu| arg becomes useless.

* Oops, this accidently slipped in

* Introduce BUILD_IPGFREQ build option

This build option has been introduced for one particular reason:

On macOS getting current core-frequency is not supported by the APIs.  A solution is to install Intel's ® Power Gadget which comes with an .app, a Framework and a kernel-extension.  Though, this may trouble some alot, thus introduce BUILD_IPGFREQ.

* Forgot static here.

* Some improvements for get_freq again.

Fix frequency not printing correctly (I wasn't using the divisor)
Add more guards.

* Setup cmake files and project code for Objective-C code #17

We want to use CoreWLAN framework.

* update_cpu_usage() now supports multiple cores

Also, some cleanup.

* Updated default conky config to monitor Mac Networking

* Made Mac Friendly BuildOptions and generic default conky configs

* Undid Xdamage config and cleaned up previous IF statements

* Re-Added XDamage fix

* Finish up the algorithm. I think its now correct. Closes: #33

* Cleanup macro and introduce a no-op free_cpu() function for ALL cpu-related variables

free_cpu() must be implemented for every OS and on all except macOS its a no-op function.

* Reformat, add empty comment.
This commit is contained in:
Brenden Matthews 2018-08-07 11:54:01 -04:00 committed by GitHub
parent b17f2c2ca9
commit 8aa9c819f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 231 additions and 156 deletions

View File

@ -63,6 +63,12 @@ if (NOT LIB_INSTALL_DIR)
endif (NOT LIB_INSTALL_DIR)
set(PACKAGE_LIBRARY_DIR "${LIB_INSTALL_DIR}/conky" CACHE STRING "Package library path (where Lua bindings are installed" FORCE)
set(DEFAULTNETDEV "eth0" CACHE STRING "Default networkdevice")
# Mac only override
if(OS_DARWIN)
set(DEFAULTNETDEV "en0" CACHE STRING "Default networkdevice" FORCE)
endif(OS_DARWIN)
set(XDG_CONFIG_FILE "$HOME/.config/conky/conky.conf" CACHE STRING "Configfile of the user (XDG)")
set(CONFIG_FILE "$HOME/.conkyrc" CACHE STRING "Configfile of the user")
set(MAX_USER_TEXT_DEFAULT "16384" CACHE STRING "Default maximum size of config TEXT buffer, i.e. below TEXT line.")
@ -76,7 +82,6 @@ if(OS_LINUX)
option(BUILD_PORT_MONITORS "Build TCP portmon support" true)
option(BUILD_IBM "Support for IBM/Lenovo notebooks" true)
option(BUILD_HDDTEMP "Support for hddtemp" true)
option(BUILD_WLAN "Enable wireless support" false)
# nvidia may also work on FreeBSD, not sure
option(BUILD_NVIDIA "Enable nvidia support" false)
option(BUILD_IPV6 "Enable if you want IPv6 support" true)
@ -84,14 +89,20 @@ else(OS_LINUX)
set(BUILD_PORT_MONITORS false)
set(BUILD_IBM false)
set(BUILD_HDDTEMP false)
set(BUILD_WLAN false)
set(BUILD_NVIDIA false)
set(BUILD_IPV6 false)
endif(OS_LINUX)
# macOS Only
if(OS_DARWIN)
option(BUILD_IPGFREQ "Enable cpu freq calculation based on Intel® Power Gadget; otherwise use constant factory value" false)
endif(OS_DARWIN)
# Optional features etc
#
option(BUILD_WLAN "Enable wireless support" false)
option(BUILD_BUILTIN_CONFIG "Enable builtin default configuration" true)
option(BUILD_IOSTATS "Enable disk I/O stats" true)
@ -110,7 +121,14 @@ endif(BUILD_NCURSES)
option(BUILD_X11 "Build X11 support" true)
if(BUILD_X11)
option(OWN_WINDOW "Enable own_window support" true)
option(BUILD_XDAMAGE "Build Xdamage support" true)
# Mac Fix
if(OS_DARWIN)
option(BUILD_XDAMAGE "Build Xdamage support" false)
else(OS_DARWIN)
option(BUILD_XDAMAGE "Build Xdamage support" true)
endif(OS_DARWIN)
option(BUILD_XINERAMA "Build Xinerama support" true)
option(BUILD_XDBE "Build Xdbe (double-buffer) support" true)
option(BUILD_XFT "Build Xft (freetype fonts) support" true)

View File

@ -137,6 +137,16 @@ if(BUILD_NCURSES AND OS_DARWIN)
set(conky_libs ${conky_libs} -lncurses)
endif(BUILD_NCURSES AND OS_DARWIN)
if(BUILD_WLAN AND OS_DARWIN)
find_library(CW CoreWLAN)
set(conky_libs ${conky_libs} ${CW})
endif(BUILD_WLAN AND OS_DARWIN)
if(OS_DARWIN AND BUILD_IPGFREQ)
find_library(IPG IntelPowerGadget)
set(conky_libs ${conky_libs} ${IPG})
endif(OS_DARWIN AND BUILD_IPGFREQ)
if(BUILD_MATH)
set(conky_libs ${conky_libs} -lm)
endif(BUILD_MATH)
@ -198,7 +208,7 @@ if(BUILD_MYSQL)
set(conky_libs ${conky_libs} ${MYSQLCLIENT_LIB})
endif(BUILD_MYSQL)
if(BUILD_WLAN)
if(BUILD_WLAN AND OS_LINUX)
set(CMAKE_REQUIRED_DEFINITIONS -D_GNU_SOURCE)
check_include_files(iwlib.h IWLIB_H)
if(NOT IWLIB_H)
@ -210,7 +220,7 @@ if(BUILD_WLAN)
endif(NOT IWLIB_LIB)
set(conky_libs ${conky_libs} ${IWLIB_LIB})
check_function_exists(iw_sockets_open IWLIB_SOCKETS_OPEN_FUNC)
endif(BUILD_WLAN)
endif(BUILD_WLAN AND OS_LINUX)
if(BUILD_PORT_MONITORS)
check_function_exists(getnameinfo HAVE_GETNAMEINFO)

View File

@ -102,6 +102,8 @@
#cmakedefine BUILD_IOSTATS 1
#cmakedefine BUILD_IPGFREQ 0
#cmakedefine BUILD_WLAN 1
#cmakedefine BUILD_ICAL 1

View File

@ -72,7 +72,7 @@ $hr
${color grey}File systems:
/ $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color grey}Networking:
Up:$color ${upspeed eth0} ${color grey} - Down:$color ${downspeed eth0}
Up:$color ${upspeed} ${color grey} - Down:$color ${downspeed}
$hr
${color grey}Name PID CPU% MEM%
${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}

View File

@ -46,7 +46,7 @@ Processes: $processes Running: $running_processes
File systems:
/ ${fs_used /}/${fs_size /} ${fs_bar 6 /}
Networking:
Up: ${upspeed eth0} - Down: ${downspeed eth0}
Up: ${upspeed} - Down: ${downspeed}
Name PID CPU% MEM%
${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}

View File

@ -4784,7 +4784,7 @@
</command>
<option>(net)</option>
</term>
<listitem>WLAN channel on which device 'net' is listening (Linux only)
<listitem>WLAN channel on which device 'net' is listening
<para /></listitem>
</varlistentry>
<varlistentry>
@ -4804,7 +4804,7 @@
</command>
<option>(net)</option>
</term>
<listitem>Frequency on which device 'net' is listening (Linux only)
<listitem>Frequency on which device 'net' is listening
<para /></listitem>
</varlistentry>
<varlistentry>

View File

@ -135,7 +135,7 @@ endif(OS_HAIKU)
if(OS_DARWIN)
set(darwin
darwin.cc darwin.h
darwin.mm darwin.h
darwin_sip.h
i18n.h
)

View File

@ -158,6 +158,8 @@ uint8_t battery_percentage(struct text_object *);
void print_battery_short(struct text_object *, char *, int);
#endif /* !__OpenBSD__ */
void free_cpu(struct text_object *);
void print_blink(struct text_object *, char *, int);
void print_include(struct text_object *, char *, int);

View File

@ -484,42 +484,43 @@ struct text_object *construct_text_object(char *s, const char *arg, long line,
obj->data.i = atoi(&arg[0]);
}
obj->callbacks.print = &print_voltage_v;
#ifdef BUILD_WLAN
END OBJ(wireless_essid, &update_net_stats) obj->data.opaque =
get_net_stat(arg, obj, free_at_crash);
obj->callbacks.print = &print_wireless_essid;
END OBJ(wireless_channel, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_channel;
END OBJ(wireless_freq, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_frequency;
END OBJ(wireless_mode, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_mode;
END OBJ(wireless_bitrate, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_bitrate;
END OBJ(wireless_ap, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_ap;
END OBJ(wireless_link_qual, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_link_qual;
END OBJ(wireless_link_qual_max, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_link_qual_max;
END OBJ(wireless_link_qual_perc, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_link_qual_perc;
END OBJ(wireless_link_bar, &update_net_stats)
parse_net_stat_bar_arg(obj, arg, free_at_crash);
obj->callbacks.barval = &wireless_link_barval;
#endif /* BUILD_WLAN */
#endif /* __linux__ */
#ifdef BUILD_WLAN
END OBJ(wireless_essid, &update_net_stats) obj->data.opaque =
get_net_stat(arg, obj, free_at_crash);
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_essid;
END OBJ(wireless_channel, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_channel;
END OBJ(wireless_freq, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_frequency;
END OBJ(wireless_mode, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_mode;
END OBJ(wireless_bitrate, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_bitrate;
END OBJ(wireless_ap, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_ap;
END OBJ(wireless_link_qual, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_link_qual;
END OBJ(wireless_link_qual_max, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_link_qual_max;
END OBJ(wireless_link_qual_perc, &update_net_stats)
parse_net_stat_arg(obj, arg, free_at_crash);
obj->callbacks.print = &print_wireless_link_qual_perc;
END OBJ(wireless_link_bar, &update_net_stats)
parse_net_stat_bar_arg(obj, arg, free_at_crash);
obj->callbacks.barval = &wireless_link_barval;
#endif /* BUILD_WLAN */
#ifndef __OpenBSD__
END OBJ(acpifan, nullptr) obj->callbacks.print = &print_acpifan;
END OBJ(battery, nullptr) char bat[64];
@ -673,18 +674,21 @@ struct text_object *construct_text_object(char *s, const char *arg, long line,
END OBJ(cpu, &update_cpu_usage) get_cpu_count();
SCAN_CPU(arg, obj->data.i);
obj->callbacks.percentage = &cpu_percentage;
obj->callbacks.free = &free_cpu;
DBGP2("Adding $cpu for CPU %d", obj->data.i);
#ifdef BUILD_X11
END OBJ(cpugauge, &update_cpu_usage) get_cpu_count();
SCAN_CPU(arg, obj->data.i);
scan_gauge(obj, arg, 1);
obj->callbacks.gaugeval = &cpu_barval;
obj->callbacks.free = &free_cpu;
DBGP2("Adding $cpugauge for CPU %d", obj->data.i);
#endif
END OBJ(cpubar, &update_cpu_usage) get_cpu_count();
SCAN_CPU(arg, obj->data.i);
scan_bar(obj, arg, 1);
obj->callbacks.barval = &cpu_barval;
obj->callbacks.free = &free_cpu;
DBGP2("Adding $cpubar for CPU %d", obj->data.i);
#ifdef BUILD_X11
END OBJ(cpugraph, &update_cpu_usage) get_cpu_count();
@ -694,6 +698,7 @@ struct text_object *construct_text_object(char *s, const char *arg, long line,
DBGP2("Adding $cpugraph for CPU %d", obj->data.i);
free_and_zero(buf);
obj->callbacks.graphval = &cpu_barval;
obj->callbacks.free = &free_cpu;
END OBJ(loadgraph, &update_load_average) scan_loadgraph_arg(obj, arg);
obj->callbacks.graphval = &loadgraphval;
#endif /* BUILD_X11 */

View File

@ -56,4 +56,6 @@ int get_entropy_poolsize(const unsigned int *);
int get_sip_status(void);
void print_sip_status(struct text_object *obj, char *p, int p_max_size);
void deallocate_cpu_sample(struct text_object *obj);
#endif /*DARWIN_H*/

View File

@ -42,12 +42,6 @@
*is available. patched the _csr_check function to return the bool bit instead.
*/
/*
* Apologies for the code style...
* In my eyes it feels better to have
* different styles at some specific places... :)
*/
#include "conky.h" // for struct info
#include "darwin.h"
@ -74,6 +68,16 @@
#include "darwin_sip.h" // sip status
#include <vector>
#ifdef BUILD_IPGFREQ
#include <IntelPowerGadget/EnergyLib.h>
#endif
#ifdef BUILD_WLAN
#import <CoreWLAN/CoreWLAN.h>
#endif
/* clock_gettime includes */
#ifndef HAVE_CLOCK_GETTIME
#include <errno.h>
@ -106,6 +110,10 @@ void eprintf(const char *fmt, ...) {
*/
static conky::simple_config_setting<bool> top_cpu_separate("top_cpu_separate",
false, true);
/*
* used by update_cpu_usage()
*/
struct cpusample *sample_handle = nullptr;
static int getsysctl(const char *name, void *ptr, size_t len) {
size_t nlen = len;
@ -219,13 +227,12 @@ typedef struct memorysample {
* Gets systemTime, userTime and idleTime for CPU
* MenuMeters has been great inspiration for this function
*/
static void get_cpu_sample(struct cpusample *sample) {
static void get_cpu_sample(struct cpusample **sample) {
host_name_port_t machHost;
natural_t processorCount;
processor_cpu_load_info_t processorTickInfo;
mach_msg_type_number_t processorInfoCount;
struct cpusample *samples = nullptr;
machHost = mach_host_self();
kern_return_t err = host_processor_info(
@ -237,22 +244,15 @@ static void get_cpu_sample(struct cpusample *sample) {
return;
}
/*
* allocate ncpus+1 cpusample structs (one foreach CPU)
* ** samples[0] is overal CPU usage
*/
samples = new struct cpusample[processorCount + 1];
memset(samples, 0, sizeof(cpusample) * (processorCount + 1));
/*
* start from samples[1] because samples[0] is overall CPU usage
*/
for (natural_t i = 1; i < processorCount + 1; i++) {
samples[i].totalSystemTime =
(*sample)[i].totalSystemTime =
processorTickInfo[i - 1].cpu_ticks[CPU_STATE_SYSTEM],
samples[i].totalUserTime =
(*sample)[i].totalUserTime =
processorTickInfo[i - 1].cpu_ticks[CPU_STATE_USER],
samples[i].totalIdleTime =
(*sample)[i].totalIdleTime =
processorTickInfo[i - 1].cpu_ticks[CPU_STATE_IDLE];
}
@ -260,24 +260,37 @@ static void get_cpu_sample(struct cpusample *sample) {
* sum up all totals
*/
for (natural_t i = 1; i < processorCount + 1; i++) {
samples[0].totalSystemTime += samples[i].totalSystemTime;
samples[0].totalUserTime += samples[i].totalUserTime;
samples[0].totalIdleTime += samples[i].totalIdleTime;
(*sample)[0].totalSystemTime += (*sample)[i].totalSystemTime;
(*sample)[0].totalUserTime += (*sample)[i].totalUserTime;
(*sample)[0].totalIdleTime += (*sample)[i].totalIdleTime;
}
/*
* set the sample pointer
*/
sample->totalSystemTime = samples[0].totalSystemTime;
sample->totalUserTime = samples[0].totalUserTime;
sample->totalIdleTime = samples[0].totalIdleTime;
/*
* Dealloc
*/
vm_deallocate(mach_task_self(), (vm_address_t)processorTickInfo,
static_cast<vm_size_t>(processorInfoCount * sizeof(natural_t)));
delete[] samples;
}
void allocate_cpu_sample(struct cpusample **sample) {
if (*sample != nullptr)
return;
/*
* allocate ncpus+1 cpusample structs (one foreach CPU)
* ** sample_handle[0] is overal CPU usage
*/
*sample = reinterpret_cast<struct cpusample *>(malloc(sizeof(cpusample) * (info.cpu_count + 1)));
memset(*sample, 0, sizeof(cpusample) * (info.cpu_count + 1));
sample_handle = *sample; /* use a public handle for deallocating */
}
void free_cpu(struct text_object *) {
if (sample_handle != nullptr) {
free(sample_handle);
sample_handle = nullptr;
}
}
/*
@ -567,11 +580,9 @@ uint64_t get_physical_memory() {
}
int update_meminfo() {
/* XXX implement remaining memory-related variables (see conky.h) */
/* XXX conky breaks the values ... :( probably some rounding problem...
Though we get the right values (based on top) */
/* XXX probably investigate the "probably apple keeps some info secret" */
/* XXX See #34 */
vm_size_t page_size = getpagesize(); // get pagesize in bytes
unsigned long swap_avail, swap_free;
@ -638,6 +649,14 @@ int update_meminfo() {
return 0;
}
#ifdef BUILD_WLAN
void update_wlan_stats(struct net_stat *ns) {
}
#endif
int update_net_stats() {
struct net_stat *ns;
double delta;
@ -657,6 +676,10 @@ int update_net_stats() {
if ((ifa->ifa_flags & IFF_UP) != 0u) {
struct ifaddrs *iftmp;
#ifdef BUILD_WLAN
update_wlan_stats(ns);
#endif
ns->up = 1;
last_recv = ns->recv;
last_trans = ns->trans;
@ -843,8 +866,6 @@ void get_cpu_count() {
info.cpu_count = 0;
}
/* XXX this can be moved to update_cpu_usage() but keep here to follow linux
* implementation */
if (info.cpu_usage == nullptr) {
/*
* Allocate ncpus+1 slots because cpu_usage[0] is overall usage.
@ -864,16 +885,14 @@ struct cpu_info {
};
int update_cpu_usage() {
/* XXX add support for multiple cpus (see linux.cc) */
static bool cpu_setup = 0;
long used, total;
static struct cpu_info *cpu = nullptr;
unsigned int malloc_cpu_size = 0;
extern void *global_cpu;
struct cpusample sample {};
static struct cpusample *sample = nullptr;
static pthread_mutex_t last_stat_update_mutex = PTHREAD_MUTEX_INITIALIZER;
static double last_stat_update = 0.0;
@ -905,20 +924,30 @@ int update_cpu_usage() {
global_cpu = cpu;
}
allocate_cpu_sample(&sample);
get_cpu_sample(&sample);
total = sample.totalUserTime + sample.totalIdleTime + sample.totalSystemTime;
used = total - sample.totalIdleTime;
if ((total - cpu[0].oldtotal) != 0) {
info.cpu_usage[0] = (static_cast<double>(used - cpu[0].oldused)) /
static_cast<double>(total - cpu[0].oldtotal);
} else {
info.cpu_usage[0] = 0;
/*
* Setup conky's structs for-each core
*/
for (int i = 1; i < info.cpu_count + 1; i++) {
int j = i - 1;
total = sample[i].totalUserTime + sample[i].totalIdleTime + sample[i].totalSystemTime;
used = total - sample[i].totalIdleTime;
if ((total - cpu[j].oldtotal) != 0) {
info.cpu_usage[j] = (static_cast<double>(used - cpu[j].oldused)) /
static_cast<double>(total - cpu[j].oldtotal);
} else {
info.cpu_usage[j] = 0;
}
cpu[j].oldused = used;
cpu[j].oldtotal = total;
}
cpu[0].oldused = used;
cpu[0].oldtotal = total;
return 0;
}
@ -974,50 +1003,62 @@ void get_acpi_fan(char * /*p_client_buffer*/, size_t /*client_buffer_size*/) {
/* void */
char get_freq(char *p_client_buffer, size_t client_buffer_size,
const char *p_format, int divisor, unsigned int /*cpu*/) {
/*
* For now, we get the factory cpu frequency, not **current** cpu frequency
* (Also, it is always the same for every core, so ignore |cpu| argument)
*/
// XXX Probably find a way to get **current** cpu frequency
int mib[2];
unsigned int freq;
size_t len;
const char *p_format, int divisor, unsigned int cpu) {
if ((p_client_buffer == nullptr) || client_buffer_size <= 0 ||
(p_format == nullptr) || divisor <= 0) {
return 0;
}
#ifdef BUILD_IPGFREQ
/*
* Our data is always the same for every core, so ignore |cpu| argument.
*/
static bool initialised = false;
if (!initialised) {
IntelEnergyLibInitialize();
initialised = true;
}
int freq = 0;
GetIAFrequency(cpu, &freq);
snprintf(p_client_buffer, client_buffer_size, p_format,
static_cast<float>(freq) / divisor);
#else
/*
* We get the factory cpu frequency, not **current** cpu frequency
* (Also, it is always the same for every core, so ignore |cpu| argument)
* Enable BUILD_IPGFREQ for getting current frequency.
*/
int mib[2];
unsigned int freq;
size_t len;
mib[0] = CTL_HW;
mib[1] = HW_CPU_FREQ;
len = sizeof(freq);
if (sysctl(mib, 2, &freq, &len, nullptr, 0) == 0) {
/*
* convert to MHz
*/
divisor *= 1000000;
snprintf(p_client_buffer, client_buffer_size, p_format,
static_cast<float>(freq) / divisor);
} else {
snprintf(p_client_buffer, client_buffer_size, p_format, 0.0f);
return 0;
}
#endif
return 1;
}
#if 0
void update_wifi_stats(void)
{
printf("update_wifi_stats: STUB but also in #if 0\n");
}
#endif
int update_diskio() {
printf("update_diskio: STUB\n");
return 0;
@ -1058,11 +1099,13 @@ static void calc_cpu_usage_for_proc(struct process *proc, uint64_t total) {
*/
static void calc_cpu_total(struct process *proc, uint64_t *total) {
uint64_t current_total = 0; /* of current iteration */
struct cpusample sample {};
struct cpusample *sample = nullptr;
allocate_cpu_sample(&sample);
get_cpu_sample(&sample);
current_total =
sample.totalUserTime + sample.totalIdleTime + sample.totalSystemTime;
sample[0].totalUserTime + sample[0].totalIdleTime + sample[0].totalSystemTime;
*total = current_total - proc->previous_total_cpu_time;
proc->previous_total_cpu_time = current_total;
@ -1175,17 +1218,7 @@ void get_top_info() {
struct kinfo_proc *p = nullptr;
/*
* QUICKFIX for #16
* XXX if we run conky -t '${top_mem mem 1}' it will crash because
* info.cpu_count is not initialised.
*
* We can initialise it down here, but it seems like in the linux
* implementation of get_top_info() there is no call to the get_cpu_count()
* function. Neither is there in core.cc... If this is the case, when is
* info.cpu_count initialised???
*
* Find a proper better place for get_cpu_count() call. (for comformance with
* linux.cc)
* See #16
*/
get_cpu_count();

View File

@ -126,9 +126,7 @@ int check_mount(char *s) {
mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
for (i = mntsize - 1; i >= 0; i--) {
if (strcmp(mntbuf[i].f_mntonname, s) == 0) {
return 1;
}
if (strcmp(mntbuf[i].f_mntonname, s) == 0) { return 1; }
}
return 0;
@ -178,13 +176,9 @@ int update_net_stats(void) {
/* get delta */
delta = current_update_time - last_update_time;
if (delta <= 0.0001) {
return 0;
}
if (delta <= 0.0001) { return 0; }
if (getifaddrs(&ifap) < 0) {
return 0;
}
if (getifaddrs(&ifap) < 0) { return 0; }
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
ns = get_net_stat((const char *)ifa->ifa_name, nullptr, NULL);
@ -196,9 +190,7 @@ int update_net_stats(void) {
last_recv = ns->recv;
last_trans = ns->trans;
if (ifa->ifa_addr->sa_family != AF_LINK) {
continue;
}
if (ifa->ifa_addr->sa_family != AF_LINK) { continue; }
for (iftmp = ifa->ifa_next;
iftmp != nullptr && strcmp(ifa->ifa_name, iftmp->ifa_name) == 0;
@ -286,9 +278,7 @@ void get_cpu_count(void) {
}
info.cpu_usage = (float *)malloc((info.cpu_count + 1) * sizeof(float));
if (info.cpu_usage == nullptr) {
CRIT_ERR(nullptr, NULL, "malloc");
}
if (info.cpu_usage == nullptr) { CRIT_ERR(nullptr, NULL, "malloc"); }
}
struct cpu_info {
@ -357,6 +347,8 @@ int update_cpu_usage(void) {
return 0;
}
void free_cpu(struct text_object *) { /* no-op */ }
int update_load_average(void) {
double v[3];
@ -489,9 +481,7 @@ void get_acpi_ac_adapter(char *p_client_buffer, size_t client_buffer_size,
(void)adapter; // only linux uses this
if (!p_client_buffer || client_buffer_size <= 0) {
return;
}
if (!p_client_buffer || client_buffer_size <= 0) { return; }
if (GETSYSCTL("hw.acpi.acline", state)) {
fprintf(stderr, "Cannot read sysctl \"hw.acpi.acline\"\n");
@ -711,9 +701,7 @@ void get_top_info(void) {
#define APM_UNKNOWN 255
int apm_getinfo(int fd, apm_info_t aip) {
if (ioctl(fd, APMIO_GETINFO, aip) == -1) {
return -1;
}
if (ioctl(fd, APMIO_GETINFO, aip) == -1) { return -1; }
return 0;
}

View File

@ -371,6 +371,8 @@ int update_cpu_usage(void) {
return 0;
}
void free_cpu(struct text_object *) { /* no-op */ }
int update_load_average(void) {
double v[3];
@ -641,9 +643,7 @@ int update_diskio(void) {
free(dev_select);
}
if (statinfo_cur.dinfo->mem_ptr) {
free(statinfo_cur.dinfo->mem_ptr);
}
if (statinfo_cur.dinfo->mem_ptr) { free(statinfo_cur.dinfo->mem_ptr); }
free(statinfo_cur.dinfo);
return 0;
}

View File

@ -143,6 +143,8 @@ int update_cpu_usage() {
return 1;
}
void free_cpu(struct text_object *) { /* no-op */ }
int update_load_average() {
// TODO
return 1;

View File

@ -936,6 +936,8 @@ int update_cpu_usage(void) {
return 0;
}
void free_cpu(struct text_object *) { /* no-op */ }
// fscanf() that reads floats with points even if you are using a locale where
// floats are with commas
int fscanf_no_i18n(FILE *stream, const char *format, ...) {

View File

@ -476,7 +476,11 @@ int interface_up(struct text_object *obj) {
if (dev == nullptr) { return 0; }
#if defined(__APPLE__) && defined(__MACH__)
if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
#else
if ((fd = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0)) < 0) {
#endif
CRIT_ERR(nullptr, nullptr, "could not create sockfd");
return 0;
}

View File

@ -286,6 +286,8 @@ void update_cpu_usage() {
oldtotal = total;
}
void free_cpu(struct text_object *) { /* no-op */ }
void update_load_average() {
double v[3];

View File

@ -400,6 +400,9 @@ void update_cpu_usage() {
#endif
}
void free_cpu(struct text_object *) { /* no-op */
}
void update_load_average() {
double v[3];

View File

@ -314,6 +314,8 @@ int update_cpu_usage(void) {
return 0;
}
void free_cpu(struct text_object *) { /* no-op */ }
void update_proc_entry(struct process *p) {
psinfo_t proc;
int fd;