Use indentation to increase readability
Granted, this style is definitely not common, but for the short utility-functions of this program it's just the right choice. This provides great flexibility, such that in the long run, it will be possible to also share code between the OS-implementations. This also keeps the state-keeping at a minimum and makes it clearer which functions are implemented on which OS without having to jiggle around with too many files in the process.
This commit is contained in:
		 Laslo Hunhold
					Laslo Hunhold
				
			
				
					committed by
					
						 Aaron Marcher
						Aaron Marcher
					
				
			
			
				
	
			
			
			 Aaron Marcher
						Aaron Marcher
					
				
			
						parent
						
							42edfea89a
						
					
				
				
					commit
					9750a3d731
				
			
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							| @@ -11,7 +11,7 @@ Copyright 2016-2017 Quentin Rameau <quinq@fifth.space> | ||||
| Copyright 2016 Mike Coddington <mike@coddington.us> | ||||
| Copyright 2016-2018 parazyd <parazyd@dyne.org> | ||||
| Copyright 2017 Tobias Stoeckmann <tobias@stoeckmann.org> | ||||
| Copyright 2017 Laslo Hunhold <dev@frign.de> | ||||
| Copyright 2017-2018 Laslo Hunhold <dev@frign.de> | ||||
| Copyright 2018 Darron Anderson <darronanderson@protonmail.com> | ||||
|  | ||||
| Permission to use, copy, modify, and/or distribute this software for any | ||||
|   | ||||
| @@ -2,90 +2,90 @@ | ||||
| #include <errno.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #if defined(__linux__) | ||||
| #include <limits.h> | ||||
| #include <string.h> | ||||
| #elif defined(__OpenBSD__) | ||||
| #include <sys/ioctl.h> | ||||
| #include <fcntl.h> | ||||
| #include <unistd.h> | ||||
| #include <machine/apmvar.h> | ||||
| #endif | ||||
|  | ||||
| #include "../util.h" | ||||
|  | ||||
| #if defined(__linux__) | ||||
| const char * | ||||
| battery_perc(const char *bat) | ||||
| { | ||||
| 	int perc; | ||||
| 	char path[PATH_MAX]; | ||||
| 	#include <limits.h> | ||||
|  | ||||
| 	snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/capacity"); | ||||
| 	return (pscanf(path, "%i", &perc) == 1) ? | ||||
| 	       bprintf("%d", perc) : NULL; | ||||
| } | ||||
| #elif defined(__OpenBSD__) | ||||
| const char * | ||||
| battery_perc(const char *null) | ||||
| { | ||||
| 	struct apm_power_info apm_info; | ||||
| 	int fd; | ||||
| 	const char * | ||||
| 	battery_perc(const char *bat) | ||||
| 	{ | ||||
| 		int perc; | ||||
| 		char path[PATH_MAX]; | ||||
|  | ||||
| 	fd = open("/dev/apm", O_RDONLY); | ||||
| 	if (fd < 0) { | ||||
| 		fprintf(stderr, "open '/dev/apm': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 		snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", | ||||
| 		         bat, "/capacity"); | ||||
| 		return (pscanf(path, "%i", &perc) == 1) ? | ||||
| 		       bprintf("%d", perc) : NULL; | ||||
| 	} | ||||
|  | ||||
| 	if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) { | ||||
| 		fprintf(stderr, "ioctl 'APM_IOC_GETPOWER': %s\n", strerror(errno)); | ||||
| 		close(fd); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	close(fd); | ||||
| 	const char * | ||||
| 	battery_power(const char *bat) | ||||
| 	{ | ||||
| 		int watts; | ||||
| 		char path[PATH_MAX]; | ||||
|  | ||||
| 	return bprintf("%d", apm_info.battery_life); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #if defined(__linux__) | ||||
| const char * | ||||
| battery_power(const char *bat) | ||||
| { | ||||
| 	int watts; | ||||
| 	char path[PATH_MAX]; | ||||
|  | ||||
| 	snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/power_now"); | ||||
| 	return (pscanf(path, "%i", &watts) == 1) ? | ||||
| 	       bprintf("%d", (watts + 500000) / 1000000) : NULL; | ||||
| } | ||||
|  | ||||
| const char * | ||||
| battery_state(const char *bat) | ||||
| { | ||||
| 	struct { | ||||
| 		char *state; | ||||
| 		char *symbol; | ||||
| 	} map[] = { | ||||
| 		{ "Charging",    "+" }, | ||||
| 		{ "Discharging", "-" }, | ||||
| 		{ "Full",        "=" }, | ||||
| 		{ "Unknown",     "/" }, | ||||
| 	}; | ||||
| 	size_t i; | ||||
| 	char path[PATH_MAX], state[12]; | ||||
|  | ||||
| 	snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/status"); | ||||
| 	if (pscanf(path, "%12s", state) != 1) { | ||||
| 		return NULL; | ||||
| 		snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", | ||||
| 		         bat, "/power_now"); | ||||
| 		return (pscanf(path, "%i", &watts) == 1) ? | ||||
| 		       bprintf("%d", (watts + 500000) / 1000000) : NULL; | ||||
| 	} | ||||
|  | ||||
| 	for (i = 0; i < LEN(map); i++) { | ||||
| 		if (!strcmp(map[i].state, state)) { | ||||
| 			break; | ||||
| 	const char * | ||||
| 	battery_state(const char *bat) | ||||
| 	{ | ||||
| 		struct { | ||||
| 			char *state; | ||||
| 			char *symbol; | ||||
| 		} map[] = { | ||||
| 			{ "Charging",    "+" }, | ||||
| 			{ "Discharging", "-" }, | ||||
| 			{ "Full",        "=" }, | ||||
| 			{ "Unknown",     "/" }, | ||||
| 		}; | ||||
| 		size_t i; | ||||
| 		char path[PATH_MAX], state[12]; | ||||
|  | ||||
| 		snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", | ||||
| 		         bat, "/status"); | ||||
| 		if (pscanf(path, "%12s", state) != 1) { | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		for (i = 0; i < LEN(map); i++) { | ||||
| 			if (!strcmp(map[i].state, state)) { | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		return (i == LEN(map)) ? "?" : map[i].symbol; | ||||
| 	} | ||||
| #elif defined(__OpenBSD__) | ||||
| 	#include <fcntl.h> | ||||
| 	#include <machine/apmvar.h> | ||||
| 	#include <sys/ioctl.h> | ||||
| 	#include <unistd.h> | ||||
|  | ||||
| 	const char * | ||||
| 	battery_perc(const char *null) | ||||
| 	{ | ||||
| 		struct apm_power_info apm_info; | ||||
| 		int fd; | ||||
|  | ||||
| 		fd = open("/dev/apm", O_RDONLY); | ||||
| 		if (fd < 0) { | ||||
| 			fprintf(stderr, "open '/dev/apm': %s\n", strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) { | ||||
| 			fprintf(stderr, "ioctl 'APM_IOC_GETPOWER': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			close(fd); | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		close(fd); | ||||
|  | ||||
| 		return bprintf("%d", apm_info.battery_life); | ||||
| 	} | ||||
| 	return (i == LEN(map)) ? "?" : map[i].symbol; | ||||
| } | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										134
									
								
								components/cpu.c
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								components/cpu.c
									
									
									
									
									
								
							| @@ -2,87 +2,91 @@ | ||||
| #include <errno.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #if defined(__OpenBSD__) | ||||
| #include <sys/sysctl.h> | ||||
| #endif | ||||
|  | ||||
| #include "../util.h" | ||||
|  | ||||
| #if defined(__linux__) | ||||
| const char * | ||||
| cpu_freq(void) | ||||
| { | ||||
| 	int freq; | ||||
| 	const char * | ||||
| 	cpu_freq(void) | ||||
| 	{ | ||||
| 		int freq; | ||||
|  | ||||
| 	return (pscanf("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", | ||||
| 	               "%i", &freq) == 1) ? | ||||
| 	       bprintf("%d", (freq + 500) / 1000) : NULL; | ||||
| } | ||||
|  | ||||
| const char * | ||||
| cpu_perc(void) | ||||
| { | ||||
| 	int perc; | ||||
| 	static long double a[7]; | ||||
| 	static int valid; | ||||
| 	long double b[7]; | ||||
|  | ||||
| 	memcpy(b, a, sizeof(b)); | ||||
| 	if (pscanf("/proc/stat", "%*s %Lf %Lf %Lf %Lf %Lf %Lf %Lf", &a[0], &a[1], &a[2], | ||||
| 	           &a[3], &a[4], &a[5], &a[6]) != 7) { | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	if (!valid) { | ||||
| 		valid = 1; | ||||
| 		return NULL; | ||||
| 		return (pscanf("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", | ||||
| 		               "%i", &freq) == 1) ? | ||||
| 		       bprintf("%d", (freq + 500) / 1000) : NULL; | ||||
| 	} | ||||
|  | ||||
| 	perc = 100 * ((b[0]+b[1]+b[2]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[5]+a[6])) / | ||||
| 	       ((b[0]+b[1]+b[2]+b[3]+b[4]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6])); | ||||
| 	const char * | ||||
| 	cpu_perc(void) | ||||
| 	{ | ||||
| 		int perc; | ||||
| 		static long double a[7]; | ||||
| 		static int valid; | ||||
| 		long double b[7]; | ||||
|  | ||||
| 	return bprintf("%d", perc); | ||||
| } | ||||
| 		memcpy(b, a, sizeof(b)); | ||||
| 		if (pscanf("/proc/stat", "%*s %Lf %Lf %Lf %Lf %Lf %Lf %Lf", | ||||
| 		           &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6]) != 7) { | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		if (!valid) { | ||||
| 			valid = 1; | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| const char * | ||||
| cpu_iowait(void) | ||||
| { | ||||
| 	int perc; | ||||
| 	static int valid; | ||||
| 	static long double a[7]; | ||||
| 	long double b[7]; | ||||
| 		perc = 100 * | ||||
| 		       ((b[0]+b[1]+b[2]+b[5]+b[6]) - | ||||
| 		        (a[0]+a[1]+a[2]+a[5]+a[6])) / | ||||
| 		       ((b[0]+b[1]+b[2]+b[3]+b[4]+b[5]+b[6]) - | ||||
| 		        (a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6])); | ||||
|  | ||||
| 	memcpy(b, a, sizeof(b)); | ||||
| 	if (pscanf("/proc/stat", "%*s %Lf %Lf %Lf %Lf %Lf %Lf %Lf", &a[0], &a[1], &a[2], | ||||
| 	           &a[3], &a[4], &a[5], &a[6]) != 7) { | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	if (!valid) { | ||||
| 		valid = 1; | ||||
| 		return NULL; | ||||
| 		return bprintf("%d", perc); | ||||
| 	} | ||||
|  | ||||
| 	perc = 100 * ((b[4]) - (a[4])) / | ||||
| 	       ((b[0]+b[1]+b[2]+b[3]+b[4]+b[5]+b[6]) - (a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6])); | ||||
| 	const char * | ||||
| 	cpu_iowait(void) | ||||
| 	{ | ||||
| 		int perc; | ||||
| 		static int valid; | ||||
| 		static long double a[7]; | ||||
| 		long double b[7]; | ||||
|  | ||||
| 	return bprintf("%d", perc); | ||||
| } | ||||
| 		memcpy(b, a, sizeof(b)); | ||||
| 		if (pscanf("/proc/stat", "%*s %Lf %Lf %Lf %Lf %Lf %Lf %Lf", | ||||
| 		           &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6]) != 7) { | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		if (!valid) { | ||||
| 			valid = 1; | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		perc = 100 * ((b[4]) - (a[4])) / | ||||
| 		       ((b[0]+b[1]+b[2]+b[3]+b[4]+b[5]+b[6]) - | ||||
| 		        (a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6])); | ||||
|  | ||||
| 		return bprintf("%d", perc); | ||||
| 	} | ||||
| #elif defined(__OpenBSD__) | ||||
| const char * | ||||
| cpu_freq(void) | ||||
| { | ||||
| 	int freq, mib[2]; | ||||
| 	size_t size; | ||||
| 	#include <sys/sysctl.h> | ||||
|  | ||||
| 	mib[0] = CTL_HW; | ||||
| 	mib[1] = HW_CPUSPEED; | ||||
| 	const char * | ||||
| 	cpu_freq(void) | ||||
| 	{ | ||||
| 		int freq, mib[2]; | ||||
| 		size_t size; | ||||
|  | ||||
| 	size = sizeof(freq); | ||||
| 		mib[0] = CTL_HW; | ||||
| 		mib[1] = HW_CPUSPEED; | ||||
|  | ||||
| 	if (sysctl(mib, 2, &freq, &size, NULL, 0) == -1) { | ||||
| 		fprintf(stderr, "sysctl 'HW_CPUSPEED': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 		size = sizeof(freq); | ||||
|  | ||||
| 		if (sysctl(mib, 2, &freq, &size, NULL, 0) == -1) { | ||||
| 			fprintf(stderr, "sysctl 'HW_CPUSPEED': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		return bprintf("%d", freq); | ||||
| 	} | ||||
|  | ||||
| 	return bprintf("%d", freq); | ||||
| } | ||||
| #endif | ||||
|   | ||||
| @@ -1,15 +1,18 @@ | ||||
| /* See LICENSE file for copyright and license details. */ | ||||
| #if defined(__linux__) | ||||
| #include <stdio.h> | ||||
| 	#include <stdio.h> | ||||
|  | ||||
| #include "../util.h" | ||||
| 	#include "../util.h" | ||||
|  | ||||
| const char * | ||||
| entropy(void) | ||||
| { | ||||
| 	int num; | ||||
| 	const char * | ||||
| 	entropy(void) | ||||
| 	{ | ||||
| 		int num; | ||||
|  | ||||
| 	return (pscanf("/proc/sys/kernel/random/entropy_avail", "%d", &num) == 1) ? | ||||
| 	               bprintf("%d", num) : NULL; | ||||
| } | ||||
| 		return (pscanf("/proc/sys/kernel/random/entropy_avail", | ||||
| 		               "%d", &num) == 1) ? | ||||
| 		       bprintf("%d", num) : NULL; | ||||
| 	} | ||||
| #elif defined(__OpenBSD__) | ||||
| 	/* unimplemented */ | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										198
									
								
								components/ram.c
									
									
									
									
									
								
							
							
						
						
									
										198
									
								
								components/ram.c
									
									
									
									
									
								
							| @@ -1,129 +1,133 @@ | ||||
| /* See LICENSE file for copyright and license details. */ | ||||
| #include <stdio.h> | ||||
| #if defined (__OpenBSD__) | ||||
| #include <sys/types.h> | ||||
| #include <sys/sysctl.h> | ||||
| #include <stdlib.h> | ||||
| #include <unistd.h> | ||||
| #endif | ||||
|  | ||||
| #include "../util.h" | ||||
|  | ||||
| #if defined(__linux__) | ||||
| const char * | ||||
| ram_free(void) | ||||
| { | ||||
| 	long free; | ||||
| 	const char * | ||||
| 	ram_free(void) | ||||
| 	{ | ||||
| 		long free; | ||||
|  | ||||
| 	return (pscanf("/proc/meminfo", "MemFree: %ld kB\n", &free) == 1) ? | ||||
| 	       bprintf("%f", (float)free / 1024 / 1024) : NULL; | ||||
| } | ||||
| 		return (pscanf("/proc/meminfo", "MemFree: %ld kB\n", &free) == 1) ? | ||||
| 		       bprintf("%f", (float)free / 1024 / 1024) : NULL; | ||||
| 	} | ||||
|  | ||||
| const char * | ||||
| ram_perc(void) | ||||
| { | ||||
| 	long total, free, buffers, cached; | ||||
| 	const char * | ||||
| 	ram_perc(void) | ||||
| 	{ | ||||
| 		long total, free, buffers, cached; | ||||
|  | ||||
| 	return (pscanf("/proc/meminfo", | ||||
| 	               "MemTotal: %ld kB\n" | ||||
| 	               "MemFree: %ld kB\n" | ||||
| 	               "MemAvailable: %ld kB\nBuffers: %ld kB\n" | ||||
| 	               "Cached: %ld kB\n", | ||||
| 	               &total, &free, &buffers, &buffers, &cached) == 5) ? | ||||
| 	       bprintf("%d", 100 * ((total - free) - (buffers + cached)) / total) : | ||||
| 	       NULL; | ||||
| } | ||||
| 		return (pscanf("/proc/meminfo", | ||||
| 		               "MemTotal: %ld kB\n" | ||||
| 		               "MemFree: %ld kB\n" | ||||
| 		               "MemAvailable: %ld kB\nBuffers: %ld kB\n" | ||||
| 		               "Cached: %ld kB\n", | ||||
| 		               &total, &free, &buffers, &buffers, &cached) == 5) ? | ||||
| 		       bprintf("%d", 100 * ((total - free) - (buffers + cached)) / | ||||
| 		               total) : | ||||
| 		       NULL; | ||||
| 	} | ||||
|  | ||||
| const char * | ||||
| ram_total(void) | ||||
| { | ||||
| 	long total; | ||||
| 	const char * | ||||
| 	ram_total(void) | ||||
| 	{ | ||||
| 		long total; | ||||
|  | ||||
| 	return (pscanf("/proc/meminfo", "MemTotal: %ld kB\n", &total) == 1) ? | ||||
| 	       bprintf("%f", (float)total / 1024 / 1024) : NULL; | ||||
| } | ||||
| 		return (pscanf("/proc/meminfo", "MemTotal: %ld kB\n", &total) == 1) ? | ||||
| 		       bprintf("%f", (float)total / 1024 / 1024) : NULL; | ||||
| 	} | ||||
|  | ||||
| const char * | ||||
| ram_used(void) | ||||
| { | ||||
| 	long total, free, buffers, cached; | ||||
| 	const char * | ||||
| 	ram_used(void) | ||||
| 	{ | ||||
| 		long total, free, buffers, cached; | ||||
|  | ||||
| 	return (pscanf("/proc/meminfo", | ||||
| 	               "MemTotal: %ld kB\n" | ||||
| 	               "MemFree: %ld kB\n" | ||||
| 	               "MemAvailable: %ld kB\nBuffers: %ld kB\n" | ||||
| 	               "Cached: %ld kB\n", | ||||
| 	               &total, &free, &buffers, &buffers, &cached) == 5) ? | ||||
| 	       bprintf("%f", (float)(total - free - buffers - cached) / 1024 / 1024) : | ||||
| 	       NULL; | ||||
| } | ||||
| 		return (pscanf("/proc/meminfo", | ||||
| 		               "MemTotal: %ld kB\n" | ||||
| 		               "MemFree: %ld kB\n" | ||||
| 		               "MemAvailable: %ld kB\nBuffers: %ld kB\n" | ||||
| 		               "Cached: %ld kB\n", | ||||
| 		               &total, &free, &buffers, &buffers, &cached) == 5) ? | ||||
| 		       bprintf("%f", (float)(total - free - buffers - cached) / | ||||
| 		               1024 / 1024) : | ||||
| 		       NULL; | ||||
| 	} | ||||
| #elif defined(__OpenBSD__) | ||||
| inline int | ||||
| load_uvmexp(struct uvmexp *uvmexp) | ||||
| { | ||||
| 	int uvmexp_mib[] = {CTL_VM, VM_UVMEXP}; | ||||
| 	size_t size; | ||||
| 	#include <sys/types.h> | ||||
| 	#include <sys/sysctl.h> | ||||
| 	#include <stdlib.h> | ||||
| 	#include <unistd.h> | ||||
|  | ||||
| 	size = sizeof(*uvmexp); | ||||
| 	inline int | ||||
| 	load_uvmexp(struct uvmexp *uvmexp) | ||||
| 	{ | ||||
| 		int uvmexp_mib[] = {CTL_VM, VM_UVMEXP}; | ||||
| 		size_t size; | ||||
|  | ||||
| 	return sysctl(uvmexp_mib, 2, uvmexp, &size, NULL, 0) >= 0 ? 1 : 0; | ||||
| } | ||||
| 		size = sizeof(*uvmexp); | ||||
|  | ||||
| const char * | ||||
| ram_free(void) | ||||
| { | ||||
| 	struct uvmexp uvmexp; | ||||
| 	float free; | ||||
| 	int free_pages; | ||||
|  | ||||
| 	if (load_uvmexp(&uvmexp)) { | ||||
| 		free_pages = uvmexp.npages - uvmexp.active; | ||||
| 		free = (double) (free_pages * uvmexp.pagesize) / 1024 / 1024 / 1024; | ||||
| 		return bprintf("%f", free); | ||||
| 		return sysctl(uvmexp_mib, 2, uvmexp, &size, NULL, 0) >= 0 ? 1 : 0; | ||||
| 	} | ||||
|  | ||||
| 	return NULL; | ||||
| } | ||||
| 	const char * | ||||
| 	ram_free(void) | ||||
| 	{ | ||||
| 		struct uvmexp uvmexp; | ||||
| 		float free; | ||||
| 		int free_pages; | ||||
|  | ||||
| const char * | ||||
| ram_perc(void) | ||||
| { | ||||
| 	struct uvmexp uvmexp; | ||||
| 	int percent; | ||||
| 		if (load_uvmexp(&uvmexp)) { | ||||
| 			free_pages = uvmexp.npages - uvmexp.active; | ||||
| 			free = (double) (free_pages * uvmexp.pagesize) / 1024 / | ||||
| 			       1024 / 1024; | ||||
| 			return bprintf("%f", free); | ||||
| 		} | ||||
|  | ||||
| 	if (load_uvmexp(&uvmexp)) { | ||||
| 		percent = uvmexp.active * 100 / uvmexp.npages; | ||||
| 		return bprintf("%d", percent); | ||||
| 		return NULL; | ||||
| 	} | ||||
|  | ||||
| 	return NULL; | ||||
| } | ||||
| 	const char * | ||||
| 	ram_perc(void) | ||||
| 	{ | ||||
| 		struct uvmexp uvmexp; | ||||
| 		int percent; | ||||
|  | ||||
| const char * | ||||
| ram_total(void) | ||||
| { | ||||
| 	struct uvmexp uvmexp; | ||||
| 	float total; | ||||
| 		if (load_uvmexp(&uvmexp)) { | ||||
| 			percent = uvmexp.active * 100 / uvmexp.npages; | ||||
| 			return bprintf("%d", percent); | ||||
| 		} | ||||
|  | ||||
| 	if (load_uvmexp(&uvmexp)) { | ||||
| 		total = (double) (uvmexp.npages * uvmexp.pagesize) / 1024 / 1024 / 1024; | ||||
| 		return bprintf("%f", total); | ||||
| 		return NULL; | ||||
| 	} | ||||
|  | ||||
| 	return NULL; | ||||
| } | ||||
| 	const char * | ||||
| 	ram_total(void) | ||||
| 	{ | ||||
| 		struct uvmexp uvmexp; | ||||
| 		float total; | ||||
|  | ||||
| const char * | ||||
| ram_used(void) | ||||
| { | ||||
| 	struct uvmexp uvmexp; | ||||
| 	float used; | ||||
| 		if (load_uvmexp(&uvmexp)) { | ||||
| 			total = (double) (uvmexp.npages * uvmexp.pagesize) / | ||||
| 			        1024 / 1024 / 1024; | ||||
| 			return bprintf("%f", total); | ||||
| 		} | ||||
|  | ||||
| 	if (load_uvmexp(&uvmexp)) { | ||||
| 		used = (double) (uvmexp.active * uvmexp.pagesize) / 1024 / 1024 / 1024; | ||||
| 		return bprintf("%f", used); | ||||
| 		return NULL; | ||||
| 	} | ||||
|  | ||||
| 	return NULL; | ||||
| } | ||||
| 	const char * | ||||
| 	ram_used(void) | ||||
| 	{ | ||||
| 		struct uvmexp uvmexp; | ||||
| 		float used; | ||||
|  | ||||
| 		if (load_uvmexp(&uvmexp)) { | ||||
| 			used = (double) (uvmexp.active * uvmexp.pagesize) / | ||||
| 			       1024 / 1024 / 1024; | ||||
| 			return bprintf("%f", used); | ||||
| 		} | ||||
|  | ||||
| 		return NULL; | ||||
| 	} | ||||
| #endif | ||||
|   | ||||
| @@ -1,138 +1,152 @@ | ||||
| /* See LICENSE file for copyright and license details. */ | ||||
| #if defined(__linux__) | ||||
| #include <errno.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| 	#include <errno.h> | ||||
| 	#include <stdio.h> | ||||
| 	#include <string.h> | ||||
|  | ||||
| #include "../util.h" | ||||
| 	#include "../util.h" | ||||
|  | ||||
| const char * | ||||
| swap_free(void) | ||||
| { | ||||
| 	long total, free; | ||||
| 	FILE *fp; | ||||
| 	size_t bytes_read; | ||||
| 	char *match; | ||||
| 	const char * | ||||
| 	swap_free(void) | ||||
| 	{ | ||||
| 		long total, free; | ||||
| 		FILE *fp; | ||||
| 		size_t bytes_read; | ||||
| 		char *match; | ||||
|  | ||||
| 	fp = fopen("/proc/meminfo", "r"); | ||||
| 	if (fp == NULL) { | ||||
| 		fprintf(stderr, "fopen '/proc/meminfo': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 		fp = fopen("/proc/meminfo", "r"); | ||||
| 		if (fp == NULL) { | ||||
| 			fprintf(stderr, "fopen '/proc/meminfo': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 	if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) { | ||||
| 		fprintf(stderr, "fread '/proc/meminfo': %s\n", strerror(errno)); | ||||
| 		if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, | ||||
| 		                        fp)) == 0) { | ||||
| 			fprintf(stderr, "fread '/proc/meminfo': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			fclose(fp); | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		fclose(fp); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	fclose(fp); | ||||
|  | ||||
| 	if ((match = strstr(buf, "SwapTotal")) == NULL) | ||||
| 		return NULL; | ||||
| 	sscanf(match, "SwapTotal: %ld kB\n", &total); | ||||
| 		if ((match = strstr(buf, "SwapTotal")) == NULL) | ||||
| 			return NULL; | ||||
| 		sscanf(match, "SwapTotal: %ld kB\n", &total); | ||||
|  | ||||
| 	if ((match = strstr(buf, "SwapFree")) == NULL) | ||||
| 		return NULL; | ||||
| 	sscanf(match, "SwapFree: %ld kB\n", &free); | ||||
| 		if ((match = strstr(buf, "SwapFree")) == NULL) | ||||
| 			return NULL; | ||||
| 		sscanf(match, "SwapFree: %ld kB\n", &free); | ||||
|  | ||||
| 	return bprintf("%f", (float)free / 1024 / 1024); | ||||
| } | ||||
|  | ||||
| const char * | ||||
| swap_perc(void) | ||||
| { | ||||
| 	long total, free, cached; | ||||
| 	FILE *fp; | ||||
| 	size_t bytes_read; | ||||
| 	char *match; | ||||
|  | ||||
| 	fp = fopen("/proc/meminfo", "r"); | ||||
| 	if (fp == NULL) { | ||||
| 		fprintf(stderr, "fopen '/proc/meminfo': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 		return bprintf("%f", (float)free / 1024 / 1024); | ||||
| 	} | ||||
|  | ||||
| 	if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) { | ||||
| 		fprintf(stderr, "fread '/proc/meminfo': %s\n", strerror(errno)); | ||||
| 	const char * | ||||
| 	swap_perc(void) | ||||
| 	{ | ||||
| 		long total, free, cached; | ||||
| 		FILE *fp; | ||||
| 		size_t bytes_read; | ||||
| 		char *match; | ||||
|  | ||||
| 		fp = fopen("/proc/meminfo", "r"); | ||||
| 		if (fp == NULL) { | ||||
| 			fprintf(stderr, "fopen '/proc/meminfo': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, | ||||
| 		                        fp)) == 0) { | ||||
| 			fprintf(stderr, "fread '/proc/meminfo': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			fclose(fp); | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		fclose(fp); | ||||
| 		return NULL; | ||||
|  | ||||
| 		if ((match = strstr(buf, "SwapTotal")) == NULL) | ||||
| 			return NULL; | ||||
| 		sscanf(match, "SwapTotal: %ld kB\n", &total); | ||||
|  | ||||
| 		if ((match = strstr(buf, "SwapCached")) == NULL) | ||||
| 			return NULL; | ||||
| 		sscanf(match, "SwapCached: %ld kB\n", &cached); | ||||
|  | ||||
| 		if ((match = strstr(buf, "SwapFree")) == NULL) | ||||
| 			return NULL; | ||||
| 		sscanf(match, "SwapFree: %ld kB\n", &free); | ||||
|  | ||||
| 		return bprintf("%d", 100 * (total - free - cached) / total); | ||||
| 	} | ||||
| 	fclose(fp); | ||||
|  | ||||
| 	if ((match = strstr(buf, "SwapTotal")) == NULL) | ||||
| 		return NULL; | ||||
| 	sscanf(match, "SwapTotal: %ld kB\n", &total); | ||||
| 	const char * | ||||
| 	swap_total(void) | ||||
| 	{ | ||||
| 		long total; | ||||
| 		FILE *fp; | ||||
| 		size_t bytes_read; | ||||
| 		char *match; | ||||
|  | ||||
| 	if ((match = strstr(buf, "SwapCached")) == NULL) | ||||
| 		return NULL; | ||||
| 	sscanf(match, "SwapCached: %ld kB\n", &cached); | ||||
|  | ||||
| 	if ((match = strstr(buf, "SwapFree")) == NULL) | ||||
| 		return NULL; | ||||
| 	sscanf(match, "SwapFree: %ld kB\n", &free); | ||||
|  | ||||
| 	return bprintf("%d", 100 * (total - free - cached) / total); | ||||
| } | ||||
|  | ||||
| const char * | ||||
| swap_total(void) | ||||
| { | ||||
| 	long total; | ||||
| 	FILE *fp; | ||||
| 	size_t bytes_read; | ||||
| 	char *match; | ||||
|  | ||||
| 	fp = fopen("/proc/meminfo", "r"); | ||||
| 	if (fp == NULL) { | ||||
| 		fprintf(stderr, "fopen '/proc/meminfo': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) { | ||||
| 		fprintf(stderr, "fread '/proc/meminfo': %s\n", strerror(errno)); | ||||
| 		fp = fopen("/proc/meminfo", "r"); | ||||
| 		if (fp == NULL) { | ||||
| 			fprintf(stderr, "fopen '/proc/meminfo': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, | ||||
| 		                        fp)) == 0) { | ||||
| 			fprintf(stderr, "fread '/proc/meminfo': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			fclose(fp); | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		fclose(fp); | ||||
| 		return NULL; | ||||
|  | ||||
| 		if ((match = strstr(buf, "SwapTotal")) == NULL) | ||||
| 			return NULL; | ||||
| 		sscanf(match, "SwapTotal: %ld kB\n", &total); | ||||
|  | ||||
| 		return bprintf("%f", (float)total / 1024 / 1024); | ||||
| 	} | ||||
| 	fclose(fp); | ||||
|  | ||||
| 	if ((match = strstr(buf, "SwapTotal")) == NULL) | ||||
| 		return NULL; | ||||
| 	sscanf(match, "SwapTotal: %ld kB\n", &total); | ||||
| 	const char * | ||||
| 	swap_used(void) | ||||
| 	{ | ||||
| 		long total, free, cached; | ||||
| 		FILE *fp; | ||||
| 		size_t bytes_read; | ||||
| 		char *match; | ||||
|  | ||||
| 	return bprintf("%f", (float)total / 1024 / 1024); | ||||
| } | ||||
|  | ||||
| const char * | ||||
| swap_used(void) | ||||
| { | ||||
| 	long total, free, cached; | ||||
| 	FILE *fp; | ||||
| 	size_t bytes_read; | ||||
| 	char *match; | ||||
|  | ||||
| 	fp = fopen("/proc/meminfo", "r"); | ||||
| 	if (fp == NULL) { | ||||
| 		fprintf(stderr, "fopen '/proc/meminfo': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, fp)) == 0) { | ||||
| 		fprintf(stderr, "fread '/proc/meminfo': %s\n", strerror(errno)); | ||||
| 		fp = fopen("/proc/meminfo", "r"); | ||||
| 		if (fp == NULL) { | ||||
| 			fprintf(stderr, "fopen '/proc/meminfo': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1, | ||||
| 		                        fp)) == 0) { | ||||
| 			fprintf(stderr, "fread '/proc/meminfo': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			fclose(fp); | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		fclose(fp); | ||||
| 		return NULL; | ||||
|  | ||||
| 		if ((match = strstr(buf, "SwapTotal")) == NULL) | ||||
| 			return NULL; | ||||
| 		sscanf(match, "SwapTotal: %ld kB\n", &total); | ||||
|  | ||||
| 		if ((match = strstr(buf, "SwapCached")) == NULL) | ||||
| 			return NULL; | ||||
| 		sscanf(match, "SwapCached: %ld kB\n", &cached); | ||||
|  | ||||
| 		if ((match = strstr(buf, "SwapFree")) == NULL) | ||||
| 			return NULL; | ||||
| 		sscanf(match, "SwapFree: %ld kB\n", &free); | ||||
|  | ||||
| 		return bprintf("%f", (float)(total - free - cached) / 1024 / 1024); | ||||
| 	} | ||||
| 	fclose(fp); | ||||
|  | ||||
| 	if ((match = strstr(buf, "SwapTotal")) == NULL) | ||||
| 		return NULL; | ||||
| 	sscanf(match, "SwapTotal: %ld kB\n", &total); | ||||
|  | ||||
| 	if ((match = strstr(buf, "SwapCached")) == NULL) | ||||
| 		return NULL; | ||||
| 	sscanf(match, "SwapCached: %ld kB\n", &cached); | ||||
|  | ||||
| 	if ((match = strstr(buf, "SwapFree")) == NULL) | ||||
| 		return NULL; | ||||
| 	sscanf(match, "SwapFree: %ld kB\n", &free); | ||||
|  | ||||
| 	return bprintf("%f", (float)(total - free - cached) / 1024 / 1024); | ||||
| } | ||||
| #elif defined(__OpenBSD__) | ||||
| 	/* unimplemented */ | ||||
| #endif | ||||
|   | ||||
| @@ -1,45 +1,47 @@ | ||||
| /* See LICENSE file for copyright and license details. */ | ||||
| #include <errno.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #if defined(__OpenBSD__) | ||||
| #include <sys/sysctl.h> | ||||
| #include <sys/time.h> | ||||
| #include <sys/sensors.h> | ||||
| #endif | ||||
| #include <stddef.h> | ||||
|  | ||||
| #include "../util.h" | ||||
|  | ||||
| #if defined(__linux__) | ||||
| const char * | ||||
| temp(const char *file) | ||||
| { | ||||
| 	int temp; | ||||
| 	const char * | ||||
| 	temp(const char *file) | ||||
| 	{ | ||||
| 		int temp; | ||||
|  | ||||
| 	return (pscanf(file, "%d", &temp) == 1) ? | ||||
| 	       bprintf("%d", temp / 1000) : NULL; | ||||
| } | ||||
| #elif defined(__OpenBSD__) | ||||
| const char * | ||||
| temp(const char *null) | ||||
| { | ||||
| 	int mib[5]; | ||||
| 	size_t size; | ||||
| 	struct sensor temp; | ||||
|  | ||||
| 	mib[0] = CTL_HW; | ||||
| 	mib[1] = HW_SENSORS; | ||||
| 	mib[2] = 0; /* cpu0 */ | ||||
| 	mib[3] = SENSOR_TEMP; | ||||
| 	mib[4] = 0; /* temp0 */ | ||||
|  | ||||
| 	size = sizeof(temp); | ||||
|  | ||||
| 	if (sysctl(mib, 5, &temp, &size, NULL, 0) == -1) { | ||||
| 		fprintf(stderr, "sysctl 'SENSOR_TEMP': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 		return (pscanf(file, "%d", &temp) == 1) ? | ||||
| 		       bprintf("%d", temp / 1000) : NULL; | ||||
| 	} | ||||
| #elif defined(__OpenBSD__) | ||||
| 	#include <errno.h> | ||||
| 	#include <stdio.h> | ||||
| 	#include <string.h> | ||||
| 	#include <sys/sysctl.h> | ||||
| 	#include <sys/time.h> | ||||
| 	#include <sys/sensors.h> | ||||
|  | ||||
| 	return bprintf("%d", (temp.value - 273150000) / 1000000); /* kelvin to celsius */ | ||||
| } | ||||
| 	const char * | ||||
| 	temp(const char *null) | ||||
| 	{ | ||||
| 		int mib[5]; | ||||
| 		size_t size; | ||||
| 		struct sensor temp; | ||||
|  | ||||
| 		mib[0] = CTL_HW; | ||||
| 		mib[1] = HW_SENSORS; | ||||
| 		mib[2] = 0; /* cpu0 */ | ||||
| 		mib[3] = SENSOR_TEMP; | ||||
| 		mib[4] = 0; /* temp0 */ | ||||
|  | ||||
| 		size = sizeof(temp); | ||||
|  | ||||
| 		if (sysctl(mib, 5, &temp, &size, NULL, 0) == -1) { | ||||
| 			fprintf(stderr, "sysctl 'SENSOR_TEMP': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		/* kelvin to celsius */ | ||||
| 		return bprintf("%d", (temp.value - 273150000) / 1000000); | ||||
| 	} | ||||
| #endif | ||||
|   | ||||
| @@ -2,62 +2,61 @@ | ||||
| #include <errno.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #if defined(__linux__) | ||||
| #include <sys/sysinfo.h> | ||||
| #elif defined(__OpenBSD__) | ||||
| #include <sys/sysctl.h> | ||||
| #include <sys/time.h> | ||||
| #endif | ||||
|  | ||||
| #include "../util.h" | ||||
|  | ||||
| #if defined(__linux__) | ||||
| const char * | ||||
| uptime(void) | ||||
| { | ||||
| 	int h; | ||||
| 	int m; | ||||
| 	int uptime = 0; | ||||
| 	struct sysinfo info; | ||||
| 	#include <sys/sysinfo.h> | ||||
|  | ||||
| 	sysinfo(&info); | ||||
| 	uptime = info.uptime; | ||||
| 	const char * | ||||
| 	uptime(void) | ||||
| 	{ | ||||
| 		int h; | ||||
| 		int m; | ||||
| 		int uptime = 0; | ||||
| 		struct sysinfo info; | ||||
|  | ||||
| 	h = uptime / 3600; | ||||
| 	m = (uptime - h * 3600) / 60; | ||||
| 		sysinfo(&info); | ||||
| 		uptime = info.uptime; | ||||
|  | ||||
| 	return bprintf("%dh %dm", h, m); | ||||
| } | ||||
| #elif defined(__OpenBSD__) | ||||
| const char * | ||||
| uptime(void) | ||||
| { | ||||
| 	int h; | ||||
| 	int m; | ||||
| 	int uptime = 0; | ||||
| 		h = uptime / 3600; | ||||
| 		m = (uptime - h * 3600) / 60; | ||||
|  | ||||
| 	int mib[2]; | ||||
| 	size_t size; | ||||
| 	time_t now; | ||||
| 	struct timeval boottime; | ||||
|  | ||||
| 	time(&now); | ||||
|  | ||||
| 	mib[0] = CTL_KERN; | ||||
| 	mib[1] = KERN_BOOTTIME; | ||||
|  | ||||
| 	size = sizeof(boottime); | ||||
|  | ||||
| 	if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1) | ||||
| 		uptime = now - boottime.tv_sec; | ||||
| 	else { | ||||
| 		fprintf(stderr, "sysctl 'KERN_BOOTTIME': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 		return bprintf("%dh %dm", h, m); | ||||
| 	} | ||||
| #elif defined(__OpenBSD__) | ||||
| 	#include <sys/sysctl.h> | ||||
| 	#include <sys/time.h> | ||||
|  | ||||
| 	h = uptime / 3600; | ||||
| 	m = (uptime - h * 3600) / 60; | ||||
| 	const char * | ||||
| 	uptime(void) | ||||
| 	{ | ||||
| 		int h; | ||||
| 		int m; | ||||
| 		int uptime = 0; | ||||
|  | ||||
| 	return bprintf("%dh %dm", h, m); | ||||
| } | ||||
| 		int mib[2]; | ||||
| 		size_t size; | ||||
| 		time_t now; | ||||
| 		struct timeval boottime; | ||||
|  | ||||
| 		time(&now); | ||||
|  | ||||
| 		mib[0] = CTL_KERN; | ||||
| 		mib[1] = KERN_BOOTTIME; | ||||
|  | ||||
| 		size = sizeof(boottime); | ||||
|  | ||||
| 		if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1) | ||||
| 			uptime = now - boottime.tv_sec; | ||||
| 		else { | ||||
| 			fprintf(stderr, "sysctl 'KERN_BOOTTIME': %s\n", strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		h = uptime / 3600; | ||||
| 		m = (uptime - h * 3600) / 60; | ||||
|  | ||||
| 		return bprintf("%dh %dm", h, m); | ||||
| 	} | ||||
| #endif | ||||
|   | ||||
| @@ -1,92 +1,100 @@ | ||||
| /* See LICENSE file for copyright and license details. */ | ||||
| #if defined(__linux__) | ||||
| #include <errno.h> | ||||
| #include <ifaddrs.h> | ||||
| #include <linux/wireless.h> | ||||
| #include <sys/socket.h> | ||||
| #include <stdio.h> | ||||
| #include <limits.h> | ||||
| #include <string.h> | ||||
| #include <sys/ioctl.h> | ||||
| #include <unistd.h> | ||||
| 	#include <errno.h> | ||||
| 	#include <ifaddrs.h> | ||||
| 	#include <linux/wireless.h> | ||||
| 	#include <sys/socket.h> | ||||
| 	#include <stdio.h> | ||||
| 	#include <limits.h> | ||||
| 	#include <string.h> | ||||
| 	#include <sys/ioctl.h> | ||||
| 	#include <unistd.h> | ||||
|  | ||||
| #include "../util.h" | ||||
| 	#include "../util.h" | ||||
|  | ||||
| const char * | ||||
| wifi_perc(const char *iface) | ||||
| { | ||||
| 	int i, cur; | ||||
| 	float perc; | ||||
| 	int total = 70; /* the max of /proc/net/wireless */ | ||||
| 	char *p, *datastart; | ||||
| 	char path[PATH_MAX]; | ||||
| 	char status[5]; | ||||
| 	FILE *fp; | ||||
| 	const char * | ||||
| 	wifi_perc(const char *iface) | ||||
| 	{ | ||||
| 		int i, cur; | ||||
| 		float perc; | ||||
| 		int total = 70; /* the max of /proc/net/wireless */ | ||||
| 		char *p, *datastart; | ||||
| 		char path[PATH_MAX]; | ||||
| 		char status[5]; | ||||
| 		FILE *fp; | ||||
|  | ||||
| 	snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface, "/operstate"); | ||||
| 	fp = fopen(path, "r"); | ||||
| 	if (fp == NULL) { | ||||
| 		fprintf(stderr, "fopen '%s': %s\n", path, strerror(errno)); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	p = fgets(status, 5, fp); | ||||
| 	fclose(fp); | ||||
| 	if(!p || strcmp(status, "up\n") != 0) { | ||||
| 		return NULL; | ||||
| 		snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface, | ||||
| 		         "/operstate"); | ||||
| 		fp = fopen(path, "r"); | ||||
| 		if (fp == NULL) { | ||||
| 			fprintf(stderr, "fopen '%s': %s\n", path, | ||||
| 			        strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		p = fgets(status, 5, fp); | ||||
| 		fclose(fp); | ||||
| 		if(!p || strcmp(status, "up\n") != 0) { | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		fp = fopen("/proc/net/wireless", "r"); | ||||
| 		if (fp == NULL) { | ||||
| 			fprintf(stderr, "fopen '/proc/net/wireless': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 		for (i = 0; i < 3; i++) { | ||||
| 			if (!(p = fgets(buf, sizeof(buf) - 1, fp))) | ||||
| 				break; | ||||
| 		} | ||||
| 		fclose(fp); | ||||
| 		if (i < 2 || !p) | ||||
| 			return NULL; | ||||
|  | ||||
| 		if ((datastart = strstr(buf, iface)) == NULL) | ||||
| 			return NULL; | ||||
|  | ||||
| 		datastart = (datastart+(strlen(iface)+1)); | ||||
| 		sscanf(datastart + 1, " %*d   %d  %*d  %*d\t\t  %*d\t   " | ||||
| 		       "%*d\t\t%*d\t\t %*d\t  %*d\t\t %*d", &cur); | ||||
|  | ||||
| 		perc = (float)cur / total * 100.0; | ||||
|  | ||||
| 		return bprintf("%.0f", perc); | ||||
| 	} | ||||
|  | ||||
| 	fp = fopen("/proc/net/wireless", "r"); | ||||
| 	if (fp == NULL) { | ||||
| 		fprintf(stderr, "fopen '/proc/net/wireless': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	const char * | ||||
| 	wifi_essid(const char *iface) | ||||
| 	{ | ||||
| 		static char id[IW_ESSID_MAX_SIZE+1]; | ||||
| 		int sockfd = socket(AF_INET, SOCK_DGRAM, 0); | ||||
| 		struct iwreq wreq; | ||||
|  | ||||
| 	for (i = 0; i < 3; i++) { | ||||
| 		if (!(p = fgets(buf, sizeof(buf) - 1, fp))) | ||||
| 			break; | ||||
| 	} | ||||
| 	fclose(fp); | ||||
| 	if (i < 2 || !p) | ||||
| 		return NULL; | ||||
| 		memset(&wreq, 0, sizeof(struct iwreq)); | ||||
| 		wreq.u.essid.length = IW_ESSID_MAX_SIZE+1; | ||||
| 		snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface); | ||||
|  | ||||
| 	if ((datastart = strstr(buf, iface)) == NULL) | ||||
| 		return NULL; | ||||
| 		if (sockfd == -1) { | ||||
| 			fprintf(stderr, "socket 'AF_INET': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			return NULL; | ||||
| 		} | ||||
| 		wreq.u.essid.pointer = id; | ||||
| 		if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) { | ||||
| 			fprintf(stderr, "ioctl 'SIOCGIWESSID': %s\n", | ||||
| 			        strerror(errno)); | ||||
| 			close(sockfd); | ||||
| 			return NULL; | ||||
| 		} | ||||
|  | ||||
| 	datastart = (datastart+(strlen(iface)+1)); | ||||
| 	sscanf(datastart + 1, " %*d   %d  %*d  %*d		  %*d	   %*d		%*d		 %*d	  %*d		 %*d", &cur); | ||||
|  | ||||
| 	perc = (float)cur / total * 100.0; | ||||
|  | ||||
| 	return bprintf("%.0f", perc); | ||||
| } | ||||
|  | ||||
| const char * | ||||
| wifi_essid(const char *iface) | ||||
| { | ||||
| 	static char id[IW_ESSID_MAX_SIZE+1]; | ||||
| 	int sockfd = socket(AF_INET, SOCK_DGRAM, 0); | ||||
| 	struct iwreq wreq; | ||||
|  | ||||
| 	memset(&wreq, 0, sizeof(struct iwreq)); | ||||
| 	wreq.u.essid.length = IW_ESSID_MAX_SIZE+1; | ||||
| 	snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface); | ||||
|  | ||||
| 	if (sockfd == -1) { | ||||
| 		fprintf(stderr, "socket 'AF_INET': %s\n", strerror(errno)); | ||||
| 		return NULL; | ||||
| 	} | ||||
| 	wreq.u.essid.pointer = id; | ||||
| 	if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) { | ||||
| 		fprintf(stderr, "ioctl 'SIOCGIWESSID': %s\n", strerror(errno)); | ||||
| 		close(sockfd); | ||||
| 		return NULL; | ||||
|  | ||||
| 		if (strcmp(id, "") == 0) | ||||
| 			return NULL; | ||||
| 		else | ||||
| 			return id; | ||||
| 	} | ||||
|  | ||||
| 	close(sockfd); | ||||
|  | ||||
| 	if (strcmp(id, "") == 0) | ||||
| 		return NULL; | ||||
| 	else | ||||
| 		return id; | ||||
| } | ||||
| #elif defined(__OpenBSD__) | ||||
| 	/* unimplemented */ | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user