New API: part-to-dev: Convert partition name to device name.
authorRichard Jones <rjones@redhat.com>
Wed, 15 Sep 2010 15:39:36 +0000 (16:39 +0100)
committerRichard Jones <rjones@redhat.com>
Wed, 15 Sep 2010 16:16:51 +0000 (17:16 +0100)
This adds a formal API for going from a partition to the containing
device, eg. /dev/sda1 -> /dev/sda

daemon/devsparts.c
generator/generator_actions.ml
src/MAX_PROC_NR

index 95e4a68..1781def 100644 (file)
@@ -26,6 +26,8 @@
 #include <dirent.h>
 #include <sys/stat.h>
 
+#include "c-ctype.h"
+
 #include "daemon.h"
 #include "actions.h"
 
@@ -190,3 +192,28 @@ do_list_partitions (void)
 {
   return foreach_block_device(add_partitions);
 }
+
+char *
+do_part_to_dev (const char *part)
+{
+  int err = 1;
+  size_t n = strlen (part);
+
+  while (n >= 1 && c_isdigit (part[n-1])) {
+    err = 0;
+    n--;
+  }
+
+  if (err) {
+    reply_with_error ("device name is not a partition");
+    return NULL;
+  }
+
+  char *r = strndup (part, n);
+  if (r == NULL) {
+    reply_with_perror ("strdup");
+    return NULL;
+  }
+
+  return r;
+}
index 014687d..52c2b7f 100644 (file)
@@ -5064,6 +5064,20 @@ with the given C<path> name.
 
 See also C<guestfs_stat>.");
 
+  ("part_to_dev", (RString "device", [Device "partition"]), 272, [],
+   [InitPartition, Always, TestOutputDevice (
+      [["part_to_dev"; "/dev/sda1"]], "/dev/sda");
+    InitEmpty, Always, TestLastFail (
+      [["part_to_dev"; "/dev/sda"]])],
+   "convert partition name to device name",
+   "\
+This function takes a partition name (eg. \"/dev/sdb1\") and
+removes the partition number, returning the device name
+(eg. \"/dev/sdb\").
+
+The named partition must exist, for example as a string returned
+from C<guestfs_list_partitions>.");
+
 ]
 
 let all_functions = non_daemon_functions @ daemon_functions
index e6a4f00..31e9cf9 100644 (file)
@@ -1 +1 @@
-271
+272