inspection: Return root devices sorted.
[libguestfs.git] / src / inspect.c
index f04668d..67eb65f 100644 (file)
@@ -29,9 +29,7 @@
 #include <errno.h>
 #include <endian.h>
 
-#ifdef HAVE_PCRE
 #include <pcre.h>
-#endif
 
 #ifdef HAVE_HIVEX
 #include <hivex.h>
@@ -46,7 +44,7 @@
 #include "guestfs-internal-actions.h"
 #include "guestfs_protocol.h"
 
-#if defined(HAVE_PCRE) && defined(HAVE_HIVEX)
+#if defined(HAVE_HIVEX)
 
 /* The main inspection code. */
 char **
@@ -125,6 +123,15 @@ guestfs__inspect_os (guestfs_h *g)
   return ret;
 }
 
+static int
+compare_strings (const void *vp1, const void *vp2)
+{
+  const char *s1 = * (char * const *) vp1;
+  const char *s2 = * (char * const *) vp2;
+
+  return strcmp (s1, s2);
+}
+
 char **
 guestfs__inspect_get_roots (guestfs_h *g)
 {
@@ -153,6 +160,8 @@ guestfs__inspect_get_roots (guestfs_h *g)
   }
   ret[count] = NULL;
 
+  qsort (ret, count, sizeof (char *), compare_strings);
+
   return ret;
 }
 
@@ -165,9 +174,10 @@ guestfs__inspect_get_type (guestfs_h *g, const char *root)
 
   char *ret;
   switch (fs->type) {
+  case OS_TYPE_FREEBSD: ret = safe_strdup (g, "freebsd"); break;
   case OS_TYPE_LINUX: ret = safe_strdup (g, "linux"); break;
+  case OS_TYPE_NETBSD: ret = safe_strdup (g, "netbsd"); break;
   case OS_TYPE_WINDOWS: ret = safe_strdup (g, "windows"); break;
-  case OS_TYPE_FREEBSD: ret = safe_strdup (g, "freebsd"); break;
   case OS_TYPE_UNKNOWN: default: ret = safe_strdup (g, "unknown"); break;
   }
 
@@ -199,13 +209,16 @@ guestfs__inspect_get_distro (guestfs_h *g, const char *root)
   case OS_DISTRO_FEDORA: ret = safe_strdup (g, "fedora"); break;
   case OS_DISTRO_GENTOO: ret = safe_strdup (g, "gentoo"); break;
   case OS_DISTRO_LINUX_MINT: ret = safe_strdup (g, "linuxmint"); break;
+  case OS_DISTRO_MAGEIA: ret = safe_strdup (g, "mageia"); break;
   case OS_DISTRO_MANDRIVA: ret = safe_strdup (g, "mandriva"); break;
   case OS_DISTRO_MEEGO: ret = safe_strdup (g, "meego"); break;
+  case OS_DISTRO_OPENSUSE: ret = safe_strdup (g, "opensuse"); break;
   case OS_DISTRO_PARDUS: ret = safe_strdup (g, "pardus"); break;
   case OS_DISTRO_REDHAT_BASED: ret = safe_strdup (g, "redhat-based"); break;
   case OS_DISTRO_RHEL: ret = safe_strdup (g, "rhel"); break;
   case OS_DISTRO_SCIENTIFIC_LINUX: ret = safe_strdup (g, "scientificlinux"); break;
   case OS_DISTRO_SLACKWARE: ret = safe_strdup (g, "slackware"); break;
+  case OS_DISTRO_TTYLINUX: ret = safe_strdup (g, "ttylinux"); break;
   case OS_DISTRO_WINDOWS: ret = safe_strdup (g, "windows"); break;
   case OS_DISTRO_UBUNTU: ret = safe_strdup (g, "ubuntu"); break;
   case OS_DISTRO_UNKNOWN: default: ret = safe_strdup (g, "unknown"); break;
@@ -455,6 +468,7 @@ guestfs__inspect_get_package_format (guestfs_h *g, const char *root)
   case OS_PACKAGE_FORMAT_PACMAN: ret = safe_strdup (g, "pacman"); break;
   case OS_PACKAGE_FORMAT_EBUILD: ret = safe_strdup (g, "ebuild"); break;
   case OS_PACKAGE_FORMAT_PISI: ret = safe_strdup (g, "pisi"); break;
+  case OS_PACKAGE_FORMAT_PKGSRC: ret = safe_strdup (g, "pkgsrc"); break;
   case OS_PACKAGE_FORMAT_UNKNOWN:
   default:
     ret = safe_strdup (g, "unknown");
@@ -480,6 +494,7 @@ guestfs__inspect_get_package_management (guestfs_h *g, const char *root)
   case OS_PACKAGE_MANAGEMENT_PORTAGE: ret = safe_strdup (g, "portage"); break;
   case OS_PACKAGE_MANAGEMENT_PISI: ret = safe_strdup (g, "pisi"); break;
   case OS_PACKAGE_MANAGEMENT_URPMI: ret = safe_strdup (g, "urpmi"); break;
+  case OS_PACKAGE_MANAGEMENT_ZYPPER: ret = safe_strdup (g, "zypper"); break;
   case OS_PACKAGE_MANAGEMENT_UNKNOWN:
   default:
     ret = safe_strdup (g, "unknown");
@@ -591,12 +606,12 @@ guestfs___search_for_root (guestfs_h *g, const char *root)
   return NULL;
 }
 
-#else /* no PCRE or hivex at compile time */
+#else /* no hivex at compile time */
 
 /* XXX These functions should be in an optgroup. */
 
 #define NOT_IMPL(r)                                                     \
-  error (g, _("inspection API not available since this version of libguestfs was compiled without PCRE or hivex libraries")); \
+  error (g, _("inspection API not available since this version of libguestfs was compiled without the hivex library")); \
   return r
 
 char **
@@ -726,7 +741,7 @@ guestfs__inspect_is_multipart (guestfs_h *g, const char *root)
   NOT_IMPL(-1);
 }
 
-#endif /* no PCRE or hivex at compile time */
+#endif /* no hivex at compile time */
 
 void
 guestfs___free_inspect_info (guestfs_h *g)