Fix overflow for machines greater than 4GB, return unsigned int to avoid
authorGlenn L McGrath <bug1@ihug.co.nz>
Tue, 26 Aug 2003 02:14:58 +0000 (02:14 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Tue, 26 Aug 2003 02:14:58 +0000 (02:14 -0000)
a cast and for greater accuracy.

init/init.c

index 1ecc43e16613a85dbf7b85b088e3f74d208335eb..e52517e91eb296a5c5210f2fd95c99bd3a337695 100644 (file)
@@ -310,7 +310,7 @@ static void set_term(int fd)
 
 /* How much memory does this machine have?
    Units are kBytes to avoid overflow on 4GB machines */
-static int check_free_memory(void)
+static unsigned int check_free_memory(void)
 {
        struct sysinfo info;
        unsigned int result, u, s = 10;
@@ -330,10 +330,11 @@ static int check_free_memory(void)
                s--;
        }
        result = (info.totalram >> s) + (info.totalswap >> s);
-       result = result * u;
-       if (result < 0)
-               result = INT_MAX;
-       return result;
+       if ((unsigned long long) (result * u) > UINT_MAX) {
+               return(UINT_MAX);
+       } else {
+               return(result * u);
+       }
 }
 
 static void console_init(void)