summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
-rw-r--r--cpukit/libcsupport/src/termios.c1
5 files changed, 27 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;
diff --git a/cpukit/libcsupport/src/termios.c b/cpukit/libcsupport/src/termios.c
index 8512fd6e14..85e171bd16 100644
--- a/cpukit/libcsupport/src/termios.c
+++ b/cpukit/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;