WiringPi: Remove patch string in kernel number and add whole release string

Signed-off-by: Deokgyu Yang <secugyu@gmail.com>
Change-Id: Ie1510c9b855d81cbbaee07a794bb584a70ebc53d
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 @@
 		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 @@
 	.major = 0,
 	.minor = 0,
 	.revision = 0,
-	.patch = ""
+	.release = ""
 };
 
 /*----------------------------------------------------------------------------*/
@@ -271,31 +271,49 @@
 	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 @@
 	int major;
 	int minor;
 	int revision;
-	char patch[64];
+	char release[64];
 };
 
 extern struct kernelVersionStruct *kernelVersion;