From ef936da7c5608c8cae553216f8661764247c2819 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 30 Oct 2000 17:22:04 +0000 Subject: [PATCH] Fix uname problem that was breaking poweroff. --- Changelog | 8 ++++++++ mkswap.c | 18 ++---------------- nfsmount.c | 18 ++---------------- util-linux/mkswap.c | 18 ++---------------- util-linux/nfsmount.c | 18 ++---------------- utility.c | 4 +++- 6 files changed, 19 insertions(+), 65 deletions(-) diff --git a/Changelog b/Changelog index 8b4cf8b4e..4f6f619bf 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,11 @@ +0.48 + + * Fixed uname problem causing the kernel version to be + mis-detected (causing problems with poweroff, init, + and other things). + + -Erik Andersen + 0.47 * A bug in syslogd was fixed that allowed it to potentially fork-bomb diff --git a/mkswap.c b/mkswap.c index 8a9767cca..627d04f60 100644 --- a/mkswap.c +++ b/mkswap.c @@ -63,20 +63,6 @@ static int version = -1; #define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r)) -static int linux_version_code(void) -{ - struct utsname my_utsname; - int p, q, r; - - if (uname(&my_utsname) == 0) { - p = atoi(strtok(my_utsname.release, ".")); - q = atoi(strtok(NULL, ".")); - r = atoi(strtok(NULL, ".")); - return MAKE_VERSION(p, q, r); - } - return 0; -} - /* * The definition of the union swap_header uses the constant PAGE_SIZE. * Unfortunately, on some architectures this depends on the hardware model, @@ -345,7 +331,7 @@ int mkswap_main(int argc, char **argv) if (version == -1) { if (PAGES <= V0_MAX_PAGES) version = 0; - else if (linux_version_code() < MAKE_VERSION(2, 1, 117)) + else if (get_kernel_revision() < MAKE_VERSION(2, 1, 117)) version = 0; else if (pagesize < 2048) version = 0; @@ -366,7 +352,7 @@ int mkswap_main(int argc, char **argv) #else if (!version) maxpages = V0_MAX_PAGES; - else if (linux_version_code() >= MAKE_VERSION(2, 2, 1)) + else if (get_kernel_revision() >= MAKE_VERSION(2, 2, 1)) maxpages = V1_MAX_PAGES; else { maxpages = V1_OLD_MAX_PAGES; diff --git a/nfsmount.c b/nfsmount.c index abae19afe..f8735e52c 100644 --- a/nfsmount.c +++ b/nfsmount.c @@ -160,20 +160,6 @@ static char *nfs_strerror(int stat); #define EX_BG 256 /* retry in background (internal only) */ -static int -linux_version_code(void) { - struct utsname my_utsname; - int p, q, r; - - if (uname(&my_utsname) == 0) { - p = atoi(strtok(my_utsname.release, ".")); - q = atoi(strtok(NULL, ".")); - r = atoi(strtok(NULL, ".")); - return MAKE_VERSION(p,q,r); - } - return 0; -} - /* * nfs_mount_version according to the sources seen at compile time. */ @@ -197,7 +183,7 @@ find_kernel_nfs_mount_version(void) { if (kernel_version) return; - kernel_version = linux_version_code(); + kernel_version = get_kernel_revision(); if (kernel_version) { if (kernel_version < MAKE_VERSION(2,1,32)) @@ -796,7 +782,7 @@ int nfsmount(const char *spec, const char *node, int *flags, * to avoid problems with multihomed hosts. * --Swen */ - if (linux_version_code() <= 66314 + if (get_kernel_revision() <= 66314 && connect(fsock, (struct sockaddr *) &server_addr, sizeof (server_addr)) < 0) { perror(_("nfs connect")); diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c index 8a9767cca..627d04f60 100644 --- a/util-linux/mkswap.c +++ b/util-linux/mkswap.c @@ -63,20 +63,6 @@ static int version = -1; #define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r)) -static int linux_version_code(void) -{ - struct utsname my_utsname; - int p, q, r; - - if (uname(&my_utsname) == 0) { - p = atoi(strtok(my_utsname.release, ".")); - q = atoi(strtok(NULL, ".")); - r = atoi(strtok(NULL, ".")); - return MAKE_VERSION(p, q, r); - } - return 0; -} - /* * The definition of the union swap_header uses the constant PAGE_SIZE. * Unfortunately, on some architectures this depends on the hardware model, @@ -345,7 +331,7 @@ int mkswap_main(int argc, char **argv) if (version == -1) { if (PAGES <= V0_MAX_PAGES) version = 0; - else if (linux_version_code() < MAKE_VERSION(2, 1, 117)) + else if (get_kernel_revision() < MAKE_VERSION(2, 1, 117)) version = 0; else if (pagesize < 2048) version = 0; @@ -366,7 +352,7 @@ int mkswap_main(int argc, char **argv) #else if (!version) maxpages = V0_MAX_PAGES; - else if (linux_version_code() >= MAKE_VERSION(2, 2, 1)) + else if (get_kernel_revision() >= MAKE_VERSION(2, 2, 1)) maxpages = V1_MAX_PAGES; else { maxpages = V1_OLD_MAX_PAGES; diff --git a/util-linux/nfsmount.c b/util-linux/nfsmount.c index abae19afe..f8735e52c 100644 --- a/util-linux/nfsmount.c +++ b/util-linux/nfsmount.c @@ -160,20 +160,6 @@ static char *nfs_strerror(int stat); #define EX_BG 256 /* retry in background (internal only) */ -static int -linux_version_code(void) { - struct utsname my_utsname; - int p, q, r; - - if (uname(&my_utsname) == 0) { - p = atoi(strtok(my_utsname.release, ".")); - q = atoi(strtok(NULL, ".")); - r = atoi(strtok(NULL, ".")); - return MAKE_VERSION(p,q,r); - } - return 0; -} - /* * nfs_mount_version according to the sources seen at compile time. */ @@ -197,7 +183,7 @@ find_kernel_nfs_mount_version(void) { if (kernel_version) return; - kernel_version = linux_version_code(); + kernel_version = get_kernel_revision(); if (kernel_version) { if (kernel_version < MAKE_VERSION(2,1,32)) @@ -796,7 +782,7 @@ int nfsmount(const char *spec, const char *node, int *flags, * to avoid problems with multihomed hosts. * --Swen */ - if (linux_version_code() <= 66314 + if (get_kernel_revision() <= 66314 && connect(fsock, (struct sockaddr *) &server_addr, sizeof (server_addr)) < 0) { perror(_("nfs connect")); diff --git a/utility.c b/utility.c index d61ef30e1..235b58227 100644 --- a/utility.c +++ b/utility.c @@ -156,7 +156,9 @@ extern int get_kernel_revision(void) perror("cannot get system information"); return (0); } - sscanf(name.version, "%d.%d.%d", &major, &minor, &patch); + major = atoi(strtok(name.release, ".")); + minor = atoi(strtok(NULL, ".")); + patch = atoi(strtok(NULL, ".")); return major * 65536 + minor * 256 + patch; } #endif /* BB_INIT */