cpu_perc: Check for division by zero
This commit is contained in:
		
							parent
							
								
									d518472e62
								
							
						
					
					
						commit
						10bdf01b71
					
				| @ -24,7 +24,7 @@ | |||||||
| 	cpu_perc(void) | 	cpu_perc(void) | ||||||
| 	{ | 	{ | ||||||
| 		static long double a[7]; | 		static long double a[7]; | ||||||
| 		long double b[7]; | 		long double b[7], sum; | ||||||
| 
 | 
 | ||||||
| 		memcpy(b, a, sizeof(b)); | 		memcpy(b, a, sizeof(b)); | ||||||
| 		/* cpu user nice system idle iowait irq softirq */ | 		/* cpu user nice system idle iowait irq softirq */ | ||||||
| @ -37,13 +37,16 @@ | |||||||
| 			return NULL; | 			return NULL; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		sum = (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]); | ||||||
|  | 
 | ||||||
|  | 		if (sum == 0) { | ||||||
|  | 			return NULL; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		return bprintf("%d", (int)(100 * | 		return bprintf("%d", (int)(100 * | ||||||
| 		               ((b[0] + b[1] + b[2] + b[5] + b[6]) - | 		               ((b[0] + b[1] + b[2] + b[5] + b[6]) - | ||||||
| 		                (a[0] + a[1] + a[2] + a[5] + a[6])) / | 		                (a[0] + a[1] + a[2] + a[5] + a[6])) / sum)); | ||||||
| 		               ((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])))); |  | ||||||
| 	} | 	} | ||||||
| #elif defined(__OpenBSD__) | #elif defined(__OpenBSD__) | ||||||
| 	#include <sys/param.h> | 	#include <sys/param.h> | ||||||
| @ -75,7 +78,7 @@ | |||||||
| 	{ | 	{ | ||||||
| 		int mib[2]; | 		int mib[2]; | ||||||
| 		static uintmax_t a[CPUSTATES]; | 		static uintmax_t a[CPUSTATES]; | ||||||
| 		uintmax_t b[CPUSTATES]; | 		uintmax_t b[CPUSTATES], sum; | ||||||
| 		size_t size; | 		size_t size; | ||||||
| 
 | 
 | ||||||
| 		mib[0] = CTL_KERN; | 		mib[0] = CTL_KERN; | ||||||
| @ -92,15 +95,18 @@ | |||||||
| 			return NULL; | 			return NULL; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		sum = (a[CP_USER] + a[CP_NICE] + a[CP_SYS] + a[CP_INTR] + a[CP_IDLE]) - | ||||||
|  | 		      (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + b[CP_INTR] + b[CP_IDLE]); | ||||||
|  | 
 | ||||||
|  | 		if (sum == 0) { | ||||||
|  | 			return NULL; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		return bprintf("%d", 100 * | 		return bprintf("%d", 100 * | ||||||
| 		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + | 		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + | ||||||
| 		                 a[CP_INTR]) - | 		                 a[CP_INTR]) - | ||||||
| 		                (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + | 		                (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + | ||||||
| 		                 b[CP_INTR])) / | 		                 b[CP_INTR])) / sum); | ||||||
| 		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + |  | ||||||
| 		                 a[CP_INTR] + a[CP_IDLE]) - |  | ||||||
| 		                (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + |  | ||||||
| 		                 b[CP_INTR] + b[CP_IDLE]))); |  | ||||||
| 	} | 	} | ||||||
| #elif defined(__FreeBSD__) | #elif defined(__FreeBSD__) | ||||||
| 	#include <sys/param.h> | 	#include <sys/param.h> | ||||||
| @ -129,7 +135,7 @@ | |||||||
| 	{ | 	{ | ||||||
| 		size_t size; | 		size_t size; | ||||||
| 		static long a[CPUSTATES]; | 		static long a[CPUSTATES]; | ||||||
| 		long b[CPUSTATES]; | 		long b[CPUSTATES], sum; | ||||||
| 
 | 
 | ||||||
| 		size = sizeof(a); | 		size = sizeof(a); | ||||||
| 		memcpy(b, a, sizeof(b)); | 		memcpy(b, a, sizeof(b)); | ||||||
| @ -142,14 +148,17 @@ | |||||||
| 			return NULL; | 			return NULL; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		sum = (a[CP_USER] + a[CP_NICE] + a[CP_SYS] + a[CP_INTR] + a[CP_IDLE]) - | ||||||
|  | 		      (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + b[CP_INTR] + b[CP_IDLE]); | ||||||
|  | 
 | ||||||
|  | 		if (sum == 0) { | ||||||
|  | 			return NULL; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		return bprintf("%d", 100 * | 		return bprintf("%d", 100 * | ||||||
| 		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + | 		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + | ||||||
| 		                 a[CP_INTR]) - | 		                 a[CP_INTR]) - | ||||||
| 		                (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + | 		                (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + | ||||||
| 		                 b[CP_INTR])) / | 		                 b[CP_INTR])) / sum); | ||||||
| 		               ((a[CP_USER] + a[CP_NICE] + a[CP_SYS] + |  | ||||||
| 		                 a[CP_INTR] + a[CP_IDLE]) - |  | ||||||
| 		                (b[CP_USER] + b[CP_NICE] + b[CP_SYS] + |  | ||||||
| 		                 b[CP_INTR] + b[CP_IDLE]))); |  | ||||||
| 	} | 	} | ||||||
| #endif | #endif | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user