Introduce zpool_get_prop_literal interface
authorRalf Ertzinger <ralf@skytale.net>
Wed, 23 Oct 2013 08:33:33 +0000 (10:33 +0200)
committerRalf Ertzinger <ralf@skytale.net>
Wed, 23 Oct 2013 08:33:33 +0000 (10:33 +0200)
This change introduces zpool_get_prop_literal. It's an expanded version
of zpool_get_prop taking one additional boolean parameter. With this
parameter set to B_FALSE it will behave identically to zpool_get_prop.
Setting it to B_TRUE will return full precision numbers for the
following properties:

ZPOOL_PROP_SIZE
ZPOOL_PROP_ALLOCATED
ZPOOL_PROP_FREE
ZPOOL_PROP_FREEING
ZPOOL_PROP_EXPANDSZ
ZPOOL_PROP_ASHIFT

Also introduced is a wrapper function for zpool_get_prop making it
use zpool_get_prop_literal in the background.

include/libzfs.h
lib/libzfs/libzfs_pool.c

index 3472b76..145b5a3 100644 (file)
@@ -272,6 +272,8 @@ extern int zpool_label_disk(libzfs_handle_t *, zpool_handle_t *, char *);
 extern int zpool_set_prop(zpool_handle_t *, const char *, const char *);
 extern int zpool_get_prop(zpool_handle_t *, zpool_prop_t, char *,
     size_t proplen, zprop_source_t *);
+extern int zpool_get_prop_literal(zpool_handle_t *, zpool_prop_t, char *,
+    size_t proplen, zprop_source_t *, boolean_t literal);
 extern uint64_t zpool_get_prop_int(zpool_handle_t *, zpool_prop_t,
     zprop_source_t *);
 
index a6cacd3..468243c 100644 (file)
@@ -235,13 +235,23 @@ zpool_pool_state_to_name(pool_state_t state)
 }
 
 /*
- * Get a zpool property value for 'prop' and return the value in
- * a pre-allocated buffer.
+ * API compatibility wrapper around zpool_get_prop_literal
  */
 int
 zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, size_t len,
     zprop_source_t *srctype)
 {
+    return zpool_get_prop_literal(zhp, prop, buf, len, srctype, B_FALSE);
+}
+
+/*
+ * Get a zpool property value for 'prop' and return the value in
+ * a pre-allocated buffer.
+ */
+int
+zpool_get_prop_literal(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, size_t len,
+    zprop_source_t *srctype, boolean_t literal)
+{
        uint64_t intval;
        const char *strval;
        zprop_source_t src = ZPROP_SRC_NONE;
@@ -307,7 +317,11 @@ zpool_get_prop(zpool_handle_t *zhp, zpool_prop_t prop, char *buf, size_t len,
                case ZPOOL_PROP_FREEING:
                case ZPOOL_PROP_EXPANDSZ:
                case ZPOOL_PROP_ASHIFT:
-                       (void) zfs_nicenum(intval, buf, len);
+                       if (literal)
+                               (void) snprintf(buf, len, "%llu",
+                                       (u_longlong_t)intval);
+                       else
+                               (void) zfs_nicenum(intval, buf, len);
                        break;
 
                case ZPOOL_PROP_CAPACITY: