2013-02-01 Andreas Tobler <andreast@fgznet.ch>
[deliverable/binutils-gdb.git] / gdb / serial.h
index 8ba8ae6ec95917b792daf53329d13c7def1caff6..a91c8b812a43286d09d7fc9992dd17ede5b2ae23 100644 (file)
@@ -1,6 +1,5 @@
 /* Remote serial support interface definitions for GDB, the GNU Debugger.
-   Copyright (C) 1992-1996, 1998-2001, 2004-2012 Free Software
-   Foundation, Inc.
+   Copyright (C) 1992-2013 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -37,13 +36,18 @@ typedef void *serial_ttystate;
 struct serial;
 
 /* Try to open NAME.  Returns a new `struct serial *' on success, NULL
-   on failure.  Note that some open calls can block and, if possible, 
-   should be  written to be non-blocking, with calls to ui_look_hook 
-   so they can be cancelled.  An async interface for open could be
-   added to GDB if necessary.  */
+   on failure.  The new serial object has a reference count of 1.
+   Note that some open calls can block and, if possible, should be
+   written to be non-blocking, with calls to ui_look_hook so they can
+   be cancelled.  An async interface for open could be added to GDB if
+   necessary.  */
 
 extern struct serial *serial_open (const char *name);
 
+/* Returns true if SCB is open.  */
+
+extern int serial_is_open (struct serial *scb);
+
 /* Find an already opened serial stream using a file handle.  */
 
 extern struct serial *serial_for_fd (int fd);
@@ -52,10 +56,18 @@ extern struct serial *serial_for_fd (int fd);
 
 extern struct serial *serial_fdopen (const int fd);
 
-/* Push out all buffers, close the device and destroy SCB.  */
+/* Push out all buffers, close the device and unref SCB.  */
 
 extern void serial_close (struct serial *scb);
 
+/* Increment reference count of SCB.  */
+
+extern void serial_ref (struct serial *scb);
+
+/* Decrement reference count of SCB.  */
+
+extern void serial_unref (struct serial *scb);
+
 /* Create a pipe, and put the read end in files[0], and the write end
    in filde[1].  Returns 0 for success, negative value for error (in
    which case errno contains the error).  */
@@ -192,13 +204,6 @@ typedef void (serial_event_ftype) (struct serial *scb, void *context);
 extern void serial_async (struct serial *scb,
                          serial_event_ftype *handler, void *context);
 
-/* Provide direct access to the underlying FD (if any) used to
-   implement the serial device.  This interface is clearly
-   deprecated.  Will call internal_error() if the operation isn't
-   applicable to the current serial device.  */
-
-extern int deprecated_serial_fd (struct serial *scb);
-
 /* Trace/debug mechanism.
 
    serial_debug() enables/disables internal debugging.
@@ -213,6 +218,10 @@ extern int serial_debug_p (struct serial *scb);
 
 struct serial
   {
+    /* serial objects are ref counted (but not the underlying
+       connection, just the object's lifetime in memory).  */
+    int refcnt;
+
     int fd;                    /* File descriptor */
     /* File descriptor for a separate error stream that should be
        immediately forwarded to gdb_stderr.  This may be -1.
@@ -232,6 +241,7 @@ struct serial
                                   still need to wait for this many
                                   more seconds.  */
     char *name;                        /* The name of the device or host */
+    struct serial *next;       /* Pointer to the next `struct serial *' */
     int debug_p;               /* Trace this serial devices operation.  */
     int async_state;           /* Async internal state.  */
     void *async_context;       /* Async event thread's context */
This page took 0.024382 seconds and 4 git commands to generate.