aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2006-12-30 15:44:51 +0000
committerDaniel Jacobowitz <drow@false.org>2006-12-30 15:44:51 +0000
commit8264bb58d66b04ee787f18e5cb6a54f6cc75e620 (patch)
tree5dfb1df37d747c2029957397323cd1358cc21209 /gdb
parent03fa9f0e991d53341620fb552ca90f302131a74b (diff)
downloadgdb-8264bb58d66b04ee787f18e5cb6a54f6cc75e620.zip
gdb-8264bb58d66b04ee787f18e5cb6a54f6cc75e620.tar.gz
gdb-8264bb58d66b04ee787f18e5cb6a54f6cc75e620.tar.bz2
* remote-utils.c (remote_open): Check the type of specified
serial port devices before opening them. * server.c (main): Kill the inferior if an error occurs during the first remote_open.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/gdbserver/ChangeLog8
-rw-r--r--gdb/gdbserver/remote-utils.c20
-rw-r--r--gdb/gdbserver/server.c7
3 files changed, 32 insertions, 3 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 02db4dd..d2b7d3b 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,11 @@
+2006-12-30 Denis PILAT <denis.pilat@st.com>
+ Daniel Jacobowitz <dan@codesourcery.com>
+
+ * remote-utils.c (remote_open): Check the type of specified
+ serial port devices before opening them.
+ * server.c (main): Kill the inferior if an error occurs during
+ the first remote_open.
+
2006-12-05 Markus Deuling <deuling@de.ibm.com>
* README: Update supported targets.
diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c
index fd5c844..80c6343 100644
--- a/gdb/gdbserver/remote-utils.c
+++ b/gdb/gdbserver/remote-utils.c
@@ -52,6 +52,8 @@
#if HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
+#include <sys/stat.h>
+#include <errno.h>
#if USE_WIN32API
#include <winsock.h>
@@ -94,13 +96,25 @@ remote_open (char *name)
#if defined(F_SETFL) && defined (FASYNC)
int save_fcntl_flags;
#endif
-
- if (!strchr (name, ':'))
+ char *port_str;
+
+ port_str = strchr (name, ':');
+ if (port_str == NULL)
{
#ifdef USE_WIN32API
error ("Only <host>:<port> is supported on this platform.");
#else
- remote_desc = open (name, O_RDWR);
+ struct stat statbuf;
+
+ if (stat (name, &statbuf) == 0
+ && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode)))
+ remote_desc = open (name, O_RDWR);
+ else
+ {
+ errno = EINVAL;
+ remote_desc = -1;
+ }
+
if (remote_desc < 0)
perror_with_name ("Could not open remote device");
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 10a891e..84d0d68 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -614,6 +614,13 @@ main (int argc, char *argv[])
}
}
+ if (setjmp (toplevel))
+ {
+ fprintf (stderr, "Killing inferior\n");
+ kill_inferior ();
+ exit (1);
+ }
+
while (1)
{
remote_open (argv[1]);