[PATCH] widl: Improve temp file creation and error logging
Andrew Boyarshin
andrew.boyarshin at gmail.com
Thu Jul 22 00:58:51 CDT 2021
* Make temp file names more descriptive.
* Add a way to identify failing mkstemps by using specialized
log messages for each call to mkstemps.
Signed-off-by: Andrew Boyarshin <andrew.boyarshin at gmail.com>
---
First part of the 199498 patch split into 2 separate patches.
---
tools/widl/parser.l | 15 +++++++++++----
tools/widl/widl.c | 9 ++++++---
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/tools/widl/parser.l b/tools/widl/parser.l
index 4d3b9d683e82..278042520585 100644
--- a/tools/widl/parser.l
+++ b/tools/widl/parser.l
@@ -536,6 +536,7 @@ int do_import(char *fname)
struct imports *import;
int ptr = import_stack_ptr;
int ret, fd;
+ char *base_fname = dup_basename(fname, ".idl");
import = first_import;
while (import && strcmp(import->name, fname))
@@ -564,9 +565,15 @@ int do_import(char *fname)
input_name = path;
line_number = 1;
- name = xstrdup( "widl.XXXXXX" );
+ name = xmalloc( strlen(base_fname) + 15);
+
+ strcpy( name, base_fname );
+ strcat( name, "_import.XXXXXX" );
+
+ free(base_fname);
+
if((fd = mkstemps( name, 0 )) == -1)
- error("Could not generate a temp name from %s\n", name);
+ error("Could not generate an import temp name from %s\n", name);
temp_name = name;
if (!(f = fdopen(fd, "wt")))
@@ -605,9 +612,9 @@ static void switch_to_acf(void)
acf_name = NULL;
line_number = 1;
- name = xstrdup( "widl.XXXXXX" );
+ name = xstrdup( "widl_acf.XXXXXX" );
if((fd = mkstemps( name, 0 )) == -1)
- error("Could not generate a temp name from %s\n", name);
+ error("Could not generate an ACF temp name from %s\n", name);
temp_name = name;
if (!(f = fdopen(fd, "wt")))
diff --git a/tools/widl/widl.c b/tools/widl/widl.c
index b40745a49f8e..b3b60da00169 100644
--- a/tools/widl/widl.c
+++ b/tools/widl/widl.c
@@ -967,13 +967,16 @@ int main(int argc,char *argv[])
{
FILE *output;
int fd;
- char *name = xmalloc( strlen(header_name) + 8 );
+ char *base_input_name = dup_basename(input_name, ".idl");
+ char *name = xmalloc(strlen(base_input_name) + 8);
- strcpy( name, header_name );
+ strcpy( name, base_input_name );
strcat( name, ".XXXXXX" );
+ free(base_input_name);
+
if ((fd = mkstemps( name, 0 )) == -1)
- error("Could not generate a temp name from %s\n", name);
+ error("Could not generate a root temp name from %s\n", name);
temp_name = name;
if (!(output = fdopen(fd, "wt")))
--
2.32.0.windows.1
More information about the wine-devel
mailing list