File descriptors manager static class.<cmsis-plus/posix-io/file-descriptors-manager.h>
More...
#include <file-descriptors-manager.h>
Definition at line 58 of file file-descriptors-manager.h.
◆ file_descriptors_manager()
| os::posix::file_descriptors_manager::file_descriptors_manager |
( |
std::size_t |
size | ) |
|
Definition at line 58 of file file-descriptors-manager.cpp.
59 {
61 this);
62
64
65 size__ =
size + reserved__;
66 descriptors_array__ =
new class io*[size__];
67
69 {
70#pragma GCC diagnostic push
71#if defined(__clang__)
72#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
73#endif
74 descriptors_array__[i] = nullptr;
75#pragma GCC diagnostic pop
76 }
77 }
static class io * io(int fildes)
int printf(const char *format,...)
Write a formatted string to the trace device.
References os::trace::printf(), and size().
◆ ~file_descriptors_manager()
| os::posix::file_descriptors_manager::~file_descriptors_manager |
( |
| ) |
|
◆ allocate()
| int os::posix::file_descriptors_manager::allocate |
( |
class io * |
io | ) |
|
|
static |
Definition at line 117 of file file-descriptors-manager.cpp.
118 {
119#if defined(OS_TRACE_POSIX_IO_FILE_DESCRIPTORS_MANAGER)
120 trace::printf (
"file_descriptors_manager::%s(%p)\n", __func__, io);
121#endif
122
124 {
125
126 errno = EBUSY;
127 return -1;
128 }
129
130 for (std::size_t i = reserved__; i < size__; ++i)
131 {
132#pragma GCC diagnostic push
133#if defined(__clang__)
134#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
135#endif
136 if (descriptors_array__[i] == nullptr)
137 {
138 descriptors_array__[i] =
io;
140#if defined(OS_TRACE_POSIX_IO_FILE_DESCRIPTORS_MANAGER)
142 __func__, io, i);
143#endif
144 return static_cast<int> (i);
145 }
146#pragma GCC diagnostic pop
147 }
148
149
150 errno = ENFILE;
151 return -1;
152 }
file_descriptor_t file_descriptor(void) const
References os::posix::io::file_descriptor(), and os::trace::printf().
Referenced by os::posix::io::alloc_file_descriptor().
◆ assign()
Definition at line 155 of file file-descriptors-manager.cpp.
156 {
157 if ((fildes < 0) || (static_cast<std::size_t> (fildes) >= size__))
158 {
159 errno = EBADF;
160 return -1;
161 }
162
164 {
165
166 errno = EBUSY;
167 return -1;
168 }
169
170#pragma GCC diagnostic push
171#if defined(__clang__)
172#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
173#endif
174 descriptors_array__[fildes] =
io;
175#pragma GCC diagnostic pop
177 return fildes;
178 }
References os::posix::io::file_descriptor().
◆ deallocate()
Definition at line 181 of file file-descriptors-manager.cpp.
182 {
183#if defined(OS_TRACE_POSIX_IO_FILE_DESCRIPTORS_MANAGER)
184 trace::printf (
"file_descriptors_manager::%s(%d)\n", __func__, fildes);
185#endif
186
187 if ((fildes < 0) || (static_cast<std::size_t> (fildes) >= size__))
188 {
189 errno = EBADF;
190 return -1;
191 }
192
193#pragma GCC diagnostic push
194#if defined(__clang__)
195#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
196#endif
197 descriptors_array__[fildes]->clear_file_descriptor ();
198 descriptors_array__[fildes] = nullptr;
199#pragma GCC diagnostic pop
200 return 0;
201 }
References os::trace::printf().
Referenced by os::posix::io::close().
◆ io()
| io * os::posix::file_descriptors_manager::io |
( |
int |
fildes | ) |
|
|
static |
Definition at line 90 of file file-descriptors-manager.cpp.
91 {
92
93 if ((fildes < 0) || (static_cast<std::size_t> (fildes) >= size__)
94 || (descriptors_array__ == nullptr))
95 {
96 return nullptr;
97 }
98#pragma GCC diagnostic push
99#if defined(__clang__)
100#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
101#endif
102 return descriptors_array__[fildes];
103#pragma GCC diagnostic pop
104 }
Referenced by __posix_close(), __posix_fcntl(), __posix_fstat(), __posix_fstatvfs(), __posix_fsync(), __posix_ftruncate(), __posix_ioctl(), __posix_isatty(), __posix_lseek(), __posix_read(), __posix_tcdrain(), __posix_tcflush(), __posix_tcgetattr(), __posix_tcsendbreak(), __posix_tcsetattr(), __posix_write(), and __posix_writev().
◆ size()
| size_t os::posix::file_descriptors_manager::size |
( |
void |
| ) |
|
|
inlinestatic |
◆ socket()
| socket * os::posix::file_descriptors_manager::socket |
( |
int |
fildes | ) |
|
|
static |
Definition at line 204 of file file-descriptors-manager.cpp.
205 {
206 assert ((fildes >= 0) && (static_cast<std::size_t> (fildes) < size__));
207#pragma GCC diagnostic push
208#if defined(__clang__)
209#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
210#endif
211 auto*
const io = descriptors_array__[fildes];
212#pragma GCC diagnostic pop
214 {
215 return nullptr;
216 }
217 return reinterpret_cast<class
socket*
> (
io);
218 }
static class socket * socket(int fildes)
type_t get_type(void) const
References os::posix::io::get_type(), and os::posix::io::socket.
Referenced by __posix_accept(), __posix_bind(), __posix_connect(), __posix_getpeername(), __posix_getsockname(), __posix_getsockopt(), __posix_listen(), __posix_recv(), __posix_recvfrom(), __posix_recvmsg(), __posix_send(), __posix_sendmsg(), __posix_sendto(), __posix_setsockopt(), __posix_shutdown(), and __posix_sockatmark().
◆ used()
| size_t os::posix::file_descriptors_manager::used |
( |
void |
| ) |
|
|
static |
Definition at line 221 of file file-descriptors-manager.cpp.
222 {
223 std::size_t count = reserved__;
225 ++i)
226 {
227#pragma GCC diagnostic push
228#if defined(__clang__)
229#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
230#endif
231 if (descriptors_array__[i] != nullptr)
232 {
233 ++count;
234 }
235#pragma GCC diagnostic pop
236 }
237 return count;
238 }
References size().
◆ valid()
| bool os::posix::file_descriptors_manager::valid |
( |
int |
fildes | ) |
|
|
static |
Definition at line 107 of file file-descriptors-manager.cpp.
108 {
109 if ((fildes < 0) || (static_cast<std::size_t> (fildes) >= size__))
110 {
111 return false;
112 }
113 return true;
114 }
The documentation for this class was generated from the following files: