/* * \brief Plugin implementation * \author Christian Prochaska * \date 2010-01-21 */ /* * Copyright (C) 2010-2013 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ /* Genode includes */ #include /* libc plugin interface */ #include #include #include using namespace Genode; using namespace Libc; Plugin::Plugin(int priority) : _priority(priority) { plugin_registry()->insert(this); } Plugin::~Plugin() { plugin_registry()->remove(this); } int Plugin::priority() { return _priority; } bool Plugin::supports_execve(char const *filename, char *const argv[], char *const envp[]) { return false; } bool Plugin::supports_freeaddrinfo(struct ::addrinfo *) { return false; } bool Plugin::supports_getaddrinfo(const char *, const char *, const struct ::addrinfo *, struct ::addrinfo **) { return false; } bool Plugin::supports_mkdir(const char *, mode_t) { return false; } bool Plugin::supports_open(const char *, int) { return false; } bool Plugin::supports_pipe() { return false; } bool Plugin::supports_readlink(const char *path, char *buf, size_t bufsiz) { return false; } bool Plugin::supports_rename(const char *, const char *) { return false; } bool Plugin::supports_rmdir(const char*) { return false; } bool Plugin::supports_select(int, fd_set *, fd_set *, fd_set *, struct timeval *) { return false; } bool Plugin::supports_socket(int, int, int) { return false; } bool Plugin::supports_stat(const char*) { return false; } bool Plugin::supports_symlink(const char*, const char *) { return false; } bool Plugin::supports_unlink(const char*) { return false; } bool Plugin::supports_mmap() { return false; } /** * Generate dummy member function of Plugin class */ #define DUMMY(ret_type, ret_val, name, args) \ ret_type Plugin::name args \ { \ PERR( #name " not implemented"); \ return ret_val; \ } /* * Functions returning a 'File_descriptor' */ DUMMY(File_descriptor *, 0, dup, (File_descriptor *)); DUMMY(File_descriptor *, 0, open, (const char *, int)); DUMMY(File_descriptor *, 0, socket, (int, int, int)); DUMMY(File_descriptor *, 0, accept, (File_descriptor *, struct sockaddr *, socklen_t *)); /* * Functions taking a file descriptor as first argument */ DUMMY(int, -1, bind, (File_descriptor *, const struct sockaddr *, socklen_t)); DUMMY(int, -1, close, (File_descriptor *)); DUMMY(int, -1, connect, (File_descriptor *, const struct sockaddr *, socklen_t)); DUMMY(int, -1, dup2, (File_descriptor *, File_descriptor *new_fd)); DUMMY(int, -1, fstatfs, (File_descriptor *, struct statfs *)); DUMMY(int, -1, fcntl, (File_descriptor *, int cmd, long arg)); DUMMY(int, -1, fstat, (File_descriptor *, struct stat *)); DUMMY(int, -1, fsync, (File_descriptor *)); DUMMY(int, -1, ftruncate, (File_descriptor *, ::off_t)); DUMMY(ssize_t, -1, getdirentries, (File_descriptor *, char *, ::size_t, ::off_t *)); DUMMY(int, -1, getpeername, (File_descriptor *, struct sockaddr *, socklen_t *)); DUMMY(int, -1, getsockname, (File_descriptor *, struct sockaddr *, socklen_t *)); DUMMY(int, -1, getsockopt, (File_descriptor *, int, int, void *, socklen_t *)); DUMMY(int, -1, ioctl, (File_descriptor *, int, char*)); DUMMY(int, -1, listen, (File_descriptor *, int)); DUMMY(::off_t, -1, lseek, (File_descriptor *, ::off_t, int)); DUMMY(ssize_t, -1, read, (File_descriptor *, void *, ::size_t)); DUMMY(ssize_t, -1, recv, (File_descriptor *, void *, ::size_t, int)); DUMMY(ssize_t, -1, recvfrom, (File_descriptor *, void *, ::size_t, int, struct sockaddr *, socklen_t *)); DUMMY(ssize_t, -1, recvmsg, (File_descriptor *, struct msghdr *, int)); DUMMY(ssize_t, -1, send, (File_descriptor *, const void *, ::size_t, int)); DUMMY(ssize_t, -1, sendto, (File_descriptor *, const void *, ::size_t, int, const struct sockaddr *, socklen_t)); DUMMY(int, -1, setsockopt, (File_descriptor *, int, int, const void *, socklen_t)); DUMMY(int, -1, shutdown, (File_descriptor *, int)); DUMMY(ssize_t, -1, write, (File_descriptor *, const void *, ::size_t)); /* * Misc */ DUMMY(int, -1, execve, (char const *, char *const[], char *const[])); DUMMY(void, , freeaddrinfo, (struct ::addrinfo *)); DUMMY(int, -1, getaddrinfo, (const char *, const char *, const struct ::addrinfo *, struct ::addrinfo **)); DUMMY(int, -1, mkdir, (const char*, mode_t)); DUMMY(void *, (void *)(-1), mmap, (void *addr, ::size_t length, int prot, int flags, File_descriptor *, ::off_t offset)); DUMMY(int, -1, munmap, (void *, ::size_t)); DUMMY(int, -1, pipe, (File_descriptor*[2])); DUMMY(ssize_t, -1, readlink, (const char *, char *, size_t)); DUMMY(int, -1, rename, (const char *, const char *)); DUMMY(int, -1, rmdir, (const char*)); DUMMY(int, -1, select, (int, fd_set *, fd_set *, fd_set *, struct timeval *)); DUMMY(int, -1, stat, (const char*, struct stat*)); DUMMY(int, -1, symlink, (const char*, const char*)); DUMMY(int, -1, unlink, (const char*));