Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* RFA: Support Windows extended error numbers in safe_strerror
@ 2006-02-03 21:55 Daniel Jacobowitz
  2006-02-03 23:25 ` Mark Kettenis
                   ` (3 more replies)
  0 siblings, 4 replies; 98+ messages in thread
From: Daniel Jacobowitz @ 2006-02-03 21:55 UTC (permalink / raw)
  To: gdb-patches

This is an improved version of a patch Mark Mitchell submitted last
year.  If you give strerror() anything above 42 (sys_nerr) on Windows,
it gives you back "Unknown error" - particularly unfortunate since
WSAECONNREFUSED is way above there, so connecting to a closed socket
will give you a generic error message.  This patch lets us try an
OS-specific interface to fetch an error string.

[Actually you need my next patch too to get the connection refused message;
right now you'll get a timeout.]

Any comments on this patch?

-- 
Daniel Jacobowitz
CodeSourcery

2006-02-03  Daniel Jacobowitz  <dan@codesourcery.com>

	* utils.c (safe_strerror): Try to use FormatMessage for otherwise
	unknown messages on Windows.

Index: src/gdb/utils.c
===================================================================
--- src.orig/gdb/utils.c	2006-02-03 15:13:03.000000000 -0500
+++ src/gdb/utils.c	2006-02-03 15:16:24.000000000 -0500
@@ -1,8 +1,8 @@
 /* General utility routines for GDB, the GNU debugger.
 
    Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
-   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free
-   Software Foundation, Inc.
+   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -36,6 +36,10 @@
 #include <pc.h>
 #endif
 
+#ifdef USE_WIN32API
+#include <windows.h>
+#endif
+
 /* SunOS's curses.h has a '#define reg register' in it.  Thank you Sun. */
 #ifdef reg
 #undef reg
@@ -847,7 +851,34 @@ safe_strerror (int errnum)
 {
   char *msg;
 
-  msg = strerror (errnum);
+#ifdef USE_WIN32API
+  /* On Windows, strerror never returns NULL, but it returns a useless
+     string for anything above sys_nerr.  Try a little harder to find
+     a system-provided error message in that case.  */
+  if (errnum >= sys_nerr)
+    {
+      static char *buffer;
+
+      if (buffer)
+	LocalFree (buffer);
+
+      if (FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER
+			 | FORMAT_MESSAGE_FROM_SYSTEM,
+			 NULL, errnum,
+			 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+			 (LPTSTR) &buffer, 0, NULL) != 0)
+	{
+	  if (strcmp (buffer + strlen (buffer) - 3, ".\r\n") == 0)
+	    buffer[strlen (buffer) - 3] = '\0';
+	  return buffer;
+	}
+      else
+	msg = NULL;
+    }
+  else
+#endif
+    msg = strerror (errnum);
+
   if (msg == NULL)
     {
       static char buf[32];


^ permalink raw reply	[flat|nested] 98+ messages in thread

end of thread, other threads:[~2006-03-02  0:53 UTC | newest]

Thread overview: 98+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-02-03 21:55 RFA: Support Windows extended error numbers in safe_strerror Daniel Jacobowitz
2006-02-03 23:25 ` Mark Kettenis
2006-02-03 23:39   ` Christopher Faylor
2006-02-04  3:27     ` Daniel Jacobowitz
2006-02-04  6:29       ` Jim Blandy
2006-02-04 10:33         ` Eli Zaretskii
2006-02-04 10:59       ` Eli Zaretskii
2006-02-04 14:35       ` Mark Kettenis
2006-02-04 14:52         ` Daniel Jacobowitz
2006-02-04 15:14         ` Eli Zaretskii
2006-02-05  0:15           ` Christopher Faylor
2006-02-05  4:46             ` Eli Zaretskii
2006-02-05 19:34               ` Christopher Faylor
2006-02-05 19:49                 ` Daniel Jacobowitz
2006-02-05 20:19                 ` Eli Zaretskii
2006-02-05 20:22                   ` Daniel Jacobowitz
2006-02-05 21:50                     ` Christopher Faylor
2006-02-05 21:57                       ` Daniel Jacobowitz
2006-02-05 22:33                         ` Christopher Faylor
2006-02-05 22:41                           ` Daniel Jacobowitz
2006-02-06  6:35                             ` Christopher Faylor
2006-02-06 17:26                               ` Daniel Jacobowitz
2006-02-05 22:59                           ` Eli Zaretskii
2006-02-05 22:47                         ` Eli Zaretskii
2006-02-06  2:41                           ` Daniel Jacobowitz
2006-02-06  4:20                             ` Eli Zaretskii
2006-02-05 22:57                       ` Eli Zaretskii
2006-02-05 22:44                   ` Christopher Faylor
2006-02-05 23:07                     ` Eli Zaretskii
2006-02-06  5:14                       ` Christopher Faylor
2006-02-06  7:20                         ` Eli Zaretskii
2006-02-06  8:47                           ` Corinna Vinschen
2006-02-06 12:07                             ` Bob Rossi
2006-02-06 14:23                               ` Daniel Jacobowitz
2006-02-06 18:37                                 ` Eli Zaretskii
2006-02-04 10:03     ` Eli Zaretskii
2006-02-05  0:27       ` Christopher Faylor
2006-02-05  2:01         ` Daniel Jacobowitz
2006-02-05  4:49           ` Eli Zaretskii
2006-02-05  7:39             ` Jim Blandy
2006-02-05 20:01               ` Eli Zaretskii
2006-02-05 20:20                 ` Daniel Jacobowitz
2006-02-05 22:45                   ` Eli Zaretskii
2006-02-06  2:38                     ` Daniel Jacobowitz
2006-02-05  4:48         ` Eli Zaretskii
2006-02-04  1:06   ` Jim Blandy
2006-02-04  3:00     ` Daniel Jacobowitz
2006-02-04  6:22       ` Ian Lance Taylor
2006-02-04 10:29         ` Eli Zaretskii
2006-02-04 13:53           ` Mark Kettenis
2006-02-04 15:17             ` Eli Zaretskii
2006-02-04 10:24       ` Eli Zaretskii
2006-02-04 15:33         ` Mark Kettenis
2006-02-04 15:35           ` Eli Zaretskii
2006-02-04 10:20     ` Eli Zaretskii
2006-02-04 13:14     ` Mark Kettenis
2006-02-05  7:41       ` Jim Blandy
2006-03-02  0:53   ` Michael Snyder
2006-02-04 11:58 ` Eli Zaretskii
2006-02-04 14:53   ` Daniel Jacobowitz
2006-02-04 15:09     ` Eli Zaretskii
2006-02-04 15:57       ` David Ayers
2006-02-06 17:35 ` Daniel Jacobowitz
2006-02-06 17:54   ` Christopher Faylor
2006-02-06 18:23   ` Jim Blandy
2006-02-06 19:08   ` Eli Zaretskii
2006-02-06 19:58     ` Daniel Jacobowitz
2006-02-06 20:59   ` Daniel Jacobowitz
2006-02-06 22:55   ` Mark Kettenis
2006-02-06 22:58     ` Daniel Jacobowitz
2006-02-08  0:08       ` Daniel Jacobowitz
2006-02-08 21:08         ` Mark Kettenis
2006-02-08 21:12           ` Bob Rossi
2006-02-08 23:17             ` Mark Kettenis
2006-02-08 23:23               ` Daniel Jacobowitz
2006-02-09  0:12               ` Joel Brobecker
2006-02-09  1:54                 ` Bob Rossi
2006-02-09  7:47                 ` Eli Zaretskii
2006-02-09  9:18                   ` Jim Blandy
2006-02-08 21:54           ` Eli Zaretskii
2006-02-08 23:10             ` Mark Kettenis
2006-02-08 23:22               ` Daniel Jacobowitz
2006-02-09 14:40                 ` Mark Kettenis
2006-02-09 15:14                   ` Daniel Jacobowitz
2006-02-09 20:24                   ` Eli Zaretskii
2006-02-09  8:00               ` Eli Zaretskii
2006-02-09 14:44                 ` Mark Kettenis
2006-02-09 14:57                   ` Daniel Jacobowitz
2006-02-09 20:40                     ` Eli Zaretskii
2006-02-09 21:06                       ` Daniel Jacobowitz
2006-02-09 22:13                         ` Eli Zaretskii
2006-02-09 20:26                   ` Eli Zaretskii
2006-02-09 22:37           ` Daniel Jacobowitz
2006-02-10  7:53             ` Eli Zaretskii
2006-02-10 16:18               ` Christopher Faylor
2006-02-10 16:49                 ` Daniel Jacobowitz
2006-02-10 18:18                 ` Eli Zaretskii
2006-02-10 21:56 ` Daniel Jacobowitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox