From patchwork Wed Apr 11 23:50:52 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [07/11] acpica + lib: fix assemble/dissassemble to work with new ACPICA core Date: Wed, 11 Apr 2012 13:50:52 -0000 From: Colin King X-Patchwork-Id: 151944 Message-Id: <1334188256-26566-8-git-send-email-colin.king@canonical.com> To: fwts-devel@lists.ubuntu.com From: Colin Ian King Signed-off-by: Colin Ian King Acked-by: Keng-Yu Lin Acked-by: Alex Hung --- src/acpica/source/compiler/fwts_iasl_interface.c | 15 +++++++++++---- src/lib/src/fwts_iasl.c | 10 +++++----- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/acpica/source/compiler/fwts_iasl_interface.c b/src/acpica/source/compiler/fwts_iasl_interface.c index b4be8ef..ada4326 100644 --- a/src/acpica/source/compiler/fwts_iasl_interface.c +++ b/src/acpica/source/compiler/fwts_iasl_interface.c @@ -37,9 +37,11 @@ static void init_asl_core(void) Gbl_Files[i].Handle = NULL; Gbl_Files[i].Filename = NULL; } - + Gbl_Files[ASL_FILE_STDOUT].Handle = stdout; Gbl_Files[ASL_FILE_STDOUT].Filename = "STDOUT"; + Gbl_Files[ASL_FILE_STDERR].Handle = stdout; + Gbl_Files[ASL_FILE_STDERR].Filename = "STDOUT"; } int fwts_iasl_disassemble_aml(const char *aml, const char *outputfile) @@ -55,10 +57,11 @@ int fwts_iasl_disassemble_aml(const char *aml, const char *outputfile) /* Child */ init_asl_core(); + /* Setup ACPICA disassembler globals */ Gbl_DisasmFlag = TRUE; Gbl_DoCompile = FALSE; Gbl_OutputFilenamePrefix = (char*)outputfile; - Gbl_UseDefaultAmlFilename = FALSE; + Gbl_UseDefaultAmlFilename = FALSE; /* Throw away noisy errors */ freopen("/dev/null", "w", stderr); @@ -82,7 +85,7 @@ int fwts_iasl_assemble_aml(const char *source, char **output) char buffer[8192]; int n; int len = 0; - int status; + int status; FILE *fp; if (pipe(pipefds) < 0) @@ -104,8 +107,12 @@ int fwts_iasl_assemble_aml(const char *source, char **output) } close(pipefds[0]); + /* Setup ACPICA compiler globals */ Gbl_DisasmFlag = FALSE; Gbl_DoCompile = TRUE; + Gbl_PreprocessFlag = FALSE; + Gbl_UseDefaultAmlFilename = FALSE; + Gbl_OutputFilenamePrefix = source; status = AslDoOnePathname(source, AslDoOneFile); @@ -116,7 +123,7 @@ int fwts_iasl_assemble_aml(const char *source, char **output) default: /* Parent */ close(pipefds[1]); - + while ((n = read(pipefds[0], buffer, sizeof(buffer))) > 0) { data = realloc(data, len + n + 1); memcpy(data + len, buffer, n); diff --git a/src/lib/src/fwts_iasl.c b/src/lib/src/fwts_iasl.c index d6c8676..d75d997 100644 --- a/src/lib/src/fwts_iasl.c +++ b/src/lib/src/fwts_iasl.c @@ -169,18 +169,18 @@ int fwts_iasl_reassemble(fwts_framework *fw, /* Now we have a disassembled source in tmpfile, so let's assemble it */ if (fwts_iasl_assemble_aml(tmpfile, &output_text) < 0) { - (void)unlink(tmpfile); + (void)unlink(amlfile); (void)unlink(tmpfile); free(output_text); return FWTS_ERROR; } + /* Remove these now we don't need them */ (void)unlink(tmpfile); + (void)unlink(amlfile); - /* For some reason that I've not yet fathomed the ACPICA assembler - leaves a .src file lying around so let's remove it to be tidy */ - - snprintf(tmpfile, sizeof(tmpfile), "/tmp/fwts_iasl_%d.src", pid); + /* And remove aml file generated from ACPICA compiler */ + snprintf(tmpfile, sizeof(tmpfile), "/tmp/fwts_iasl_%d.aml", pid); (void)unlink(tmpfile); *iasl_errors = fwts_list_from_text(output_text);