]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
dlltool: file name too long
authorJiaying Song <jiaying.song.cn@windriver.com>
Tue, 13 Aug 2024 02:31:21 +0000 (10:31 +0800)
committerAlan Modra <amodra@gmail.com>
Wed, 28 Aug 2024 12:59:40 +0000 (22:29 +0930)
During the execution of the command: i686-w64-mingw32-dlltool
--input-def $def_filepath --output-delaylib $filepath --dllname qemu.exe
An error occurred:
i686-w64-mingw32-dlltool: failed to open temporary head file: ..._w64_mingw32_nativesdk_qemu_8_2_2_build_plugins_libqemu_plugin_api_a_h.s

Due to the path length exceeding the Linux system's file name length
limit (NAME_MAX=255), the temporary file name generated by the
i686-w64-mingw32-dlltool command becomes too long to open. To address
this, a new temporary file name prefix is generated using tmp_prefix =
prefix_encode ("d", getpid()), ensuring that the file name does not
exceed the system's length limit.

Signed-off-by: Jiaying Song <jiaying.song.cn@windriver.com>
Reviewed-by: Alan Modra <amodra@gmail.com>
binutils/dlltool.c

index d75a99d8b3ded66c60e5aa19496e4031dfc7f997..6dc16a9ed840205076c48ef1aab4c2452e898e72 100644 (file)
@@ -4068,9 +4068,9 @@ main (int ac, char **av)
   if (tmp_prefix == NULL)
     {
       /* If possible use a deterministic prefix.  */
-      if (imp_name || delayimp_name)
+      const char *input = imp_name ? imp_name : delayimp_name;
+      if (input && strlen (input) + 2 <= NAME_MAX)
        {
-         const char *input = imp_name ? imp_name : delayimp_name;
          tmp_prefix = xmalloc (strlen (input) + 2);
          sprintf (tmp_prefix, "%s_", input);
          for (i = 0; tmp_prefix[i]; i++)
@@ -4078,9 +4078,7 @@ main (int ac, char **av)
              tmp_prefix[i] = '_';
        }
       else
-       {
-         tmp_prefix = prefix_encode ("d", getpid ());
-       }
+       tmp_prefix = prefix_encode ("d", getpid ());
     }
 
   mangle_defs ();