[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] File name too long causing failure to open temporary head file i
From: |
jiaying.song.cn |
Subject: |
[PATCH] File name too long causing failure to open temporary head file in dlltool |
Date: |
Mon, 12 Aug 2024 17:28:27 +0800 |
From: Jiaying Song <jiaying.song.cn@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.cn@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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] File name too long causing failure to open temporary head file in dlltool,
jiaying.song.cn <=