From 33a57979738e5ab13950ec1c0e7298e41ef50929 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Thu, 23 Feb 2017 18:10:47 +0100 Subject: [PATCH] aslfiles.c: manipulate fds instead of FILE Copying what stdout/stderr point to is not portable and fails with musl because FILE is an undefined struct. Instead, use lower-level Unix functions to modify the file that stderr writes into. This works on the platforms that Yocto targets. Upstream-Status: Inappropriate [embedded specific] Signed-off-by: Patrick Ohly --- source/compiler/aslfiles.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/source/compiler/aslfiles.c b/source/compiler/aslfiles.c index 947e465..7a352b4 100644 --- a/source/compiler/aslfiles.c +++ b/source/compiler/aslfiles.c @@ -44,6 +44,11 @@ #include "aslcompiler.h" #include "acapps.h" +#include +#include +#include +#include + #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslfiles") @@ -569,6 +574,8 @@ FlOpenMiscOutputFiles ( if (Gbl_DebugFlag) { + int fd; + Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_DEBUG); if (!Filename) { @@ -582,20 +589,15 @@ FlOpenMiscOutputFiles ( /* TBD: hide this behind a FlReopenFile function */ Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Filename = Filename; - Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle = - freopen (Filename, "w+t", stderr); - - if (!Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle) + fd = open(Filename, O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); + if (fd < 0 || + dup2(fd, fileno(stderr))) { - /* - * A problem with freopen is that on error, - * we no longer have stderr. - */ Gbl_DebugFlag = FALSE; - memcpy (stderr, stdout, sizeof (FILE)); FlFileError (ASL_FILE_DEBUG_OUTPUT, ASL_MSG_DEBUG_FILENAME); AslAbort (); } + Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle = stderr; AslCompilerSignon (ASL_FILE_DEBUG_OUTPUT); AslCompilerFileHeader (ASL_FILE_DEBUG_OUTPUT); -- 2.1.4