#include <sys/ioctl.h>
#include <sys/mount.h>
#include <sys/swap.h>
+#include <sys/sysinfo.h>
#include <unistd.h>
#include <linux/fs.h>
return ret;
}
+struct hw_disk** hw_select_first_disk(const struct hw_disk** disks) {
+ struct hw_disk** ret = hw_create_disks();
+ struct hw_disk** selected_disks = ret;
+
+ unsigned int num_disks = hw_count_disks(disks);
+ assert(num_disks > 0);
+
+ for (unsigned int i = 0; i < num_disks; i++) {
+ struct hw_disk *disk = disks[i];
+ disk->ref++;
+
+ *selected_disks++ = disk;
+ break;
+ }
+
+ // Set sentinel
+ *selected_disks = NULL;
+
+ return ret;
+}
+
static unsigned long long hw_swap_size(struct hw_destination* dest) {
unsigned long long memory = hw_memory();
// Devices with a number at the end have the p suffix, too.
// e.g. mmcblk0, cciss0
- unsigned int last_char = strlen(dest->path);
+ unsigned int last_char = strlen(dest->path) - 1;
if ((dest->path[last_char] >= '0') && (dest->path[last_char] <= '9'))
return 1;
}
unsigned long long hw_memory() {
- FILE* handle = NULL;
- char line[STRING_SIZE];
-
- unsigned long long memory = 0;
+ struct sysinfo si;
- /* 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) {
sync();
sync();
}
+
+int hw_start_networking(const char* output) {
+ return mysystem(output, "/usr/bin/start-networking.sh");
+}