diff options
author | Eli Zaretskii <eliz@gnu.org> | 2000-03-15 11:10:52 +0000 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2000-03-15 11:10:52 +0000 |
commit | dfed996b3b77d0ff05a53f777148ab0ecfe58d5d (patch) | |
tree | 8757397eb87fb95d7479e94e6cd29242247ded4c | |
parent | 10982c59dece7d7ffb473afb2882d121a972f03a (diff) | |
download | gdb-dfed996b3b77d0ff05a53f777148ab0ecfe58d5d.zip gdb-dfed996b3b77d0ff05a53f777148ab0ecfe58d5d.tar.gz gdb-dfed996b3b77d0ff05a53f777148ab0ecfe58d5d.tar.bz2 |
* ser-go32.c (dos_get_tty_state): Fail if the (fake) handle was
not opened by dos_open, but let the 3 standard handles go through
unharmed.
-rw-r--r-- | gdb/ser-go32.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gdb/ser-go32.c b/gdb/ser-go32.c index 0474000..1d5eea2 100644 --- a/gdb/ser-go32.c +++ b/gdb/ser-go32.c @@ -488,6 +488,10 @@ dos_open (scb, name) return -1; } + /* FIXME: this is a Bad Idea (tm)! One should *never* invent file + handles, since they might be already used by other files/devices. + The Right Way to do this is to create a real handle by dup()'ing + some existing one. */ fd = name[3] - '1'; port = &ports[fd]; if (port->refcnt++ > 0) @@ -650,6 +654,19 @@ dos_get_tty_state (scb) struct dos_ttystate *port = &ports[scb->fd]; struct dos_ttystate *state; + /* Are they asking about a port we opened? */ + if (port->refcnt <= 0) + { + /* We've never heard about this port. We should fail this call, + unless they are asking about one of the 3 standard handles, + in which case we pretend the handle was open by us if it is + connected to a terminal device. This is beacuse Unix + terminals use the serial interface, so GDB expects the + standard handles to go through here. */ + if (scb->fd >= 3 || !isatty (scb->fd)) + return NULL; + } + state = (struct dos_ttystate *) xmalloc (sizeof *state); *state = *port; return (serial_ttystate) state; |