[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