summaryrefslogtreecommitdiff
path: root/vendor/rustix/src/not_implemented.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/rustix/src/not_implemented.rs')
-rw-r--r--vendor/rustix/src/not_implemented.rs348
1 files changed, 348 insertions, 0 deletions
diff --git a/vendor/rustix/src/not_implemented.rs b/vendor/rustix/src/not_implemented.rs
new file mode 100644
index 00000000..e8b162a8
--- /dev/null
+++ b/vendor/rustix/src/not_implemented.rs
@@ -0,0 +1,348 @@
+//! Documentation about unimplemented functions.
+//!
+//! This module contains documentation for several functions that rustix does
+//! not implement, either because they are out of scope, or because they are
+//! could probably be implemented but are not yet.
+
+macro_rules! not_implemented {
+ ($func:ident) => {
+ /// See the [module comment](self).
+ pub fn $func() {
+ unimplemented!()
+ }
+ };
+}
+
+/// Memory-allocation functions are out of scope for rustix.
+///
+/// It is possible to implement `malloc`, `free`, and similar functions in
+/// Rust, however rustix itself is focused on syscall-like functions. This
+/// module contains an incomplete list of such functions.
+///
+/// There are several allocator implementations for Rust; one of them is
+/// [dlmalloc]. For a rustix-based implementation, see [rustix-dlmalloc].
+/// Another allocator implementation is [talc].
+///
+/// [dlmalloc]: https://crates.io/crates/dlmalloc
+/// [talc]: https://crates.io/crates/talc
+/// [rustix-dlmalloc]: https://crates.io/crates/rustix-dlmalloc
+pub mod memory_allocation {
+ not_implemented!(malloc);
+ not_implemented!(realloc);
+ not_implemented!(calloc);
+ not_implemented!(free);
+ not_implemented!(posix_memalign);
+ not_implemented!(aligned_alloc);
+ not_implemented!(malloc_usable_size);
+}
+
+/// Functions which need access to libc internals are out of scope for rustix.
+///
+/// Most Rust programs have a libc present, and when a libc is present, it
+/// expects to be the only thing in the process that can do certain operations.
+/// For example, there can be only one `atexit` list in a process, only one
+/// `pthread_atfork` list in a process, only one implementation of pthreads in
+/// a process, and so on, and libc expects to own the one of each of those
+/// things. And libc implementations may expect to be involved in signal
+/// handling. So, these functions are believed to be out of scope for rustix.
+/// This module contains an incomplete list of such functions.
+///
+/// It would be possible to make a rust library which provides safe or
+/// ergonomic wrappers around these libc functions, however that is out of
+/// scope for rustix itself.
+///
+/// If you would like to write a Rust program which does not use a libc, and
+/// which does provide APIs for some of these functions, [Eyra] and [origin]
+/// are two libraries which may be useful, and which provide public interfaces
+/// for some of this functionality.
+///
+/// If you are otherwise writing Rust code which you know will not share a
+/// process with a libc, perhaps because you are writing a libc or similar
+/// yourself, rustix's codebase does include experimental implementations of
+/// the primitives needed to implement most of these functions.
+///
+/// [Eyra]: https://github.com/sunfishcode/eyra?tab=readme-ov-file#eyra
+/// [origin]: https://github.com/sunfishcode/origin?tab=readme-ov-file#origin
+pub mod libc_internals {
+ not_implemented!(exit);
+ not_implemented!(fork);
+ not_implemented!(clone);
+ not_implemented!(clone3);
+ not_implemented!(brk);
+ not_implemented!(sigaction);
+ not_implemented!(sigaltstack);
+ not_implemented!(sigprocmask);
+ not_implemented!(sigwait);
+ not_implemented!(sigwaitinfo);
+ not_implemented!(sigtimedwait);
+ not_implemented!(set_thread_area);
+ not_implemented!(set_tid_address);
+ not_implemented!(tkill);
+ not_implemented!(sched_setscheduler);
+ not_implemented!(rseq);
+ not_implemented!(setuid);
+ not_implemented!(setgid);
+ not_implemented!(seteuid);
+ not_implemented!(setegid);
+ not_implemented!(setreuid);
+ not_implemented!(setregid);
+ not_implemented!(setresuid);
+ not_implemented!(setresgid);
+ not_implemented!(setgroups);
+
+ not_implemented!(pthread_atfork);
+ not_implemented!(pthread_attr_destroy);
+ not_implemented!(pthread_attr_getaffinity_np);
+ not_implemented!(pthread_attr_getdetachstate);
+ not_implemented!(pthread_attr_getguardsize);
+ not_implemented!(pthread_attr_getinheritsched);
+ not_implemented!(pthread_attr_getschedparam);
+ not_implemented!(pthread_attr_getschedpolicy);
+ not_implemented!(pthread_attr_getscope);
+ not_implemented!(pthread_attr_getsigmask_np);
+ not_implemented!(pthread_attr_getstack);
+ not_implemented!(pthread_attr_getstackaddr);
+ not_implemented!(pthread_attr_getstacksize);
+ not_implemented!(pthread_attr_init);
+ not_implemented!(pthread_attr_setaffinity_np);
+ not_implemented!(pthread_attr_setdetachstate);
+ not_implemented!(pthread_attr_setguardsize);
+ not_implemented!(pthread_attr_setinheritsched);
+ not_implemented!(pthread_attr_setschedparam);
+ not_implemented!(pthread_attr_setschedpolicy);
+ not_implemented!(pthread_attr_setscope);
+ not_implemented!(pthread_attr_setsigmask_np);
+ not_implemented!(pthread_attr_setstack);
+ not_implemented!(pthread_attr_setstackaddr);
+ not_implemented!(pthread_attr_setstacksize);
+ not_implemented!(pthread_barrierattr_destroy);
+ not_implemented!(pthread_barrierattr_getpshared);
+ not_implemented!(pthread_barrierattr_init);
+ not_implemented!(pthread_barrierattr_setpshared);
+ not_implemented!(pthread_barrier_destroy);
+ not_implemented!(pthread_barrier_wait);
+ not_implemented!(pthread_cancel);
+ not_implemented!(pthread_cleanup_pop);
+ not_implemented!(pthread_cleanup_pop_restore_np);
+ not_implemented!(pthread_cleanup_push);
+ not_implemented!(pthread_cleanup_push_defer_np);
+ not_implemented!(pthread_condattr_destroy);
+ not_implemented!(pthread_condattr_getclock);
+ not_implemented!(pthread_condattr_getpshared);
+ not_implemented!(pthread_condattr_init);
+ not_implemented!(pthread_condattr_setclock);
+ not_implemented!(pthread_condattr_setpshared);
+ not_implemented!(pthread_cond_broadcast);
+ not_implemented!(pthread_cond_destroy);
+ not_implemented!(pthread_cond_signal);
+ not_implemented!(pthread_cond_timedwait);
+ not_implemented!(pthread_create);
+ not_implemented!(pthread_detach);
+ not_implemented!(pthread_equal);
+ not_implemented!(pthread_exit);
+ not_implemented!(pthread_getaffinity_np);
+ not_implemented!(pthread_getattr_default_np);
+ not_implemented!(pthread_getattr_np);
+ not_implemented!(pthread_getconcurrency);
+ not_implemented!(pthread_getcpuclockid);
+ not_implemented!(pthread_getname_np);
+ not_implemented!(pthread_getschedparam);
+ not_implemented!(pthread_getspecific);
+ not_implemented!(pthread_join);
+ not_implemented!(pthread_key_create);
+ not_implemented!(pthread_key_delete);
+ not_implemented!(pthread_kill);
+ not_implemented!(pthread_kill_other_threads_np);
+ not_implemented!(pthread_mutexattr_destroy);
+ not_implemented!(pthread_mutexattr_getprioceiling);
+ not_implemented!(pthread_mutexattr_getprotocol);
+ not_implemented!(pthread_mutexattr_getpshared);
+ not_implemented!(pthread_mutexattr_getrobust);
+ not_implemented!(pthread_mutexattr_getrobust_np);
+ not_implemented!(pthread_mutexattr_gettype);
+ not_implemented!(pthread_mutexattr_init);
+ not_implemented!(pthread_mutexattr_setprioceiling);
+ not_implemented!(pthread_mutexattr_setprotocol);
+ not_implemented!(pthread_mutexattr_setpshared);
+ not_implemented!(pthread_mutexattr_setrobust);
+ not_implemented!(pthread_mutexattr_setrobust_np);
+ not_implemented!(pthread_mutexattr_settype);
+ not_implemented!(pthread_mutex_consistent);
+ not_implemented!(pthread_mutex_consistent_np);
+ not_implemented!(pthread_mutex_destroy);
+ not_implemented!(pthread_mutex_getprioceiling);
+ not_implemented!(pthread_mutex_init);
+ not_implemented!(pthread_mutex_lock);
+ not_implemented!(pthread_mutex_setprioceiling);
+ not_implemented!(pthread_mutex_timedlock);
+ not_implemented!(pthread_mutex_trylock);
+ not_implemented!(pthread_once);
+ not_implemented!(pthread_rwlockattr_destroy);
+ not_implemented!(pthread_rwlockattr_getkind_np);
+ not_implemented!(pthread_rwlockattr_getpshared);
+ not_implemented!(pthread_rwlockattr_init);
+ not_implemented!(pthread_rwlockattr_setkind_np);
+ not_implemented!(pthread_rwlockattr_setpshared);
+ not_implemented!(pthread_rwlock_destroy);
+ not_implemented!(pthread_rwlock_rdlock);
+ not_implemented!(pthread_rwlock_timedrdlock);
+ not_implemented!(pthread_rwlock_timedwrlock);
+ not_implemented!(pthread_rwlock_tryrdlock);
+ not_implemented!(pthread_rwlock_trywrlock);
+ not_implemented!(pthread_rwlock_unlock);
+ not_implemented!(pthread_rwlock_wrlock);
+ not_implemented!(pthread_self);
+ not_implemented!(pthread_setaffinity_np);
+ not_implemented!(pthread_setattr_default_np);
+ not_implemented!(pthread_setcancelstate);
+ not_implemented!(pthread_setcanceltype);
+ not_implemented!(pthread_setconcurrency);
+ not_implemented!(pthread_setname_np);
+ not_implemented!(pthread_setschedparam);
+ not_implemented!(pthread_setschedprio);
+ not_implemented!(pthread_setspecific);
+ not_implemented!(pthread_sigmask);
+ not_implemented!(pthread_sigqueue);
+ not_implemented!(pthread_spin_destroy);
+ not_implemented!(pthread_spin_init);
+ not_implemented!(pthread_spin_lock);
+ not_implemented!(pthread_spin_trylock);
+ not_implemented!(pthread_spin_unlock);
+ not_implemented!(pthread_testcancel);
+ not_implemented!(pthread_timedjoin_np);
+ not_implemented!(pthread_tryjoin_np);
+ not_implemented!(pthread_yield);
+}
+
+/// Functions which provide higher-level functionality are out of scope for
+/// rustix.
+///
+/// These functions are provided by typical libc implementations, but are
+/// higher-level than the simple syscall-like functions that rustix focuses on.
+/// They could be implemented as a separate library built on top of rustix,
+/// rather than being part of rustix itself. This module contains an incomplete
+/// list of such functions.
+pub mod higher_level {
+ not_implemented!(getpwent);
+ not_implemented!(getpwuid);
+ not_implemented!(getpwnam);
+ not_implemented!(getpwuid_r);
+ not_implemented!(getpwnam_r);
+ not_implemented!(gethostbyname);
+ not_implemented!(execv);
+ not_implemented!(execvp);
+ not_implemented!(execvpe);
+ not_implemented!(wordexp);
+ not_implemented!(localtime);
+ not_implemented!(localtime_r);
+ not_implemented!(gmtime);
+ not_implemented!(gmtime_r);
+ not_implemented!(ctime);
+ not_implemented!(ctime_r);
+ not_implemented!(asctime);
+ not_implemented!(asctime_r);
+ not_implemented!(mktime);
+ not_implemented!(getifaddrs);
+
+ /// See [rustix-openpty](https://crates.io/crates/rustix-openpty).
+ pub fn closefrom() {
+ unimplemented!()
+ }
+ /// See [rustix-openpty](https://crates.io/crates/rustix-openpty).
+ pub fn login_tty() {
+ unimplemented!()
+ }
+ /// See [rustix-openpty](https://crates.io/crates/rustix-openpty).
+ pub fn openpty() {
+ unimplemented!()
+ }
+
+ /// See [`std::io::IsTerminal`].
+ ///
+ /// For Rust < 1.70, see [is-terminal]. For a rustix-based implementation,
+ /// see [rustix-is-terminal].
+ ///
+ /// [`std::io::IsTerminal`]: std::io::IsTerminal
+ /// [is-terminal]: https://crates.io/crates/is-terminal
+ /// [rustix-is-terminal]: https://crates.io/crates/rustix-is-terminal
+ pub fn isatty() {
+ unimplemented!()
+ }
+}
+
+/// Functions which don't seem possible to even call from Rust with current
+/// language features, even with `unsafe`.
+pub mod impossible {
+ not_implemented!(vfork);
+ not_implemented!(sigreturn);
+ not_implemented!(setjmp);
+ not_implemented!(longjmp);
+ not_implemented!(sigsetjmp);
+ not_implemented!(siglongjmp);
+}
+
+/// These functions are not yet implemented in rustix, but probably could be.
+///
+/// These are functions that users have asked about, and which probably are in
+/// scope for rustix, but are not yet implemented. This module contains an
+/// incomplete list of such functions.
+pub mod yet {
+ not_implemented!(tgkill);
+ not_implemented!(raise);
+ not_implemented!(sysctl);
+ not_implemented!(mq_open);
+ not_implemented!(mq_send);
+ not_implemented!(mq_unlink);
+ not_implemented!(recvmmsg);
+ not_implemented!(cachestat);
+ not_implemented!(fanotify_init);
+ not_implemented!(fanotify_mark);
+ not_implemented!(getifaddrs);
+ not_implemented!(signalfd);
+ not_implemented!(mount_setattr);
+ not_implemented!(extattr_delete_fd);
+ not_implemented!(extattr_delete_link);
+ not_implemented!(extattr_get_fd);
+ not_implemented!(extattr_get_link);
+ not_implemented!(extattr_list_fd);
+ not_implemented!(extattr_list_link);
+ not_implemented!(extattr_set_fd);
+ not_implemented!(extattr_set_link);
+ not_implemented!(get_mempolicy);
+ not_implemented!(mbind);
+ not_implemented!(set_mempolicy);
+ not_implemented!(migrate_pages);
+ not_implemented!(move_pages);
+ not_implemented!(fchmodat2);
+ not_implemented!(shmat);
+ not_implemented!(shmdt);
+ not_implemented!(shmget);
+ not_implemented!(shmctl);
+}
+
+/// These functions are not quite yet finished in rustix.
+///
+/// Rustix's codebase includes experimental implementations of these functions,
+/// however they are not yet publicly exposed because their API might need more
+/// work and/or they don't yet have a libc backend implementation yet.
+///
+/// See [#1314] for more information, and please leave comments if there are
+/// specific functions you're interested in.
+///
+/// [#1314]: https://github.com/bytecodealliance/rustix/issues/1314
+pub mod quite_yet {
+ not_implemented!(_exit);
+ not_implemented!(_Exit);
+ not_implemented!(exit_group);
+ not_implemented!(sigpending);
+ not_implemented!(sigsuspend);
+ not_implemented!(execveat);
+ not_implemented!(execve);
+
+ /// For now, use `rustix::process::uname().nodename()` instead.
+ ///
+ /// See also the [module comment](self).
+ pub fn gethostname() {
+ unimplemented!()
+ }
+}