зеркало из https://github.com/github/ruby.git
[wasm] wasm/missing.{c,h}: add missing libc stubs for wasi-libc
This commit is contained in:
Родитель
65f95f26ff
Коммит
7ee786388a
23
configure.ac
23
configure.ac
|
@ -1232,6 +1232,9 @@ main()
|
||||||
RUBY_APPEND_OPTIONS(CFLAGS, -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_PROCESS_CLOCKS)
|
RUBY_APPEND_OPTIONS(CFLAGS, -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_PROCESS_CLOCKS)
|
||||||
RUBY_APPEND_OPTIONS(CPPFLAGS, -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_PROCESS_CLOCKS)
|
RUBY_APPEND_OPTIONS(CPPFLAGS, -D_WASI_EMULATED_SIGNAL -D_WASI_EMULATED_MMAN -D_WASI_EMULATED_GETPID -D_WASI_EMULATED_PROCESS_CLOCKS)
|
||||||
POSTLINK="\$(WASMOPT) --asyncify \$(wasmoptflags) --pass-arg=asyncify-ignore-imports -o \$@ \$@${POSTLINK:+; $POSTLINK}"
|
POSTLINK="\$(WASMOPT) --asyncify \$(wasmoptflags) --pass-arg=asyncify-ignore-imports -o \$@ \$@${POSTLINK:+; $POSTLINK}"
|
||||||
|
# wasi-libc's sys/socket.h is not compatible with -std=gnu99,
|
||||||
|
# so re-declare shutdown in include/ruby/missing.h
|
||||||
|
ac_cv_func_shutdown=no
|
||||||
]
|
]
|
||||||
[ LIBS="-lm $LIBS"])
|
[ LIBS="-lm $LIBS"])
|
||||||
: ${ORIG_LIBS=$LIBS}
|
: ${ORIG_LIBS=$LIBS}
|
||||||
|
@ -1294,6 +1297,7 @@ AC_CHECK_HEADERS(sanitizer/asan_interface.h)
|
||||||
AC_CHECK_HEADERS(sanitizer/msan_interface.h)
|
AC_CHECK_HEADERS(sanitizer/msan_interface.h)
|
||||||
AC_CHECK_HEADERS(setjmpex.h)
|
AC_CHECK_HEADERS(setjmpex.h)
|
||||||
AC_CHECK_HEADERS(stdalign.h)
|
AC_CHECK_HEADERS(stdalign.h)
|
||||||
|
AC_CHECK_HEADERS(stdio.h)
|
||||||
AC_CHECK_HEADERS(sys/attr.h)
|
AC_CHECK_HEADERS(sys/attr.h)
|
||||||
AC_CHECK_HEADERS(sys/eventfd.h)
|
AC_CHECK_HEADERS(sys/eventfd.h)
|
||||||
AC_CHECK_HEADERS(sys/fcntl.h)
|
AC_CHECK_HEADERS(sys/fcntl.h)
|
||||||
|
@ -1967,6 +1971,8 @@ AC_CHECK_FUNCS(_longjmp) # used for AC_ARG_WITH(setjmp-type)
|
||||||
test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no
|
test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no
|
||||||
AC_CHECK_FUNCS(arc4random_buf)
|
AC_CHECK_FUNCS(arc4random_buf)
|
||||||
AC_CHECK_FUNCS(atan2l atan2f)
|
AC_CHECK_FUNCS(atan2l atan2f)
|
||||||
|
AC_CHECK_FUNCS(chmod)
|
||||||
|
AC_CHECK_FUNCS(chown)
|
||||||
AC_CHECK_FUNCS(chroot)
|
AC_CHECK_FUNCS(chroot)
|
||||||
AC_CHECK_FUNCS(chsize)
|
AC_CHECK_FUNCS(chsize)
|
||||||
AC_CHECK_FUNCS(clock_gettime)
|
AC_CHECK_FUNCS(clock_gettime)
|
||||||
|
@ -1982,6 +1988,9 @@ AC_CHECK_FUNCS(dup3)
|
||||||
AC_CHECK_FUNCS(eaccess)
|
AC_CHECK_FUNCS(eaccess)
|
||||||
AC_CHECK_FUNCS(endgrent)
|
AC_CHECK_FUNCS(endgrent)
|
||||||
AC_CHECK_FUNCS(eventfd)
|
AC_CHECK_FUNCS(eventfd)
|
||||||
|
AC_CHECK_FUNCS(execl)
|
||||||
|
AC_CHECK_FUNCS(execle)
|
||||||
|
AC_CHECK_FUNCS(execve)
|
||||||
AC_CHECK_FUNCS(explicit_memset)
|
AC_CHECK_FUNCS(explicit_memset)
|
||||||
AC_CHECK_FUNCS(fcopyfile)
|
AC_CHECK_FUNCS(fcopyfile)
|
||||||
AC_CHECK_FUNCS(fchmod)
|
AC_CHECK_FUNCS(fchmod)
|
||||||
|
@ -1997,7 +2006,10 @@ AC_CHECK_FUNCS(ftruncate)
|
||||||
AC_CHECK_FUNCS(ftruncate64) # used for Win32 platform
|
AC_CHECK_FUNCS(ftruncate64) # used for Win32 platform
|
||||||
AC_CHECK_FUNCS(getattrlist)
|
AC_CHECK_FUNCS(getattrlist)
|
||||||
AC_CHECK_FUNCS(getcwd)
|
AC_CHECK_FUNCS(getcwd)
|
||||||
|
AC_CHECK_FUNCS(getegid)
|
||||||
AC_CHECK_FUNCS(getentropy)
|
AC_CHECK_FUNCS(getentropy)
|
||||||
|
AC_CHECK_FUNCS(geteuid)
|
||||||
|
AC_CHECK_FUNCS(getgid)
|
||||||
AC_CHECK_FUNCS(getgidx)
|
AC_CHECK_FUNCS(getgidx)
|
||||||
AC_CHECK_FUNCS(getgrnam)
|
AC_CHECK_FUNCS(getgrnam)
|
||||||
AC_CHECK_FUNCS(getgrnam_r)
|
AC_CHECK_FUNCS(getgrnam_r)
|
||||||
|
@ -2006,6 +2018,7 @@ AC_CHECK_FUNCS(getlogin)
|
||||||
AC_CHECK_FUNCS(getlogin_r)
|
AC_CHECK_FUNCS(getlogin_r)
|
||||||
AC_CHECK_FUNCS(getpgid)
|
AC_CHECK_FUNCS(getpgid)
|
||||||
AC_CHECK_FUNCS(getpgrp)
|
AC_CHECK_FUNCS(getpgrp)
|
||||||
|
AC_CHECK_FUNCS(getppid)
|
||||||
AC_CHECK_FUNCS(getpriority)
|
AC_CHECK_FUNCS(getpriority)
|
||||||
AC_CHECK_FUNCS(getpwnam)
|
AC_CHECK_FUNCS(getpwnam)
|
||||||
AC_CHECK_FUNCS(getpwnam_r)
|
AC_CHECK_FUNCS(getpwnam_r)
|
||||||
|
@ -2017,6 +2030,7 @@ AC_CHECK_FUNCS(getresuid)
|
||||||
AC_CHECK_FUNCS(getrlimit)
|
AC_CHECK_FUNCS(getrlimit)
|
||||||
AC_CHECK_FUNCS(getsid)
|
AC_CHECK_FUNCS(getsid)
|
||||||
AC_CHECK_FUNCS(gettimeofday) # for making ac_cv_func_gettimeofday
|
AC_CHECK_FUNCS(gettimeofday) # for making ac_cv_func_gettimeofday
|
||||||
|
AC_CHECK_FUNCS(getuid)
|
||||||
AC_CHECK_FUNCS(getuidx)
|
AC_CHECK_FUNCS(getuidx)
|
||||||
AC_CHECK_FUNCS(gmtime_r)
|
AC_CHECK_FUNCS(gmtime_r)
|
||||||
AC_CHECK_FUNCS(grantpt)
|
AC_CHECK_FUNCS(grantpt)
|
||||||
|
@ -2024,6 +2038,7 @@ AC_CHECK_FUNCS(initgroups)
|
||||||
AC_CHECK_FUNCS(ioctl)
|
AC_CHECK_FUNCS(ioctl)
|
||||||
AC_CHECK_FUNCS(isfinite)
|
AC_CHECK_FUNCS(isfinite)
|
||||||
AC_CHECK_FUNCS(issetugid)
|
AC_CHECK_FUNCS(issetugid)
|
||||||
|
AC_CHECK_FUNCS(kill)
|
||||||
AC_CHECK_FUNCS(killpg)
|
AC_CHECK_FUNCS(killpg)
|
||||||
AC_CHECK_FUNCS(lchmod)
|
AC_CHECK_FUNCS(lchmod)
|
||||||
AC_CHECK_FUNCS(lchown)
|
AC_CHECK_FUNCS(lchown)
|
||||||
|
@ -2047,9 +2062,13 @@ AC_CHECK_FUNCS(mktime)
|
||||||
AC_CHECK_FUNCS(mmap)
|
AC_CHECK_FUNCS(mmap)
|
||||||
AC_CHECK_FUNCS(mremap)
|
AC_CHECK_FUNCS(mremap)
|
||||||
AC_CHECK_FUNCS(openat)
|
AC_CHECK_FUNCS(openat)
|
||||||
|
AC_CHECK_FUNCS(pclose)
|
||||||
|
AC_CHECK_FUNCS(pipe)
|
||||||
AC_CHECK_FUNCS(pipe2)
|
AC_CHECK_FUNCS(pipe2)
|
||||||
AC_CHECK_FUNCS(poll)
|
AC_CHECK_FUNCS(poll)
|
||||||
|
AC_CHECK_FUNCS(popen)
|
||||||
AC_CHECK_FUNCS(posix_fadvise)
|
AC_CHECK_FUNCS(posix_fadvise)
|
||||||
|
AC_CHECK_FUNCS(posix_madvise)
|
||||||
AC_CHECK_FUNCS(posix_memalign)
|
AC_CHECK_FUNCS(posix_memalign)
|
||||||
AC_CHECK_FUNCS(ppoll)
|
AC_CHECK_FUNCS(ppoll)
|
||||||
AC_CHECK_FUNCS(pread)
|
AC_CHECK_FUNCS(pread)
|
||||||
|
@ -2088,12 +2107,15 @@ AC_CHECK_FUNCS(spawnv)
|
||||||
AC_CHECK_FUNCS(symlink)
|
AC_CHECK_FUNCS(symlink)
|
||||||
AC_CHECK_FUNCS(syscall)
|
AC_CHECK_FUNCS(syscall)
|
||||||
AC_CHECK_FUNCS(sysconf)
|
AC_CHECK_FUNCS(sysconf)
|
||||||
|
AC_CHECK_FUNCS(system)
|
||||||
AC_CHECK_FUNCS(tanh)
|
AC_CHECK_FUNCS(tanh)
|
||||||
AC_CHECK_FUNCS(telldir)
|
AC_CHECK_FUNCS(telldir)
|
||||||
AC_CHECK_FUNCS(timegm)
|
AC_CHECK_FUNCS(timegm)
|
||||||
AC_CHECK_FUNCS(times)
|
AC_CHECK_FUNCS(times)
|
||||||
AC_CHECK_FUNCS(truncate)
|
AC_CHECK_FUNCS(truncate)
|
||||||
AC_CHECK_FUNCS(truncate64) # used for Win32
|
AC_CHECK_FUNCS(truncate64) # used for Win32
|
||||||
|
AC_CHECK_FUNCS(tzset)
|
||||||
|
AC_CHECK_FUNCS(umask)
|
||||||
AC_CHECK_FUNCS(unsetenv)
|
AC_CHECK_FUNCS(unsetenv)
|
||||||
AC_CHECK_FUNCS(utimensat)
|
AC_CHECK_FUNCS(utimensat)
|
||||||
AC_CHECK_FUNCS(utimes)
|
AC_CHECK_FUNCS(utimes)
|
||||||
|
@ -3807,6 +3829,7 @@ AS_CASE(["$target_os"],
|
||||||
],
|
],
|
||||||
[wasi*], [
|
[wasi*], [
|
||||||
FIRSTMAKEFILE=GNUmakefile:wasm/GNUmakefile.in
|
FIRSTMAKEFILE=GNUmakefile:wasm/GNUmakefile.in
|
||||||
|
AC_LIBOBJ([wasm/missing])
|
||||||
AC_LIBOBJ([wasm/runtime])
|
AC_LIBOBJ([wasm/runtime])
|
||||||
AC_LIBOBJ([wasm/fiber])
|
AC_LIBOBJ([wasm/fiber])
|
||||||
AC_LIBOBJ([wasm/machine])
|
AC_LIBOBJ([wasm/machine])
|
||||||
|
|
|
@ -33,6 +33,18 @@
|
||||||
# include <sys/time.h>
|
# include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_STAT_H
|
||||||
|
# include <sys/stat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_STDIO_H
|
||||||
|
# include <stdio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_IEEEFP_H
|
#ifdef HAVE_IEEEFP_H
|
||||||
# include <ieeefp.h>
|
# include <ieeefp.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -224,6 +236,107 @@ RUBY_EXTERN void setproctitle(const char *fmt, ...);
|
||||||
RUBY_EXTERN void explicit_bzero(void *b, size_t len);
|
RUBY_EXTERN void explicit_bzero(void *b, size_t len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_TZSET
|
||||||
|
RUBY_EXTERN void tzset(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_POSIX_MADVISE
|
||||||
|
RUBY_EXTERN int posix_madvise(void *, size_t, int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GETEUID
|
||||||
|
RUBY_EXTERN rb_uid_t geteuid(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GETUID
|
||||||
|
RUBY_EXTERN rb_uid_t getuid(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GETEGID
|
||||||
|
RUBY_EXTERN rb_gid_t getegid(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GETGID
|
||||||
|
RUBY_EXTERN rb_gid_t getgid(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GETLOGIN
|
||||||
|
RUBY_EXTERN char *getlogin(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GETPPID
|
||||||
|
RUBY_EXTERN rb_pid_t getppid(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_UMASK
|
||||||
|
RUBY_EXTERN rb_mode_t umask(rb_mode_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_CHMOD
|
||||||
|
RUBY_EXTERN int chmod(const char *, rb_mode_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_CHOWN
|
||||||
|
RUBY_EXTERN int chown(const char *, rb_uid_t, rb_gid_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_PCLOSE
|
||||||
|
RUBY_EXTERN int pclose(FILE *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_POPEN
|
||||||
|
RUBY_EXTERN FILE *popen(const char *, const char *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_PIPE
|
||||||
|
RUBY_EXTERN int pipe(int [2]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_DUP
|
||||||
|
RUBY_EXTERN int dup(int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_DUP2
|
||||||
|
RUBY_EXTERN int dup2(int, int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_KILL
|
||||||
|
RUBY_EXTERN int kill(rb_pid_t, int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_EXECL
|
||||||
|
RUBY_EXTERN int execl(const char *, const char *, ...);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_EXECLE
|
||||||
|
RUBY_EXTERN int execle(const char *, const char *, ...);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_EXECV
|
||||||
|
RUBY_EXTERN int execv(const char *, char *const []);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_EXECVE
|
||||||
|
RUBY_EXTERN int execve(const char *, char *const [], char *const []);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_SHUTDOWN
|
||||||
|
RUBY_EXTERN int shutdown(int, int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_SYSTEM
|
||||||
|
RUBY_EXTERN int system(const char *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WNOHANG
|
||||||
|
# define WNOHANG 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_WAITPID
|
||||||
|
# define HAVE_WAITPID 1
|
||||||
|
RUBY_EXTERN rb_pid_t waitpid(rb_pid_t, int *, int);
|
||||||
|
#endif
|
||||||
|
|
||||||
RBIMPL_SYMBOL_EXPORT_END()
|
RBIMPL_SYMBOL_EXPORT_END()
|
||||||
|
|
||||||
#endif /* RUBY_MISSING_H */
|
#endif /* RUBY_MISSING_H */
|
||||||
|
|
1
io.c
1
io.c
|
@ -133,6 +133,7 @@
|
||||||
#include "internal/variable.h"
|
#include "internal/variable.h"
|
||||||
#include "ruby/io.h"
|
#include "ruby/io.h"
|
||||||
#include "ruby/io/buffer.h"
|
#include "ruby/io/buffer.h"
|
||||||
|
#include "ruby/missing.h"
|
||||||
#include "ruby/thread.h"
|
#include "ruby/thread.h"
|
||||||
#include "ruby/util.h"
|
#include "ruby/util.h"
|
||||||
#include "ruby_atomic.h"
|
#include "ruby_atomic.h"
|
||||||
|
|
|
@ -2,6 +2,13 @@
|
||||||
#include "ruby/ruby.h"
|
#include "ruby/ruby.h"
|
||||||
|
|
||||||
#if defined _WIN32
|
#if defined _WIN32
|
||||||
|
#elif defined __wasi__
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
int flock(int fd, int operation) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
#elif defined HAVE_FCNTL && defined HAVE_FCNTL_H
|
#elif defined HAVE_FCNTL && defined HAVE_FCNTL_H
|
||||||
|
|
||||||
/* These are the flock() constants. Since this systems doesn't have
|
/* These are the flock() constants. Since this systems doesn't have
|
||||||
|
|
|
@ -8,6 +8,7 @@ wasmoptflags = @wasmoptflags@
|
||||||
|
|
||||||
WASM_OBJS = $(wasmdir)/machine_core.o $(wasmdir)/machine.o $(wasmdir)/setjmp.o $(wasmdir)/setjmp_core.o $(wasmdir)/fiber.o $(wasmdir)/runtime.o
|
WASM_OBJS = $(wasmdir)/machine_core.o $(wasmdir)/machine.o $(wasmdir)/setjmp.o $(wasmdir)/setjmp_core.o $(wasmdir)/fiber.o $(wasmdir)/runtime.o
|
||||||
|
|
||||||
|
wasm/missing.$(OBJEXT): $(wasmdir)/missing.c $(PLATFORM_D)
|
||||||
wasm/fiber.$(OBJEXT): $(wasmdir)/fiber.c $(wasmdir)/fiber.h $(wasmdir)/asyncify.h $(PLATFORM_D)
|
wasm/fiber.$(OBJEXT): $(wasmdir)/fiber.c $(wasmdir)/fiber.h $(wasmdir)/asyncify.h $(PLATFORM_D)
|
||||||
wasm/machine.$(OBJEXT): $(wasmdir)/machine.c $(srcdir)/wasm/machine.h $(wasmdir)/asyncify.h $(PLATFORM_D)
|
wasm/machine.$(OBJEXT): $(wasmdir)/machine.c $(srcdir)/wasm/machine.h $(wasmdir)/asyncify.h $(PLATFORM_D)
|
||||||
wasm/setjmp.$(OBJEXT): $(wasmdir)/setjmp.c $(wasmdir)/setjmp.h $(wasmdir)/machine.h $(wasmdir)/asyncify.h $(PLATFORM_D)
|
wasm/setjmp.$(OBJEXT): $(wasmdir)/setjmp.c $(wasmdir)/setjmp.h $(wasmdir)/machine.h $(wasmdir)/asyncify.h $(PLATFORM_D)
|
||||||
|
|
|
@ -0,0 +1,199 @@
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include "ruby/missing.h"
|
||||||
|
|
||||||
|
// Produce weak symbols for missing functions to replace them with actual ones if exists.
|
||||||
|
#define WASM_MISSING_LIBC_FUNC __attribute__((weak))
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
chmod(const char *pathname, rb_mode_t mode)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
chown(const char *pathname, rb_uid_t owner, rb_gid_t group)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
dup(int oldfd)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
dup2(int oldfd, int newfd)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
execl(const char *path, const char *arg, ...)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
execle(const char *path, const char *arg, ...)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
execv(const char *path, char *const argv[])
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
execve(const char *filename, char *const argv[], char *const envp[])
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
rb_uid_t
|
||||||
|
geteuid(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
rb_uid_t
|
||||||
|
getuid(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
rb_pid_t
|
||||||
|
getppid(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
rb_gid_t
|
||||||
|
getegid(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
rb_gid_t
|
||||||
|
getgid(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
char *
|
||||||
|
getlogin(void)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
rb_mode_t
|
||||||
|
umask(rb_mode_t mask)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
mprotect(const void *addr, size_t len, int prot)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
pclose(FILE *stream)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
FILE *
|
||||||
|
popen(const char *command, const char *type)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
pipe(int pipefd[2])
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
posix_madvise(void *addr, size_t len, int advice)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
kill(rb_pid_t pid, int sig)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
void
|
||||||
|
tzset(void)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
shutdown(int s, int how)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
int
|
||||||
|
system(const char *command)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
WASM_MISSING_LIBC_FUNC
|
||||||
|
pid_t
|
||||||
|
waitpid(pid_t pid, int *wstatus, int options)
|
||||||
|
{
|
||||||
|
errno = ENOTSUP;
|
||||||
|
return -1;
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче