[PATCH 07/11] acpica + lib: fix assemble/dissassemble to work with new ACPICA core
Keng-Yu Lin
kengyu at canonical.com
Thu Apr 12 06:23:30 UTC 2012
On Thu, Apr 12, 2012 at 7:50 AM, Colin King <colin.king at canonical.com> wrote:
> From: Colin Ian King <colin.king at canonical.com>
>
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
> 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);
> --
> 1.7.9.5
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>
More information about the fwts-devel
mailing list