}
if (buf[0])
{
- char cname[SO_NAME_MAX_PATH_SIZE];
- cygwin_conv_path (CCP_WIN_W_TO_POSIX, buf, cname,
- SO_NAME_MAX_PATH_SIZE);
- so->name = cname;
+ bool ok = false;
+
+ /* Check how big the output buffer has to be. */
+ ssize_t size = cygwin_conv_path (CCP_WIN_W_TO_POSIX, buf, nullptr, 0);
+ if (size > 0)
+ {
+ /* SIZE includes the null terminator. */
+ so->name.resize (size - 1);
+ if (cygwin_conv_path (CCP_WIN_W_TO_POSIX, buf, so->name.data (),
+ size) == 0)
+ ok = true;
+ }
+ if (!ok)
+ so->name = so->original_name;
}
else
{
char *rname = realpath (name, NULL);
- if (rname && strlen (rname) < SO_NAME_MAX_PATH_SIZE)
+ if (rname != nullptr)
{
so->name = rname;
free (rname);
}
else
{
- warning (_("dll path for \"%s\" too long or inaccessible"), name);
+ warning (_("dll path for \"%s\" inaccessible"), name);
so->name = so->original_name;
}
}