blob: 3d6833c3cef4329227ddf6f1027b4a00871ffd7d [file] [log] [blame]
// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBHWSEC_FOUNDATION_SYSCALLER_SYSCALLER_H_
#define LIBHWSEC_FOUNDATION_SYSCALLER_SYSCALLER_H_
#include <fcntl.h>
#include <linux/mei.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include <unistd.h>
#include "libhwsec-foundation/hwsec-foundation_export.h"
#include "libhwsec-foundation/signature_traits.h"
namespace hwsec_foundation {
class HWSEC_FOUNDATION_EXPORT Syscaller {
public:
virtual ~Syscaller() = default;
virtual int Open(const char* pathname, int flags) = 0;
virtual int Close(int fd) = 0;
virtual ssize_t Write(int fd, const void* buf, size_t count) = 0;
virtual ssize_t Read(int fd, void* buf, size_t count) = 0;
virtual int Select(int nfds,
fd_set* readfds,
fd_set* writefds,
fd_set* exceptfds,
struct timeval* timeout) = 0;
virtual int Ioctl(int fd,
unsigned long request, // NOLINT(runtime/int)
mei_connect_client_data* data) = 0;
};
// In best effort, validate the function signature are declared correctly.
static_assert(is_same_signature_v<decltype(&Syscaller::Close), decltype(close)>,
"`Syscaller::Close()` has different signature from `close()`");
static_assert(is_same_signature_v<decltype(&Syscaller::Write), decltype(write)>,
"`Syscaller::Write()` has different signature from `write()`");
static_assert(is_same_signature_v<decltype(&Syscaller::Read), decltype(read)>,
"`Syscaller::Read()` has different signature from `read()`");
static_assert(
is_same_signature_v<decltype(&Syscaller::Select), decltype(select)>,
"`Syscaller::Select()` has different signature from `select()`");
} // namespace hwsec_foundation
#endif // LIBHWSEC_FOUNDATION_SYSCALLER_SYSCALLER_H_