summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac3
-rw-r--r--include/Makefile.am3
-rw-r--r--include/linux_version.h14
-rw-r--r--lib/linux_version.c25
4 files changed, 43 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 7005b5ce7..1ea72c6b9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -46,7 +46,8 @@ AC_CHECK_HEADERS(
rpcsvc/nfs_prot.h \
sys/io.h \
pty.h \
- err.h])
+ err.h \
+ linux/version.h])
AC_CHECK_HEADERS([linux/raw.h],
[AM_CONDITIONAL([HAVE_RAW], [true])],
[AM_CONDITIONAL([HAVE_RAW], [false])])
diff --git a/include/Makefile.am b/include/Makefile.am
index e45ce3982..275661dee 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,4 +1,5 @@
include $(top_srcdir)/config/include-Makefile.am
dist_noinst_HEADERS = carefulputc.h env.h linux_reboot.h md5.h \
- nls.h pathnames.h setproctitle.h widechar.h xstrncpy.h
+ nls.h pathnames.h setproctitle.h widechar.h xstrncpy.h \
+ linux_version.h
diff --git a/include/linux_version.h b/include/linux_version.h
new file mode 100644
index 000000000..a6a1e99c7
--- /dev/null
+++ b/include/linux_version.h
@@ -0,0 +1,14 @@
+#ifndef LINUX_VERSION_H
+#define LINUX_VERSION_H
+
+#ifdef HAVE_LINUX_VERSION_H
+# include <linux/version.h>
+#endif
+
+#ifndef KERNEL_VERSION
+# define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+#endif
+
+int get_linux_version(void);
+
+#endif /* LINUX_VERSION_H */
diff --git a/lib/linux_version.c b/lib/linux_version.c
new file mode 100644
index 000000000..f9fbd8dff
--- /dev/null
+++ b/lib/linux_version.c
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <sys/utsname.h>
+
+#include "linux_version.h"
+
+int
+get_linux_version (void)
+{
+ static int kver = -1;
+ struct utsname uts;
+ int major;
+ int minor;
+ int teeny;
+
+ if (kver != -1)
+ return kver;
+ if (uname (&uts))
+ kver = 0;
+ else if (sscanf (uts.release, "%d.%d.%d", &major, &minor, &teeny) != 3)
+ kver = 0;
+ else
+ kver = KERNEL_VERSION (major, minor, teeny);
+
+ return kver;
+}