blob: e784a049a7b626bc132621b79ecbd1672ac1cd38 [file] [log] [blame]
Eric Andersenaad1a882001-03-16 22:47:14 +00001/* vi: set sw=4 ts=4: */
2/*
3 * Utility routines.
4 *
Eric Andersenc7bda1c2004-03-15 08:29:22 +00005 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
Eric Andersenaad1a882001-03-16 22:47:14 +00006 *
Bernhard Reutner-Fischerb1629b12006-05-19 19:29:19 +00007 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
Eric Andersenaad1a882001-03-16 22:47:14 +00008 */
9
10#include <stdio.h>
11#include <string.h>
12#include <stdlib.h>
13#include <sys/utsname.h> /* for uname(2) */
14
15#include "libbb.h"
16
Bernhard Reutner-Fischere2e56c72006-05-19 11:54:02 +000017/* Returns current kernel version encoded as major*65536 + minor*256 + patch,
Eric Andersenaad1a882001-03-16 22:47:14 +000018 * so, for example, to check if the kernel is greater than 2.2.11:
Bernhard Reutner-Fischere2e56c72006-05-19 11:54:02 +000019 *
20 * if (get_linux_version_code() > KERNEL_VERSION(2,2,11)) { <stuff> }
Eric Andersenaad1a882001-03-16 22:47:14 +000021 */
Bernhard Reutner-Fischere2e56c72006-05-19 11:54:02 +000022int get_linux_version_code(void)
Eric Andersenaad1a882001-03-16 22:47:14 +000023{
24 struct utsname name;
25 char *s;
26 int i, r;
27
28 if (uname(&name) == -1) {
Manuel Novoa III cad53642003-03-19 09:13:01 +000029 bb_perror_msg("cannot get system information");
Eric Andersenaad1a882001-03-16 22:47:14 +000030 return (0);
31 }
32
33 s = name.release;
34 r = 0;
35 for (i=0 ; i<3 ; i++) {
36 r = r * 256 + atoi(strtok(s, "."));
37 s = NULL;
38 }
39 return r;
40}