[PATCH 2/5] lib: Make --disassemble-aml accept the outputdir argument (LP: #1201250)

Keng-Yu Lin kengyu at canonical.com
Tue Feb 11 12:49:54 UTC 2014


This patch make it possible to optionally specify an argument as
the output directory as:

  fwts --disassemble-aml=/tmp

If the argument is not specified, the output directory is the pwd.

Signed-off-by: Keng-Yu Lin <kengyu at canonical.com>
---
 src/lib/include/fwts_iasl.h  |  3 ++-
 src/lib/src/fwts_framework.c |  4 ++--
 src/lib/src/fwts_iasl.c      | 22 +++++++++++++++-------
 3 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/src/lib/include/fwts_iasl.h b/src/lib/include/fwts_iasl.h
index 0de4756..5efc95c 100644
--- a/src/lib/include/fwts_iasl.h
+++ b/src/lib/include/fwts_iasl.h
@@ -22,7 +22,8 @@
 
 #include "fwts.h"
 
-int fwts_iasl_disassemble_all_to_file(fwts_framework *fw);
+int fwts_iasl_disassemble_all_to_file(fwts_framework *fw,
+	const char *path);
 
 int fwts_iasl_disassemble(fwts_framework *fw,
 	const char *table,
diff --git a/src/lib/src/fwts_framework.c b/src/lib/src/fwts_framework.c
index 9c69bca..39ac802 100644
--- a/src/lib/src/fwts_framework.c
+++ b/src/lib/src/fwts_framework.c
@@ -73,7 +73,7 @@ static fwts_option fwts_framework_options[] = {
 	{ "show-tests-full", 	"",   0, "Show available tests including all minor tests." },
 	{ "utils", 		"u",  0, "Run Utility 'tests'." },
 	{ "json-data-path", 	"j:", 1, "Specify path to fwts json data files - default is /usr/share/fwts." },
-	{ "disassemble-aml", 	"",   0, "Disassemble AML from DSDT and SSDT tables." },
+	{ "disassemble-aml", 	"",   2, "Disassemble AML from DSDT and SSDT tables." },
 	{ "log-type",		"",   1, "Specify log type (plaintext, json, html or xml)." },
 	{ "unsafe",		"U",  0, "Unsafe tests (tests that can potentially cause kernel oopses)." },
 	{ "filter-error-discard", "", 1, "Discard errors that match any of the specified labels." },
@@ -1091,7 +1091,7 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
 			fwts_framework_strdup(&fw->json_data_path, optarg);
 			break;
 		case 29: /* --disassemble-aml */
-			fwts_iasl_disassemble_all_to_file(fw);
+			fwts_iasl_disassemble_all_to_file(fw, optarg);
 			return FWTS_COMPLETE;
 		case 30: /* --log-type */
 			if (fwts_framework_log_type_parse(fw, optarg) != FWTS_OK)
diff --git a/src/lib/src/fwts_iasl.c b/src/lib/src/fwts_iasl.c
index af1785e..1800912 100644
--- a/src/lib/src/fwts_iasl.c
+++ b/src/lib/src/fwts_iasl.c
@@ -137,26 +137,34 @@ int fwts_iasl_disassemble(fwts_framework *fw,
  *  fwts_iasl_disassemble_all_to_file()
  * 	Disassemble DSDT and SSDT tables to separate files.
  */
-int fwts_iasl_disassemble_all_to_file(fwts_framework *fw)
+int fwts_iasl_disassemble_all_to_file(fwts_framework *fw,
+	const char *path)
 {
 	int i;
 	int ret;
+	char filename[PATH_MAX];
+	char pathname[PATH_MAX];
 
-	ret = fwts_iasl_disassemble_to_file(fw, "DSDT", 0, "DSDT.dsl");
+	if (path == NULL)
+		strncpy(pathname, "", sizeof(pathname));
+	else
+		snprintf(pathname, sizeof(pathname), "%s/", path);
+
+	snprintf(filename, sizeof(filename), "%sDSDT.dsl", pathname);
+
+	ret = fwts_iasl_disassemble_to_file(fw, "DSDT", 0, filename);
 	if (ret == FWTS_ERROR_NO_PRIV) {
 		fprintf(stderr, "Need to have root privilege to read ACPI tables from memory! Re-run using sudo.\n");
 		return FWTS_ERROR;
 	}
 	if (ret == FWTS_OK)
-		printf("Disassembled DSDT to DSDT.dsl\n");
+		printf("Disassembled DSDT to %s\n", filename);
 
 	for (i=0; ;i++) {
-		char filename[PATH_MAX];
-
-		snprintf(filename, sizeof(filename), "SSDT%d.dsl", i);
+		snprintf(filename, sizeof(filename), "%sSSDT%d.dsl", pathname, i);
 		if (fwts_iasl_disassemble_to_file(fw, "SSDT", i, filename) != FWTS_OK)
 			break;
-		printf("Disassembled SSDT %d to SSDT%d.dsl\n", i, i);
+		printf("Disassembled SSDT %d to %s\n", i, filename);
 	}
 
 	return FWTS_OK;
-- 
1.8.1.2




More information about the fwts-devel mailing list