67 lines
2 KiB
Diff
67 lines
2 KiB
Diff
commit 9875dffab3ddda0c3e8399f935f059246c961f2a
|
|
Author: Thomas Renninger <trenn@suse.com>
|
|
Date: Wed Oct 2 17:05:27 2019 +0200
|
|
|
|
Add s390x compressed kernel support
|
|
|
|
and fix a tiny typo in make clean
|
|
|
|
diff --git a/Makefile b/Makefile
|
|
index e4bede1..e992da0 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -11,7 +11,7 @@ install: all
|
|
install -m755 get_kernel_version $(DESTDIR)/usr/bin
|
|
|
|
clean:
|
|
- rm -f $(sbin_PROGRAMS)
|
|
+ rm -f $(bin_PROGRAMS)
|
|
|
|
mimetypes:
|
|
if test -d Apache/apache2; then (cd Apache/apache2 && osc up); else osc co Apache/apache2; fi
|
|
diff --git a/get_kernel_version.c b/get_kernel_version.c
|
|
index db52159..569b67c 100644
|
|
--- a/get_kernel_version.c
|
|
+++ b/get_kernel_version.c
|
|
@@ -170,6 +170,41 @@ main (int argc, char *argv[])
|
|
}
|
|
}
|
|
}
|
|
+ if(!found) {
|
|
+ /* Compressed S390x kernel */
|
|
+ /* Compare with vanilla kernel git commit 6abe28197024f */
|
|
+ if(
|
|
+ !fseek(fp, 0x10008, SEEK_SET) &&
|
|
+ fread(buffer, 1, 6, fp) == 6 &&
|
|
+ buffer[0] == 'S' && buffer[1] == '3' &&
|
|
+ buffer[2] == '9' && buffer[3] == '0' &&
|
|
+ buffer[4] == 'E' && buffer[5] == 'P' &&
|
|
+ !fseek(fp, 0x10428, SEEK_SET) &&
|
|
+ fread(buffer, 1, 8, fp) == 8
|
|
+ ) {
|
|
+ unsigned long long version_string_offset =
|
|
+ ((unsigned char *) buffer)[7] +
|
|
+ (((unsigned char *) buffer)[6] << 8) +
|
|
+ (((unsigned char *) buffer)[5] << 16) +
|
|
+ (((unsigned char *) buffer)[4] << 24) +
|
|
+ ((unsigned long long) ((unsigned char *) buffer)[3] << 32) +
|
|
+ ((unsigned long long) ((unsigned char *) buffer)[2] << 40) +
|
|
+ ((unsigned long long) ((unsigned char *) buffer)[1] << 48) +
|
|
+ ((unsigned long long) ((unsigned char *) buffer)[0] << 56);
|
|
+ if(
|
|
+ !fseek(fp, version_string_offset, SEEK_SET) &&
|
|
+ fread(buffer, 1, MAX_VERSION_LENGTH, fp) == MAX_VERSION_LENGTH
|
|
+ ) {
|
|
+ char *s = buffer;
|
|
+
|
|
+ for(s[MAX_VERSION_LENGTH] = 0; *s; s++) if(*s == ' ') { *s = 0; break; }
|
|
+ if(*buffer) {
|
|
+ found = 1;
|
|
+ printf("%s\n", buffer);
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ }
|
|
|
|
if (command[0] != '\0')
|
|
pclose (fp);
|