From: Jiaying Song Date: Tue, 13 Aug 2024 02:31:21 +0000 (+0800) Subject: dlltool: file name too long X-Git-Tag: gdb-16-branchpoint~1046 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a253bea8995323201b016fe477280c1782688ab4;p=thirdparty%2Fbinutils-gdb.git dlltool: file name too long 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 Reviewed-by: Alan Modra --- diff --git a/binutils/dlltool.c b/binutils/dlltool.c index d75a99d8b3d..6dc16a9ed84 100644 --- a/binutils/dlltool.c +++ b/binutils/dlltool.c @@ -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 ();