[Pkg-libvirt-commits] [libguestfs] 15/29: utils: Add guestfs_int_drive_index and unit test.

Hilko Bengen bengen at moszumanska.debian.org
Sun Nov 1 17:15:04 UTC 2015


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to annotated tag upstream/1.29.49
in repository libguestfs.

commit a54fef132a66a56c7287b7bc8876438d84c8ed84
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Wed Jul 1 14:27:53 2015 +0100

    utils: Add guestfs_int_drive_index and unit test.
    
    Add guestfs_int_drive_index which does basically the opposite of
    guestfs_int_drive_name.  This commit also includes a unit test.
---
 src/guestfs-internal-frontend.h |  1 +
 src/test-utils.c                | 22 ++++++++++++++++++++++
 src/utils.c                     | 21 +++++++++++++++++++++
 3 files changed, 44 insertions(+)

diff --git a/src/guestfs-internal-frontend.h b/src/guestfs-internal-frontend.h
index 9322201..e3f0db6 100644
--- a/src/guestfs-internal-frontend.h
+++ b/src/guestfs-internal-frontend.h
@@ -105,6 +105,7 @@ extern char **guestfs_int_split_string (char sep, const char *);
 extern char *guestfs_int_exit_status_to_string (int status, const char *cmd_name, char *buffer, size_t buflen);
 extern int guestfs_int_random_string (char *ret, size_t len);
 extern char *guestfs_int_drive_name (size_t index, char *ret);
+extern ssize_t guestfs_int_drive_index (const char *);
 extern int guestfs_int_is_true (const char *str);
 
 /* These functions are used internally by the CLEANUP_* macros.
diff --git a/src/test-utils.c b/src/test-utils.c
index c5e2f08..0b7714a 100644
--- a/src/test-utils.c
+++ b/src/test-utils.c
@@ -188,6 +188,27 @@ test_drive_name (void)
   assert (STREQ (s, "zzz"));
 }
 
+/* Test guestfs_int_drive_index. */
+static void
+test_drive_index (void)
+{
+  assert (guestfs_int_drive_index ("a") == 0);
+  assert (guestfs_int_drive_index ("z") == 25);
+  assert (guestfs_int_drive_index ("aa") == 26);
+  assert (guestfs_int_drive_index ("ab") == 27);
+  assert (guestfs_int_drive_index ("az") == 51);
+  assert (guestfs_int_drive_index ("ba") == 52);
+  assert (guestfs_int_drive_index ("zz") == 701);
+  assert (guestfs_int_drive_index ("aaa") == 702);
+  assert (guestfs_int_drive_index ("zzz") == 18277);
+
+  assert (guestfs_int_drive_index ("") == -1);
+  assert (guestfs_int_drive_index ("abc123") == -1);
+  assert (guestfs_int_drive_index ("123") == -1);
+  assert (guestfs_int_drive_index ("Z") == -1);
+  assert (guestfs_int_drive_index ("aB") == -1);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -196,6 +217,7 @@ main (int argc, char *argv[])
   test_join ();
   test_validate_guid ();
   test_drive_name ();
+  test_drive_index ();
 
   exit (EXIT_SUCCESS);
 }
diff --git a/src/utils.c b/src/utils.c
index 7cee16e..e9ec38e 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -271,6 +271,27 @@ guestfs_int_drive_name (size_t index, char *ret)
   return ret;
 }
 
+/* The opposite of guestfs_int_drive_name.  Take a string like "ab"
+ * and return the index (eg 27).  Note that you must remove any prefix
+ * such as "hd", "sd" etc, or any partition number before calling the
+ * function.
+ */
+ssize_t
+guestfs_int_drive_index (const char *name)
+{
+  ssize_t r = 0;
+
+  while (*name) {
+    if (*name >= 'a' && *name <= 'z')
+      r = 26*r + (*name - 'a' + 1);
+    else
+      return -1;
+    name++;
+  }
+
+  return r-1;
+}
+
 /* Similar to Tcl_GetBoolean. */
 int
 guestfs_int_is_true (const char *str)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list