From 87248fbce9cbd150faa4636f617de6552019fb39 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Wed, 7 Mar 2012 18:20:40 +0100 Subject: [PATCH] Aded kernelinfo(1) as a frontend of kernelinfo(2). --- utils/Makefile | 1 + utils/kernelinfo.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 utils/kernelinfo.cpp diff --git a/utils/Makefile b/utils/Makefile index d65b2229..c782c199 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -19,6 +19,7 @@ help \ uptime \ memstat \ uname \ +kernelinfo \ idle \ editor \ kill \ diff --git a/utils/kernelinfo.cpp b/utils/kernelinfo.cpp new file mode 100644 index 00000000..1ca0afc9 --- /dev/null +++ b/utils/kernelinfo.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include + +void usage(const char* argv0) +{ + printf("usage: %s ...\n", argv0); + printf("Prints a kernel information string.\n"); + printf("example: %s name\n", argv0); + printf("example: %s version\n", argv0); + printf("example: %s builddate\n", argv0); + printf("example: %s buildtime\n", argv0); +} + +void help(const char* argv0) +{ + usage(argv0); +} + +void version(const char* argv0) +{ + usage(argv0); +} + +int main(int argc, char* argv[]) +{ + const char* argv0 = argv[0]; + if ( argc < 2 ) { usage(argv0); return 0; } + for ( int i = 1; i < argc; i++ ) + { + if ( argv[i][0] != '-' ) { continue; } + if ( strcmp(argv[i], "--usage") == 0 ) { usage(argv0); return 0; } + if ( strcmp(argv[i], "--help") == 0 ) { help(argv0); return 0; } + if ( strcmp(argv[i], "--version") == 0 ) { version(argv0); return 0; } + fprintf(stderr, "%s: unknown option: %s\n", argv0, argv[i]); + return 1; + } + size_t bufsize = 32; + char* buf = (char*) malloc(bufsize); + if ( !buf ) { perror("malloc"); return 1; } + for ( int i = 1; i < argc; i++ ) + { +retry: + ssize_t ret = kernelinfo(argv[i], buf, bufsize); + if ( ret < 0 ) { error(1, errno, "kernelinfo(\"%s\")", argv[i]); } + if ( ret ) + { + buf = (char*) realloc(buf, ret); + if ( !buf ) { perror("realloc"); return 1; } + bufsize = ret; + goto retry; + } + printf("%s\n", buf); + } + return 0; +}