summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/common
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/common')
-rw-r--r--libc/sysdeps/linux/common/Makefile37
-rw-r--r--libc/sysdeps/linux/common/kernel_version.c115
2 files changed, 61 insertions, 91 deletions
diff --git a/libc/sysdeps/linux/common/Makefile b/libc/sysdeps/linux/common/Makefile
index eac2dc3b4..b4a922eb5 100644
--- a/libc/sysdeps/linux/common/Makefile
+++ b/libc/sysdeps/linux/common/Makefile
@@ -1,24 +1,37 @@
# Copyright (C) 1995,1996 Robert de Bath <rdebath@cix.compulink.co.uk>
-# This file is part of the Linux-8086 C library and is distributed
-# under the GNU Library General Public License.
+# Makefile for uCLibc
+#
+# Copyright (C) 2000 by Lineo, inc.
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU Library General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or (at your option) any
+# later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Derived in part from the Linux-8086 C library, the GNU C Library, and several
+# other sundry sources. Files within this library are copyright by their
+# respective copyright holders.
TOPDIR=../../../
include $(TOPDIR)Rules.make
-
-CFLAGS+= -D_GCC_LIMITS_H_
-
LIBC=$(TOPDIR)libc.a
include makefile.objs
-all: $(LIBC)
+all: $(OBJ) $(LIBC)
$(LIBC): $(OBJ)
- $(AR) $(ARFLAGS) $@ $(OBJ)
-
-transfer:
- -@rm -f ../include/stdio.h
- cp -p stdio.h ../include/.
+ $(AR) $(ARFLAGS) $(LIBC) $(OBJ)
clean:
- rm -f *.o
+ rm -f *.[oa] *~ core
+
diff --git a/libc/sysdeps/linux/common/kernel_version.c b/libc/sysdeps/linux/common/kernel_version.c
index dacc4f0f7..c6b7eabea 100644
--- a/libc/sysdeps/linux/common/kernel_version.c
+++ b/libc/sysdeps/linux/common/kernel_version.c
@@ -1,89 +1,46 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
-
-#include <ansidecl.h>
+/* vi: set sw=4 ts=4: */
+/*
+ * Copyright (C) 1999,2000 by Lineo, inc.
+ * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Library General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <stdio.h>
#include <string.h>
#include <sys/utsname.h>
-#include <sys/param.h>
static int __linux_kernel_version = -1;
-static inline int
-asc2int (const char *s)
+/* Returns 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> }
+ */
+static int find_kernel_revision(void)
{
- int result = 0;
-
- for (; *s >= '0' && *s <= '9'; s++)
- {
- result = result * 10 + (*s - '0');
- }
-
- return result;
+ struct utsname name;
+ int major = 0, minor = 0, patch = 0;
+
+ if (uname(&name) == -1) {
+ return (0);
+ }
+ sscanf(name.version, "%d.%d.%d", &major, &minor, &patch);
+ return major * 65536 + minor * 256 + patch;
}
-static int
-set_linux_kernel_version (void)
-{
- struct utsname uts;
- char *version = NULL, *patchlevel = NULL, *sublevel = NULL;
-
- if (uname (&uts))
- {
- __linux_kernel_version = 0;
- return __linux_kernel_version;
- }
-
- version = uts.release;
- if (version != NULL)
- {
- patchlevel = strchr (version, '.');
- if (patchlevel != NULL)
- {
- *patchlevel = '\0';
- patchlevel++;
- sublevel = strchr (patchlevel, '.');
- if (sublevel != NULL)
- {
- *sublevel = '\0';
- sublevel++;
- }
- }
-
- __linux_kernel_version =
- GET_LINUX_KERNEL_VERSION (asc2int (version));
- if (patchlevel != NULL)
- {
- __linux_kernel_version |=
- GET_LINUX_KERNEL_PATCHLEVEL (asc2int (patchlevel));
- }
- if (sublevel != NULL)
- {
- __linux_kernel_version |=
- GET_LINUX_KERNEL_SUBLEVEL (asc2int (sublevel));
- }
- }
- else
- {
- __linux_kernel_version = 0;
- }
-
- return __linux_kernel_version;
-}
int
__get_linux_kernel_version (void)
@@ -91,5 +48,5 @@ __get_linux_kernel_version (void)
if (__linux_kernel_version != -1)
return __linux_kernel_version;
- return set_linux_kernel_version ();
+ return find_kernel_revision ();
}