installer: use sysinfo() for memory detection
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 4 Sep 2014 18:10:55 +0000 (20:10 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 4 Sep 2014 18:10:55 +0000 (20:10 +0200)
src/installer/hw.c
src/installer/main.c

index ba7fda2..e453e23 100644 (file)
@@ -33,6 +33,7 @@
 #include <sys/ioctl.h>
 #include <sys/mount.h>
 #include <sys/swap.h>
+#include <sys/sysinfo.h>
 #include <unistd.h>
 
 #include <linux/fs.h>
@@ -502,23 +503,13 @@ struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks
 }
 
 unsigned long long hw_memory() {
-       FILE* handle = NULL;
-       char line[STRING_SIZE];
+       struct sysinfo si;
 
-       unsigned long long memory = 0;
-
-       /* Calculate amount of memory in machine */
-       if ((handle = fopen("/proc/meminfo", "r"))) {
-               while (fgets(line, sizeof(line), handle)) {
-                       if (!sscanf (line, "MemTotal: %llu kB", &memory)) {
-                               memory = 0;
-                       }
-               }
-
-               fclose(handle);
-       }
+       int r = sysinfo(&si);
+       if (r < 0)
+               return 0;
 
-       return memory * 1024;
+       return si.totalram;
 }
 
 static int hw_zero_out_device(const char* path, int bytes) {
index d9dd75c..1f7ec2b 100644 (file)
@@ -494,6 +494,7 @@ int main(int argc, char *argv[]) {
        fprintf(flog, "  swap   : %s (%lluMB)\n", destination->part_swap, BYTES2MB(destination->size_swap));
        fprintf(flog, "  root   : %s (%lluMB)\n", destination->part_root, BYTES2MB(destination->size_root));
        fprintf(flog, "  data   : %s (%lluMB)\n", destination->part_data, BYTES2MB(destination->size_data));
+       fprintf(flog, "Memory   : %lluMB\n", BYTES2MB(hw_memory()));
 
        // Warn the user if there is not enough space to create a swap partition
        if (!unattended && !*destination->part_swap) {