uptime: unification of the uptime function for linux/openbsd
This commit is contained in:
		
				
					committed by
					
						
						Aaron Marcher
					
				
			
			
				
	
			
			
			
						parent
						
							8c8091f4f1
						
					
				
				
					commit
					005b541717
				
			@@ -1,59 +1,19 @@
 | 
				
			|||||||
/* See LICENSE file for copyright and license details. */
 | 
					/* See LICENSE file for copyright and license details. */
 | 
				
			||||||
 | 
					#include <time.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../util.h"
 | 
					#include "../util.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *
 | 
					const char *
 | 
				
			||||||
format(int uptime)
 | 
					uptime(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int h, m;
 | 
						int h, m;
 | 
				
			||||||
 | 
						struct timespec uptime;
 | 
				
			||||||
	h = uptime / 3600;
 | 
						if (clock_gettime(CLOCK_BOOTTIME, &uptime) < 0) {
 | 
				
			||||||
	m = (uptime - h * 3600) / 60;
 | 
							warn("clock_gettime 'CLOCK_BOOTTIME'");
 | 
				
			||||||
 | 
					 | 
				
			||||||
	return bprintf("%dh %dm", h, m);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(__linux__)
 | 
					 | 
				
			||||||
	#include <sys/sysinfo.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const char *
 | 
					 | 
				
			||||||
	uptime(void)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		int uptime;
 | 
					 | 
				
			||||||
		struct sysinfo info;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		sysinfo(&info);
 | 
					 | 
				
			||||||
		uptime = info.uptime;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return format(uptime);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
#elif defined(__OpenBSD__)
 | 
					 | 
				
			||||||
	#include <sys/sysctl.h>
 | 
					 | 
				
			||||||
	#include <sys/time.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	const char *
 | 
					 | 
				
			||||||
	uptime(void)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		int mib[2], uptime;
 | 
					 | 
				
			||||||
		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) < 0) {
 | 
					 | 
				
			||||||
			warn("sysctl 'KERN_BOOTTIME':");
 | 
					 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						h = uptime.tv_sec / 3600;
 | 
				
			||||||
		uptime = now - boottime.tv_sec;
 | 
						m = uptime.tv_sec % 3600 / 60;
 | 
				
			||||||
 | 
						return bprintf("%dh %dm", h, m);
 | 
				
			||||||
		return format(uptime);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user