From 858c8140ca14b01b682b4112726a1a30fa49442f Mon Sep 17 00:00:00 2001 From: Deokgyu Yang Date: Tue, 25 Aug 2020 17:13:34 +0900 Subject: [PATCH] WiringPi: Remove patch string in kernel number and add whole release string Signed-off-by: Deokgyu Yang Change-Id: Ie1510c9b855d81cbbaee07a794bb584a70ebc53d --- gpio/gpio.c | 6 +----- wiringPi/wiringPi.c | 42 ++++++++++++++++++++++++++++++------------ wiringPi/wiringPi.h | 2 +- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/gpio/gpio.c b/gpio/gpio.c index 431add8..964cbbd 100644 --- a/gpio/gpio.c +++ b/gpio/gpio.c @@ -843,11 +843,7 @@ static void doVersion (char *argv []) piMakerNames [maker]); // Show current kernel version - printf(" * Current devices' kernel version: %d.%d.%d-%s\n", - kernelVersion->major, - kernelVersion->minor, - kernelVersion->revision, - kernelVersion->patch); + printf(" * Current devices' kernel version: %s\n", kernelVersion->release); // Check for device tree if (stat ("/proc/device-tree", &statBuf) == 0) // We're on a devtree system ... diff --git a/wiringPi/wiringPi.c b/wiringPi/wiringPi.c index 977b2b8..f0fdaa5 100644 --- a/wiringPi/wiringPi.c +++ b/wiringPi/wiringPi.c @@ -140,7 +140,7 @@ struct kernelVersionStruct *kernelVersion = &(struct kernelVersionStruct) { .major = 0, .minor = 0, .revision = 0, - .patch = "" + .release = "" }; /*----------------------------------------------------------------------------*/ @@ -271,31 +271,49 @@ void setKernelVersion() { struct utsname uname_buf; char* buf; - char* delimiter[] = { ".", "-" }; + char* delimiter = "."; int i; int kernelNumbers[3] = { 0, }; - char patchStringBuf[64]; + int revLastIndex = 0; + char revisionStringBuf[8]; uname(&uname_buf); + memcpy(kernelVersion->release, uname_buf.release, strlen(uname_buf.release)); - buf = strtok(uname_buf.release, delimiter[0]); - for (i = 0; i < 4; i++) { - if (i < 1) { + buf = strtok(uname_buf.release, delimiter); + for (i = 0; i < 2; i++) { + switch (i) { + case 0: kernelNumbers[i] = atoi(buf); - buf = strtok(NULL, delimiter[0]); - } else if (i == 3) { - memcpy(patchStringBuf, buf, strlen(buf)); - } else { + buf = strtok(NULL, delimiter); + break; + case 1: kernelNumbers[i] = atoi(buf); - buf = strtok(NULL, delimiter[1]); + buf = strtok(NULL, "\n"); + break; } } + if (isdigit(buf[0])) { + for (i = 0; i < (int) strlen(buf); i++) { + if (!isdigit(buf[i])) { + revLastIndex = i - 1; + break; + } + } + + memcpy(revisionStringBuf, buf, revLastIndex + 1); + + revisionStringBuf[revLastIndex + 1] = '\n'; + kernelNumbers[2] = atoi(revisionStringBuf); + } else { + kernelNumbers[2] = 0; + } + kernelVersion->major = kernelNumbers[0]; kernelVersion->minor = kernelNumbers[1]; kernelVersion->revision = kernelNumbers[2]; - memcpy(kernelVersion->patch, patchStringBuf, 64); } /*----------------------------------------------------------------------------*/ diff --git a/wiringPi/wiringPi.h b/wiringPi/wiringPi.h index cc0dd0f..e02778b 100644 --- a/wiringPi/wiringPi.h +++ b/wiringPi/wiringPi.h @@ -254,7 +254,7 @@ struct kernelVersionStruct int major; int minor; int revision; - char patch[64]; + char release[64]; }; extern struct kernelVersionStruct *kernelVersion;