more C standard compat fixes from Dan Fandrich
[oweals/busybox.git] / libbb / kernel_version.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Utility routines.
4  *
5  * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
6  *
7  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
8  */
9
10 #include "libbb.h"
11 /* After libbb.h, since it needs sys/types.h on some systems */
12 #include <sys/utsname.h>  /* for uname(2) */
13
14
15 /* Returns current kernel version encoded as major*65536 + minor*256 + patch,
16  * so, for example,  to check if the kernel is greater than 2.2.11:
17  *
18  *     if (get_linux_version_code() > KERNEL_VERSION(2,2,11)) { <stuff> }
19  */
20 int FAST_FUNC get_linux_version_code(void)
21 {
22         struct utsname name;
23         char *s;
24         int i, r;
25
26         if (uname(&name) == -1) {
27                 bb_perror_msg("cannot get system information");
28                 return 0;
29         }
30
31         s = name.release;
32         r = 0;
33         for (i = 0; i < 3; i++) {
34                 r = r * 256 + atoi(strtok(s, "."));
35                 s = NULL;
36         }
37         return r;
38 }