From: Jiaying Song <jiaying.song...@windriver.com> 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...@windriver.com> --- binutils/dlltool.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/binutils/dlltool.c b/binutils/dlltool.c index 066c99a4..acaeb5a7 100644 --- a/binutils/dlltool.c +++ b/binutils/dlltool.c @@ -4099,11 +4099,18 @@ main (int ac, char **av) if (imp_name || delayimp_name) { 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++) - if (!ISALNUM (tmp_prefix[i])) - tmp_prefix[i] = '_'; + if ((strlen(input) + 2) > NAME_MAX) + { + tmp_prefix = prefix_encode ("d", getpid ()); + } + else + { + tmp_prefix = xmalloc (strlen (input) + 2); + sprintf (tmp_prefix, "%s_", input); + for (i = 0; tmp_prefix[i]; i++) + if (!ISALNUM (tmp_prefix[i])) + tmp_prefix[i] = '_'; + } } else { -- 2.25.1