From: Daniel Jacobowitz <drow@false.org>
To: gdb-patches@sourceware.org
Subject: RFA: Support Windows extended error numbers in safe_strerror
Date: Fri, 03 Feb 2006 21:55:00 -0000 [thread overview]
Message-ID: <20060203215455.GA3501@nevyn.them.org> (raw)
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];
next reply other threads:[~2006-02-03 21:55 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-03 21:55 Daniel Jacobowitz [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060203215455.GA3501@nevyn.them.org \
--to=drow@false.org \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox