source: rtems/c/src/lib/include/rtems/libio_.h @ 7a3878b

4.104.114.84.95
Last change on this file since 7a3878b was 7a3878b, checked in by Jennifer Averett <Jennifer.Averett@…>, on 12/03/98 at 22:17:13

Modifications for RTEMS_UNIX.

  • Property mode set to 100644
File size: 6.3 KB
Line 
1/*
2 *  Libio Internal Information
3 *
4 *  COPYRIGHT (c) 1989-1998.
5 *  On-Line Applications Research Corporation (OAR).
6 *  Copyright assigned to U.S. Government, 1994.
7 *
8 *  The license and distribution terms for this file may be
9 *  found in the file LICENSE in this distribution or at
10 *  http://www.OARcorp.com/rtems/license.html.
11 *
12 *  $Id$
13 */
14
15#ifndef __LIBIO__h
16#define __LIBIO__h
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22#include <rtems.h>
23#include <rtems/assoc.h>                /* assoc.h not included by rtems.h */
24#include <rtems/libio.h>
25
26#include <stdio.h>                      /* O_RDONLY, et.al. */
27#include <fcntl.h>                      /* O_RDONLY, et.al. */
28#include <assert.h>
29#include <stdarg.h>
30#include <errno.h>
31
32#if ! defined(O_NDELAY)
33# if defined(solaris2)
34#  define O_NDELAY O_NONBLOCK
35# elif defined(RTEMS_NEWLIB)
36#  define O_NDELAY _FNBIO
37# endif
38#endif
39
40#if !defined(ENOTSUP)
41#define ENOTSUP EOPNOTSUPP
42#endif
43
44#include <errno.h>
45#include <string.h>                     /* strcmp */
46#include <unistd.h>
47#include <stdlib.h>                     /* calloc() */
48
49#include "libio.h"                      /* libio.h not pulled in by rtems */
50
51
52/*
53 *  Semaphore to protect the io table
54 */
55
56#define RTEMS_LIBIO_SEM         rtems_build_name('L', 'B', 'I', 'O')
57#define RTEMS_LIBIO_IOP_SEM(n)  rtems_build_name('L', 'B', 'I', n)
58
59extern rtems_id        rtems_libio_semaphore;
60
61/*
62 *  File descriptor Table Information
63 */
64
65extern unsigned32      rtems_libio_number_iops;
66extern rtems_libio_t  *rtems_libio_iops;
67extern rtems_libio_t  *rtems_libio_last_iop;
68
69/*
70 *  External I/O Handlers Table
71 *
72 *  Space for all possible handlers is preallocated
73 *  to speed up dispatch to external handlers.
74 */
75
76extern rtems_libio_handler_t   rtems_libio_handlers[15];
77
78/*
79 *  Default mode for all files.
80 */
81
82extern mode_t    rtems_filesystem_umask;
83
84/*
85 *  set_errno_and_return_minus_one
86 *
87 *  Macro to ease common way to return an error.
88 */
89
90#ifndef set_errno_and_return_minus_one
91#define set_errno_and_return_minus_one( _error ) \
92  do { errno = (_error); return -1; } while(0)
93#endif
94
95/*
96 *  rtems_libio_iop
97 *
98 *  Macro to return the file descriptor pointer.
99 */
100
101#define rtems_libio_iop(_fd) \
102  ((((unsigned32)(_fd)) < rtems_libio_number_iops) ? \
103         &rtems_libio_iops[_fd] : 0)
104
105/*
106 *  rtems_libio_check_fd
107 *
108 *  Macro to check if a file descriptor number is valid.
109 */
110
111#define rtems_libio_check_fd(_fd) \
112  do {                                                     \
113      if ((unsigned32) (_fd) >= rtems_libio_number_iops) { \
114          errno = EBADF;                                   \
115          return -1;                                       \
116      }                                                    \
117  } while (0)
118
119/*
120 *  rtems_libio_check_fd
121 *
122 *  Macro to check if a buffer pointer is valid.
123 */
124
125#define rtems_libio_check_buffer(_buffer) \
126  do {                                    \
127      if ((_buffer) == 0) {               \
128          errno = EINVAL;                 \
129          return -1;                      \
130      }                                   \
131  } while (0)
132
133/*
134 *  rtems_libio_check_count
135 *
136 *  Macro to check if a count or length is valid.
137 */
138
139#define rtems_libio_check_count(_count) \
140  do {                                  \
141      if ((_count) == 0) {              \
142          return 0;                     \
143      }                                 \
144  } while (0)
145
146/*
147 *  rtems_libio_check_permissions
148 *
149 *  Macro to check if a file descriptor is open for this operation.
150 */
151
152#define rtems_libio_check_permissions(_iop, _flag)    \
153  do {                                                \
154      if (((_iop)->flags & (_flag)) == 0) {           \
155            set_errno_and_return_minus_one( EINVAL ); \
156            return -1;                                \
157      }                                               \
158  } while (0)
159
160/*
161 *  rtems_filesystem_is_separator
162 *
163 *  Macro to determine if a character is a path name separator.
164 *
165 *  NOTE:  This macro handles MS-DOS and UNIX style names.
166 */
167
168#define rtems_filesystem_is_separator( _ch ) \
169   ( ((_ch) == '/') || ((_ch) == '\\') || ((_ch) == '\0'))
170
171/*
172 *  rtems_filesystem_get_start_loc
173 *
174 *  Macro to determine if path is absolute or relative.
175 */
176
177#define rtems_filesystem_get_start_loc( _path, _index, _loc )  \
178  do {                                                         \
179    if ( rtems_filesystem_is_separator( (_path)[ 0 ] ) ) {     \
180      *(_loc) = rtems_filesystem_root;                         \
181      *(_index) = 1;                                           \
182    } else {                                                   \
183      *(_loc) = rtems_filesystem_current;                      \
184      *(_index) = 0;                                           \
185    }                                                          \
186  } while (0)
187
188#define rtems_filesystem_get_sym_start_loc( _path, _index, _loc )  \
189  do {                                                         \
190    if ( rtems_filesystem_is_separator( (_path)[ 0 ] ) ) {     \
191      *(_loc) = rtems_filesystem_root;                         \
192      *(_index) = 1;                                           \
193    } else {                                                   \
194      *(_index) = 0;                                           \
195    }                                                          \
196  } while (0)
197
198
199/*
200 *  External structures
201 */
202
203extern rtems_filesystem_location_info_t rtems_filesystem_current;
204extern rtems_filesystem_location_info_t rtems_filesystem_root;
205extern nlink_t                          rtems_filesystem_link_counts;
206
207
208/*
209 *  File Descriptor Routine Prototypes
210 */
211
212rtems_libio_t *rtems_libio_allocate(void);
213
214unsigned32 rtems_libio_fcntl_flags(
215  unsigned32 fcntl_flags
216);
217
218void rtems_libio_free(
219  rtems_libio_t *iop
220);
221
222int rtems_libio_is_open_files_in_fs(
223  rtems_filesystem_mount_table_entry_t *mt_entry
224);
225
226int rtems_libio_is_file_open(
227  void  *node_access
228);
229
230/*
231 *  File System Routine Prototypes
232 */
233
234int rtems_filesystem_evaluate_path(
235  const char                        *pathname,
236  int                                flags,
237  rtems_filesystem_location_info_t  *pathloc,
238  int                                follow_link
239);
240
241void rtems_filesystem_initialize();
242
243int init_fs_mount_table();
244
245#ifdef __cplusplus
246}
247#endif
248
249#endif
250/* end of include file */
251
252
253
Note: See TracBrowser for help on using the repository browser.