]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/windows-nat.c
windows-nat: Remove SO_NAME_MAX_PATH_SIZE limit
[thirdparty/binutils-gdb.git] / gdb / windows-nat.c
index a01011248c1fb0a18e8106ea567a0d1019bd3cc9..278bfb0e1f1fb6b5619e9ff8edea6d0c07557dec 100644 (file)
@@ -874,22 +874,32 @@ windows_make_so (const char *name, LPVOID load_addr)
     }
   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;
        }
     }