summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libc/syscalls.c
blob: 00c58d9aecc62c7164694057d9fb8465f20e90bd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
 *  RTEMS Fake System Calls
 *
 *  This file contains "fake" versions of the system call routines
 *  which are reference by many libc implementations.  Once a routine
 *  has been implemented in terms of RTEMS services, it should be
 *  taken out of this file.
 *
 *  COPYRIGHT (c) 1989-1997.
 *  On-Line Applications Research Corporation (OAR).
 *  Copyright assigned to U.S. Government, 1994.
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.OARcorp.com/rtems/license.html.
 *
 *  $Id$
 *
 */

#include <sys/types.h>
#include <sys/stat.h>
#include <assert.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>  /* only for puts */

#include <rtems.h>
#include <rtems/libio.h>

#ifdef RTEMS_NEWLIB
/*
 *  fstat, stat, and isatty must lie consistently and report that everything
 *  is a tty or stdout will not be line buffered.
 */

int __rtems_fstat(int _fd, struct stat* _sbuf)
{
#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)
{
  struct stat st;

  if (__rtems_fstat(_fd, &st) < 0)
    return 0;
  return S_ISCHR (st.st_mode);
}

#if !defined(RTEMS_UNIX)
int stat( const char *path, struct stat *buf )
{
  if ( strncmp( "/dev/", path, 5 ) ) {
    return -1;
  }
  return __rtems_fstat( 0, buf );
}

int link( const char *existing, const char *new )
{
  /* always fail */
  return -1;
}

int unlink( const char *path )
{
  /* always fail */
  return -1;
}

char *getcwd( char *_buf, size_t _size)
{

/*  assert( FALSE ); */
  errno = ENOSYS;
  return 0;
}
int fork() {
  puts( "fork -- not supported!!!" );
  assert( 0 );
  errno = ENOSYS;
  return -1;
}
int execv(const char *_path, char * const _argv[] ) {
  puts( "execv -- not supported!!!" ); 
  assert( 0 );
  errno = ENOSYS;
  return -1;
}
int wait() {
  puts( "wait -- not supported!!!" );
  assert( 0 );
  errno = ENOSYS;
  return -1;
}
#endif

#endif