* remote-utils.c (remote_open): Check the type of specified
authorDaniel Jacobowitz <drow@false.org>
Sat, 30 Dec 2006 15:44:51 +0000 (15:44 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sat, 30 Dec 2006 15:44:51 +0000 (15:44 +0000)
serial port devices before opening them.
* server.c (main): Kill the inferior if an error occurs during
the first remote_open.

gdb/gdbserver/ChangeLog
gdb/gdbserver/remote-utils.c
gdb/gdbserver/server.c

index 02db4dd..d2b7d3b 100644 (file)
@@ -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.
index fd5c844..80c6343 100644 (file)
@@ -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");
 
index 10a891e..84d0d68 100644 (file)
@@ -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]);