summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2012-11-30 17:09:20 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2012-12-06 20:30:31 +0100
commitf2cce94a36f41f92b4dac4ef50e06edb13c1078b (patch)
treed987811cc4e96fa0eac7c8315f1d14280c35ff01 /tools
parentd83e521b6bbdcbb606a1d057e42965f84d023456 (diff)
downloadmsitools-f2cce94a36f41f92b4dac4ef50e06edb13c1078b.tar.gz
msitools-f2cce94a36f41f92b4dac4ef50e06edb13c1078b.tar.xz
msitools-f2cce94a36f41f92b4dac4ef50e06edb13c1078b.zip
msiinfo: add tables command
Diffstat (limited to 'tools')
-rw-r--r--tools/msiinfo.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/tools/msiinfo.c b/tools/msiinfo.c
index e9c6288..755df9e 100644
--- a/tools/msiinfo.c
+++ b/tools/msiinfo.c
@@ -214,6 +214,40 @@ static int cmd_streams(struct Command *cmd, int argc, char **argv)
libmsi_unref(db);
}
+static int cmd_tables(struct Command *cmd, int argc, char **argv)
+{
+ LibmsiDatabase *db = NULL;
+ LibmsiQuery *query = NULL;
+ LibmsiResult r;
+
+ if (argc != 2) {
+ cmd_usage(stderr, cmd);
+ }
+
+ r = libmsi_database_open(argv[1], LIBMSI_DB_OPEN_READONLY, &db);
+ if (r) {
+ print_libmsi_error(r);
+ }
+
+ r = libmsi_database_open_query(db, "SELECT `Name` FROM `_Tables`", &query);
+ if (r) {
+ print_libmsi_error(r);
+ }
+
+ r = libmsi_query_execute(query, NULL);
+ if (r) {
+ print_libmsi_error(r);
+ }
+
+ r = print_strings_from_query(query);
+ if (r) {
+ print_libmsi_error(r);
+ }
+
+ libmsi_unref(query);
+ libmsi_unref(db);
+}
+
static int cmd_version(struct Command *cmd, int argc, char **argv)
{
printf("%s (%s) version %s\n", program_name, PACKAGE, VERSION);
@@ -246,6 +280,12 @@ static struct Command cmds[] = {
.func = cmd_streams,
},
{
+ .cmd = "tables",
+ .opts = "FILE",
+ .desc = "List tables in a .msi file",
+ .func = cmd_tables,
+ },
+ {
.cmd = "-h",
.func = cmd_help,
},