btrfs-progs: Document logic of btrfs_read_dev_super
[platform/upstream/btrfs-progs.git] / utils.c
diff --git a/utils.c b/utils.c
index 9d20cab..4a16413 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -24,6 +24,7 @@
 #include <sys/mount.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/sysinfo.h>
 #include <uuid/uuid.h>
 #include <fcntl.h>
 #include <unistd.h>
@@ -446,7 +447,7 @@ int is_mount_point(const char *path)
        return ret;
 }
 
-static int is_reg_file(const char *path)
+int is_reg_file(const char *path)
 {
        struct stat statbuf;
 
@@ -455,6 +456,21 @@ static int is_reg_file(const char *path)
        return S_ISREG(statbuf.st_mode);
 }
 
+int is_path_exist(const char *path)
+{
+       struct stat statbuf;
+       int ret;
+
+       ret = stat(path, &statbuf);
+       if (ret < 0) {
+               if (errno == ENOENT)
+                       return 0;
+               else
+                       return -errno;
+       }
+       return 1;
+}
+
 /*
  * This function checks if the given input parameter is
  * an uuid or a path
@@ -803,14 +819,9 @@ static int blk_file_in_dev_list(struct btrfs_fs_devices* fs_devices,
                const char* file)
 {
        int ret;
-       struct list_head *head;
-       struct list_head *cur;
        struct btrfs_device *device;
 
-       head = &fs_devices->devices;
-       list_for_each(cur, head) {
-               device = list_entry(cur, struct btrfs_device, dev_list);
-
+       list_for_each_entry(device, &fs_devices->devices, dev_list) {
                if((ret = is_same_loop_file(device->name, file)))
                        return ret;
        }
@@ -2688,3 +2699,33 @@ u8 rand_u8(void)
 void btrfs_config_init(void)
 {
 }
+
+/* Returns total size of main memory in bytes, -1UL if error. */
+unsigned long total_memory(void)
+{
+        struct sysinfo si;
+
+        if (sysinfo(&si) < 0) {
+                error("can't determine memory size");
+                return -1UL;
+        }
+        return si.totalram * si.mem_unit;       /* bytes */
+}
+
+void print_device_info(struct btrfs_device *device, char *prefix)
+{
+       if (prefix)
+               printf("%s", prefix);
+       printf("Device: id = %llu, name = %s\n",
+              device->devid, device->name);
+}
+
+void print_all_devices(struct list_head *devices)
+{
+       struct btrfs_device *dev;
+
+       printf("All Devices:\n");
+       list_for_each_entry(dev, devices, dev_list)
+               print_device_info(dev, "\t");
+       printf("\n");
+}