summaryrefslogtreecommitdiffstats
path: root/c/src
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-01-19 22:22:25 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-01-19 22:22:25 +0000
commit4dc0fd685bf9892cdeb93bebc8d734a68dd95311 (patch)
treea93906b2ad9159f387ee315fcbc8ce30e498d552 /c/src
parentRalf Corsepius reported a number of missing CVS Id's: (diff)
downloadrtems-4dc0fd685bf9892cdeb93bebc8d734a68dd95311.tar.bz2
Patch from Eric Norum:
With this in place, it is possible to fdopen a TCP stream socket and getc/fprintf/etc. on the STDIO stream!
Diffstat (limited to 'c/src')
-rw-r--r--c/src/exec/libcsupport/src/termios.c1
-rw-r--r--c/src/lib/libc/Makefile.in2
-rw-r--r--c/src/lib/libc/syscalls.c29
-rw-r--r--c/src/lib/libc/termios.c1
4 files changed, 26 insertions, 7 deletions
diff --git a/c/src/exec/libcsupport/src/termios.c b/c/src/exec/libcsupport/src/termios.c
index 8512fd6e14..85e171bd16 100644
--- a/c/src/exec/libcsupport/src/termios.c
+++ b/c/src/exec/libcsupport/src/termios.c
@@ -113,6 +113,7 @@ struct rtems_termios_tty {
int (*read)(int minor);
int (*write)(int minor, const char *buf, int len);
};
+
static struct rtems_termios_tty *ttyHead, *ttyTail;
static rtems_id ttyMutex;
diff --git a/c/src/lib/libc/Makefile.in b/c/src/lib/libc/Makefile.in
index 4e8d3a0320..cce8bd40ca 100644
--- a/c/src/lib/libc/Makefile.in
+++ b/c/src/lib/libc/Makefile.in
@@ -30,7 +30,7 @@ SRCS=$(C_FILES) $(H_FILES) $(SYS_H_FILES) $(RTEMS_H_FILES) $(PRIVATE_H_FILES)
OBJS=$(C_O_FILES)
include $(RTEMS_CUSTOM)
-include $(PROJECT_ROOT)/make/lib.cfg
+include $(RTEMS_ROOT)/make/lib.cfg
#
# Add local stuff here using +=
diff --git a/c/src/lib/libc/syscalls.c b/c/src/lib/libc/syscalls.c
index a91ede2446..00c58d9aec 100644
--- a/c/src/lib/libc/syscalls.c
+++ b/c/src/lib/libc/syscalls.c
@@ -26,6 +26,7 @@
#include <stdio.h> /* only for puts */
#include <rtems.h>
+#include <rtems/libio.h>
#ifdef RTEMS_NEWLIB
/*
@@ -35,20 +36,36 @@
int __rtems_fstat(int _fd, struct stat* _sbuf)
{
- if ( _fd > 2 ) {
- puts( "__rtems_fstat -- only stdio supported" );
- assert( 0 );
- }
- _sbuf->st_mode = S_IFCHR;
#ifdef HAVE_BLKSIZE
_sbuf->st_blksize = 0;
#endif
+
+ /*
+ * For now assume stdin/stdout/stderr are always a TTY line
+ */
+ if (_fd <= 2) {
+ _sbuf->st_mode = S_IFCHR;
+ } else {
+ switch (rtems_file_descriptor_type (_fd)) {
+ case RTEMS_FILE_DESCRIPTOR_TYPE_SOCKET:
+ _sbuf->st_mode = S_IFSOCK;
+ break;
+
+ default:
+ puts( "__rtems_fstat -- unknown socket type" );
+ assert( 0 );
+ }
+ }
return 0;
}
int __rtems_isatty(int _fd)
{
- return 1;
+ struct stat st;
+
+ if (__rtems_fstat(_fd, &st) < 0)
+ return 0;
+ return S_ISCHR (st.st_mode);
}
#if !defined(RTEMS_UNIX)
diff --git a/c/src/lib/libc/termios.c b/c/src/lib/libc/termios.c
index 8512fd6e14..85e171bd16 100644
--- a/c/src/lib/libc/termios.c
+++ b/c/src/lib/libc/termios.c
@@ -113,6 +113,7 @@ struct rtems_termios_tty {
int (*read)(int minor);
int (*write)(int minor, const char *buf, int len);
};
+
static struct rtems_termios_tty *ttyHead, *ttyTail;
static rtems_id ttyMutex;