This function didn't have a unit test before.
---
 src/test-utils.c | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/src/test-utils.c b/src/test-utils.c
index 8e1491f..c5e2f08 100644
--- a/src/test-utils.c
+++ b/src/test-utils.c
@@ -1,5 +1,5 @@
 /* libguestfs
- * Copyright (C) 2014 Red Hat Inc.
+ * Copyright (C) 2014-2015 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -162,6 +162,32 @@ test_validate_guid (void)
   assert (guestfs_int_validate_guid ("21EC2020-3AEA-1069-A2DD-08002B30309D") ==
1);
 }
 
+/* Test guestfs_int_drive_name. */
+static void
+test_drive_name (void)
+{
+  char s[10];
+
+  guestfs_int_drive_name (0, s);
+  assert (STREQ (s, "a"));
+  guestfs_int_drive_name (25, s);
+  assert (STREQ (s, "z"));
+  guestfs_int_drive_name (26, s);
+  assert (STREQ (s, "aa"));
+  guestfs_int_drive_name (27, s);
+  assert (STREQ (s, "ab"));
+  guestfs_int_drive_name (51, s);
+  assert (STREQ (s, "az"));
+  guestfs_int_drive_name (52, s);
+  assert (STREQ (s, "ba"));
+  guestfs_int_drive_name (701, s);
+  assert (STREQ (s, "zz"));
+  guestfs_int_drive_name (702, s);
+  assert (STREQ (s, "aaa"));
+  guestfs_int_drive_name (18277, s);
+  assert (STREQ (s, "zzz"));
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -169,6 +195,7 @@ main (int argc, char *argv[])
   test_concat ();
   test_join ();
   test_validate_guid ();
+  test_drive_name ();
 
   exit (EXIT_SUCCESS);
 }
-- 
2.3.1
    
    
    
 
                    
                    
                        
                        Show replies by date
                        
                    
                    
                    
                        
                            
                
                
                    
                    
                    
     
    
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                | 16 ++++++++++++++++
 src/utils.c                     | 21 +++++++++++++++++++++
 3 files changed, 38 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..9fd5a29 100644
--- a/src/test-utils.c
+++ b/src/test-utils.c
@@ -188,6 +188,21 @@ 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);
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -196,6 +211,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)
-- 
2.3.1