]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: add new 'ask' type TABLE
authorKarel Zak <kzak@redhat.com>
Mon, 29 Apr 2013 13:29:48 +0000 (15:29 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 16 Sep 2013 14:46:53 +0000 (16:46 +0200)
The new type could be used to print table-like output (for example
list of the partitions).

Signed-off-by: Karel Zak <kzak@redhat.com>
fdisks/fdisk-ask.c
libfdisk/src/ask.c
libfdisk/src/fdiskP.h
libfdisk/src/libfdisk.h

index 61dc0c2df22949d1d6a4b683733d9df9031f03f1..11c4dd5ff1649e316ff054f94424579d1aff52ac 100644 (file)
@@ -199,6 +199,9 @@ int ask_callback(struct fdisk_context *cxt, struct fdisk_ask *ask,
                        ask->data.yesno.result = rpmatch(buf);
                DBG(ASK, dbgprint("yes-no ask: reply '%s' [rc=%d]", buf, rc));
                break;
+       case FDISK_ASKTYPE_TABLE:
+               tt_print_table(fdisk_ask_get_table(ask));
+               break;
        default:
                warnx(_("internal error: unsupported dialog type %d"), fdisk_ask_get_type(ask));
                return -EINVAL;
index 1b4791af36e1b6a8b14d0be26e51d54c28c54a3e..a95d54233ea013c87e806c37b8befea09cf105c2 100644 (file)
@@ -408,6 +408,33 @@ int fdisk_ask_yesno_set_result(struct fdisk_ask *ask, uint64_t result)
        return 0;
 }
 
+struct tt *fdisk_ask_get_table(struct fdisk_ask *ask)
+{
+       assert(ask);
+       assert(fdisk_is_ask(ask, TABLE));
+       return ask->data.table;
+}
+
+int fdisk_print_table(struct fdisk_context *cxt, struct tt *tb)
+{
+       struct fdisk_ask *ask;
+       int rc;
+
+       assert(cxt);
+       assert(tb);
+
+       ask = fdisk_new_ask();
+       if (!ask)
+               return -ENOMEM;
+
+       fdisk_ask_set_type(ask, FDISK_ASKTYPE_TABLE);
+       ask->data.table = tb;
+
+       rc = fdisk_do_ask(cxt, ask);
+
+       fdisk_free_ask(ask);
+       return rc;
+}
 
 #define is_print_ask(a) (fdisk_is_ask(a, WARN) || fdisk_is_ask(a, WARNX) || fdisk_is_ask(a, INFO))
 
index 541b753966612ecc595b3ef159b398bb7b8fb0e3..01b9ec6f423a87b1d58efb7022fea34fd5e991be 100644 (file)
@@ -21,6 +21,7 @@
 #include "libfdisk.h"
 
 #include "nls.h"               /* temporary before dialog API will be implamented */
+#include "tt.h"
 
 /* features */
 #define CONFIG_LIBFDISK_ASSERT
@@ -237,6 +238,8 @@ struct fdisk_ask {
                struct ask_yesno {
                        int             result;         /* TRUE or FALSE */
                } yesno;
+               /* FDISK_ASKTYPE_TABLE, see include/tt.h  */
+               struct tt *table;
        } data;
 };
 
@@ -319,4 +322,7 @@ extern void gpt_list_table(struct fdisk_context *cxt, int xtra);
 /* ask.c */
 extern int fdisk_ask_partnum(struct fdisk_context *cxt, size_t *partnum, int wantnew);
 
+extern struct tt *fdisk_ask_get_table(struct fdisk_ask *ask);
+extern int fdisk_print_table(struct fdisk_context *cxt, struct tt *tb);
+
 #endif /* _LIBFDISK_PRIVATE_H */
index 8a440672b3fc20abe1a05ebca468bf33e526310b..c3e6ad582dc10d5a6b05ddcd230c6c0b85b1506b 100644 (file)
@@ -32,6 +32,7 @@ struct fdisk_context;
 struct fdisk_label;
 struct fdisk_parttype;
 struct fdisk_ask;
+struct tt;
 
 /*
  * Supported partition table types (labels)
@@ -58,7 +59,8 @@ enum {
        FDISK_ASKTYPE_WARN,
        FDISK_ASKTYPE_WARNX,
        FDISK_ASKTYPE_INFO,
-       FDISK_ASKTYPE_YESNO
+       FDISK_ASKTYPE_YESNO,
+       FDISK_ASKTYPE_TABLE
 };