diff options
-rw-r--r-- | mdk-stage1/config-stage1.h | 4 | ||||
-rw-r--r-- | mdk-stage1/network.c | 4 | ||||
-rw-r--r-- | mdk-stage1/tools.c | 38 |
3 files changed, 12 insertions, 34 deletions
diff --git a/mdk-stage1/config-stage1.h b/mdk-stage1/config-stage1.h index d2503d642..4bfa3896a 100644 --- a/mdk-stage1/config-stage1.h +++ b/mdk-stage1/config-stage1.h @@ -18,8 +18,8 @@ #define _GNU_SOURCE 1 -/* If we have more than that amount of memory, we assume we can load the second stage as a ramdisk */ -#define MEM_LIMIT_RAMDISK 52 * 1024 +/* If we have more than that amount of memory (in Mbytes), we assume we can load the second stage as a ramdisk */ +#define MEM_LIMIT_RAMDISK 52 #define DISTRIB_NAME "Linux-Mandrake" diff --git a/mdk-stage1/network.c b/mdk-stage1/network.c index f961df17f..7c4207c36 100644 --- a/mdk-stage1/network.c +++ b/mdk-stage1/network.c @@ -642,7 +642,7 @@ enum return_type ftp_prepare(void) if (!ramdisk_possible()) { error_message("FTP install needs more than %d Mbytes of memory (detected %d Mbytes).", - MEM_LIMIT_RAMDISK >> 10, total_memory() >> 10); + MEM_LIMIT_RAMDISK, total_memory()); return RETURN_ERROR; } @@ -726,7 +726,7 @@ enum return_type http_prepare(void) if (!ramdisk_possible()) { error_message("HTTP install needs more than %d Mbytes of memory (detected %d Mbytes).", - MEM_LIMIT_RAMDISK >> 10, total_memory() >> 10); + MEM_LIMIT_RAMDISK, total_memory()); return RETURN_ERROR; } diff --git a/mdk-stage1/tools.c b/mdk-stage1/tools.c index 9acabdb5f..8b2931ad2 100644 --- a/mdk-stage1/tools.c +++ b/mdk-stage1/tools.c @@ -183,38 +183,16 @@ int charstar_to_int(char * s) int total_memory(void) { - int fd; - int i; - char buf[4096]; - char * memtotal_tag = "MemTotal:"; - int memtotal = 0; - - fd = open("/proc/meminfo", O_RDONLY); - if (fd == -1) - fatal_error("could not open /proc/meminfo"); - - i = read(fd, buf, sizeof(buf)); - if (i < 0) - fatal_error("could not read /proc/meminfo"); - - close(fd); - buf[i] = 0; - - i = 0; - while (buf[i] != 0 && strncmp(&buf[i], memtotal_tag, strlen(memtotal_tag))) - i++; - - while (buf[i] != 0 && buf[i] != '\n' && !isdigit(buf[i])) - i++; - - if (buf[i] == 0 || buf[i] == '\n') - fatal_error("could not read MemTotal"); + int value; + struct stat statr; + if (stat("/proc/kcore", &statr)) + return 0; - memtotal = charstar_to_int(&(buf[i])); - - log_message("%s %d kB", memtotal_tag, memtotal); + /* drakx powered: use /proc/kcore and rounds every 4 Mbytes */ + value = 4 * ((int)((float)statr.st_size / 1024 / 1024 / 4 + 0.5)); + log_message("Total Memory: %d Mbytes", value); - return memtotal; + return value; } |