[PATCH, revised] kernel versioning stuff

Robert P. J. Day rpjday at mindspring.com
Thu May 18 09:32:22 PDT 2006


  thoughts?

rday
-------------- next part --------------
diff -pru busybox/e2fsprogs/mke2fs.c busybox.new/e2fsprogs/mke2fs.c
--- busybox/e2fsprogs/mke2fs.c	2006-05-11 08:04:22.000000000 -0400
+++ busybox.new/e2fsprogs/mke2fs.c	2006-05-18 12:26:02.000000000 -0400
@@ -33,6 +33,7 @@
 #include "e2p/e2p.h"
 #include "ext2fs/ext2fs.h"
 #include "util.h"
+#include "platform.h"
 
 #define STRIDE_LENGTH 8
 
@@ -833,8 +834,8 @@ static int PRS(int argc, char *argv[])
 #endif
 
 #ifdef __linux__
-	linux_version_code = get_kernel_revision();
-	if (linux_version_code && linux_version_code < (2*65536 + 2*256)) {
+	linux_version_code = get_linux_version_code();
+	if (linux_version_code && linux_version_code < KERNEL_VERSION(2,2,0)) {
 		param.s_rev_level = 0;
 		param.s_feature_incompat = 0;
 		param.s_feature_compat = 0;
diff -pru busybox/include/libbb.h busybox.new/include/libbb.h
--- busybox/include/libbb.h	2006-05-16 11:28:29.000000000 -0400
+++ busybox.new/include/libbb.h	2006-05-18 12:26:02.000000000 -0400
@@ -120,7 +120,7 @@ extern long bb_xgetlarg(const char *arg,
 extern unsigned long bb_baud_to_value(speed_t speed);
 extern speed_t bb_value_to_baud(unsigned long value);
 
-extern int get_kernel_revision(void);
+extern int get_linux_version_code(void);
 
 extern int get_console_fd(void);
 extern struct mntent *find_mount_point(const char *name, const char *table);
diff -pru busybox/include/platform.h busybox.new/include/platform.h
--- busybox/include/platform.h	2006-05-11 08:04:23.000000000 -0400
+++ busybox.new/include/platform.h	2006-05-18 12:26:02.000000000 -0400
@@ -91,6 +91,9 @@
 # include <netinet/in.h>
 #endif
 
+/*----- Kernel versioning ------------------------------------*/
+#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+
 /* ---- miscellaneous --------------------------------------- */
 /* NLS stuff */
 /* THIS SHOULD BE CLEANED OUT OF THE TREE ENTIRELY */
diff -pru busybox/libbb/kernel_version.c busybox.new/libbb/kernel_version.c
--- busybox/libbb/kernel_version.c	2006-05-11 08:04:19.000000000 -0400
+++ busybox.new/libbb/kernel_version.c	2006-05-18 12:27:29.000000000 -0400
@@ -26,11 +26,12 @@
 
 #include "libbb.h"
 
-/* Returns kernel version encoded as major*65536 + minor*256 + patch,
+/* Returns current kernel version encoded as major*65536 + minor*256 + patch,
  * so, for example,  to check if the kernel is greater than 2.2.11:
- *     if (get_kernel_revision() <= 2*65536+2*256+11) { <stuff> }
+ *
+ *     if (get_linux_version_code() > KERNEL_VERSION(2,2,11)) { <stuff> }
  */
-int get_kernel_revision(void)
+int get_linux_version_code(void)
 {
 	struct utsname name;
 	char *s;
diff -pru busybox/modutils/rmmod.c busybox.new/modutils/rmmod.c
--- busybox/modutils/rmmod.c	2006-05-11 08:04:11.000000000 -0400
+++ busybox.new/modutils/rmmod.c	2006-05-18 12:27:43.000000000 -0400
@@ -38,7 +38,7 @@ static inline void filename2modname(char
 
 #if ENABLE_FEATURE_2_4_MODULES
 	int kr_chk = 1;
-	if (get_kernel_revision() <= 2*65536+6*256)
+	if (get_linux_version_code() <= KERNEL_VERSION(2,6,0))
 		kr_chk = 0;
 #else
 #define kr_chk 1
diff -pru busybox/networking/interface.c busybox.new/networking/interface.c
--- busybox/networking/interface.c	2006-05-11 08:04:07.000000000 -0400
+++ busybox.new/networking/interface.c	2006-05-18 12:28:00.000000000 -0400
@@ -78,7 +78,6 @@
 #define _PATH_PROCNET_DEV               "/proc/net/dev"
 #define _PATH_PROCNET_IFINET6           "/proc/net/if_inet6"
 #define new(p) ((p) = xcalloc(1,sizeof(*(p))))
-#define KRELEASE(maj,min,patch) ((maj) * 65536 + (min)*256 + (patch))
 
 #ifdef HAVE_HWSLIP
 #include <net/if_slip.h>
@@ -713,7 +712,7 @@ static int sockets_open(int family)
 
 	if (force < 0) {
 		force = 0;
-		if (get_kernel_revision() < KRELEASE(2, 1, 0))
+		if (get_linux_version_code() < KERNEL_VERSION(2,1,0))
 			force = 1;
 		if (access("/proc/net", R_OK))
 			force = 1;
diff -pru busybox/util-linux/mkswap.c busybox.new/util-linux/mkswap.c
--- busybox/util-linux/mkswap.c	2006-05-11 08:04:30.000000000 -0400
+++ busybox.new/util-linux/mkswap.c	2006-05-18 12:28:16.000000000 -0400
@@ -61,14 +61,14 @@ static int check = 0;
 static int badpages = 0;
 #if ENABLE_FEATURE_MKSWAP_V0
 static int version = -1;
-#define MAKE_VERSION(p,q,r)	(65536*(p) + 256*(q) + (r))
 #else
 #define version 1
 /* and make sure that we optimize away anything which would deal with checking
  * the kernel revision as we have v1 support only anyway.
  */
-#define MAKE_VERSION(p,q,r) 1
-#define get_kernel_revision() 1
+#undef KERNEL_VERSION
+#define KERNEL_VERSION(p,q,r) 1
+#define get_linux_version_code() 1
 #endif
 
 /*
@@ -293,7 +293,7 @@ int mkswap_main(int argc, char **argv)
 	if (sz & 4) {
 		version = bb_xgetlarg(tmp, 10, 0, 1);
 	} else {
-		if (get_kernel_revision() < MAKE_VERSION(2, 1, 117))
+		if (get_linux_version_code() < KERNEL_VERSION(2, 1, 117))
 			version = 0;
 		else
 			version = 1;
@@ -327,7 +327,7 @@ int mkswap_main(int argc, char **argv)
 #else
 	if (!version)
 		maxpages = V0_MAX_PAGES;
-	else if (get_kernel_revision() >= MAKE_VERSION(2, 2, 1))
+	else if (get_linux_version_code() >= KERNEL_VERSION(2,2,1))
 		maxpages = V1_MAX_PAGES;
 	else {
 		maxpages = V1_OLD_MAX_PAGES;
diff -pru busybox/util-linux/nfsmount.c busybox.new/util-linux/nfsmount.c
--- busybox/util-linux/nfsmount.c	2006-05-11 08:04:30.000000000 -0400
+++ busybox.new/util-linux/nfsmount.c	2006-05-18 12:28:29.000000000 -0400
@@ -214,7 +214,6 @@ enum {
 
 static char *nfs_strerror(int status);
 
-#define MAKE_VERSION(p,q,r)	(65536*(p) + 256*(q) + (r))
 #define MAX_NFSPROT ((nfs_mount_version >= 4) ? 3 : 2)
 
 enum {
@@ -249,13 +248,13 @@ find_kernel_nfs_mount_version(void)
 
 	nfs_mount_version = NFS_MOUNT_VERSION; /* default */
 
-	kernel_version = get_kernel_revision();
+	kernel_version = get_linux_version_code();
 	if (kernel_version) {
-		if (kernel_version < MAKE_VERSION(2,1,32))
+		if (kernel_version < KERNEL_VERSION(2,1,32))
 			nfs_mount_version = 1;
-		else if (kernel_version < MAKE_VERSION(2,2,18) ||
-				(kernel_version >=   MAKE_VERSION(2,3,0) &&
-				 kernel_version < MAKE_VERSION(2,3,99)))
+		else if (kernel_version < KERNEL_VERSION(2,2,18) ||
+				(kernel_version >=   KERNEL_VERSION(2,3,0) &&
+				 kernel_version < KERNEL_VERSION(2,3,99)))
 			nfs_mount_version = 3;
 		else
 			nfs_mount_version = 4; /* since 2.3.99pre4 */
@@ -844,7 +843,7 @@ int nfsmount(const char *spec, const cha
 	  * to avoid problems with multihomed hosts.
 	  * --Swen
 	  */
-	if (get_kernel_revision() <= 66314
+	if (get_linux_version_code() <= KERNEL_VERSION(2,3,10)
 	    && connect(fsock, (struct sockaddr *) &server_addr,
 		       sizeof (server_addr)) < 0) {
 		perror(_("nfs connect"));


More information about the busybox mailing list