9 #include <sys/utsname.h>
10 #include <sys/system_properties.h>
12 #define nitems(container) (sizeof((container)) / sizeof((container)[0]))
19 struct android_version {
25 android_to_name(const char *version)
30 /* https://en.wikipedia.org/wiki/Android_version_history#Overview */
31 struct android_version versions[] = {
35 {"6.0", "Marshmallow"},
38 {"4.1", "Jelly Bean"},
39 {"4.0", "Ice Cream Sandwich"},
41 {"2.3", "Gingerbread"},
49 for (i = 0; i < nitems(versions); i++ ) {
50 if (!strncmp(version, versions[i].number, 3)) {
51 name = versions[i].name;
57 for (i = 0; i < nitems(versions); i++ ) {
58 if (!strncmp(version, versions[i].number, 1)) {
59 name = versions[i].name;
71 static void system_kernel(void)
77 __system_property_get("ro.build.host", build_host);
78 __system_property_get("ro.build.user", build_user);
80 if (uname(&uts) != -1) {
81 printf("%-25s: %s %s %s@%s %s %s\n", "Kernel version", uts.sysname,
82 uts.release, build_user, build_host, uts.version, uts.machine);
86 static void system_cpu(void)
91 const char *needle = "Processor :";
93 fd = open("/proc/cpuinfo", O_RDONLY);
98 bytes = read(fd, buffer, sizeof(buffer) - 1);
103 buffer[bytes] = '\0';
106 p = strstr(p, "Processor :");
107 p += strlen(needle) - 1;
109 printf("%-25s: ", "CPU");
110 while ( *p != '\n') {
119 static void system_properties(struct prop *array, int size)
122 char value[1024] = {0};
124 for (i=0; i < size; i++) {
128 len = __system_property_get(array[i].prop_name, value);
131 printf("%-25s: %s", array[i].key_name, value);
132 printf(" (%s)\n", android_to_name(value));
134 printf("%-25s: %s\n", array[i].key_name, value);
144 struct prop props[] = {
145 {.key_name = "Model name", .prop_name = "ro.product.model"},
146 {.key_name = "Android codename", .prop_name = "ro.build.product"},
147 {.key_name = "Android version", .prop_name = "ro.build.version.release"},
148 {.key_name = "Android SDK version", .prop_name = "ro.build.version.sdk"},
149 {.key_name = "Baseband version", .prop_name = "gsm.version.baseband"},
150 {.key_name = "Build number", .prop_name = "ro.build.display.id"},
153 system_properties(props, nitems(props));