xref: /aosp_15_r20/test/dittosuite/include/ditto/syscall.h (revision 6fa2df46f119dce7527f5beb2814eca0e6f886ac)
1*6fa2df46SAndroid Build Coastguard Worker // Copyright (C) 2021 The Android Open Source Project
2*6fa2df46SAndroid Build Coastguard Worker //
3*6fa2df46SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*6fa2df46SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*6fa2df46SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*6fa2df46SAndroid Build Coastguard Worker //
7*6fa2df46SAndroid Build Coastguard Worker //      http://www.apache.org/licenses/LICENSE-2.0
8*6fa2df46SAndroid Build Coastguard Worker //
9*6fa2df46SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*6fa2df46SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*6fa2df46SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6fa2df46SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*6fa2df46SAndroid Build Coastguard Worker // limitations under the License.
14*6fa2df46SAndroid Build Coastguard Worker 
15*6fa2df46SAndroid Build Coastguard Worker #pragma once
16*6fa2df46SAndroid Build Coastguard Worker 
17*6fa2df46SAndroid Build Coastguard Worker #include <dirent.h>
18*6fa2df46SAndroid Build Coastguard Worker #include <fcntl.h>
19*6fa2df46SAndroid Build Coastguard Worker #include <sys/param.h>
20*6fa2df46SAndroid Build Coastguard Worker #include <sys/stat.h>
21*6fa2df46SAndroid Build Coastguard Worker #include <unistd.h>
22*6fa2df46SAndroid Build Coastguard Worker 
23*6fa2df46SAndroid Build Coastguard Worker #include <cstdint>
24*6fa2df46SAndroid Build Coastguard Worker #include <string>
25*6fa2df46SAndroid Build Coastguard Worker 
26*6fa2df46SAndroid Build Coastguard Worker namespace dittosuite {
27*6fa2df46SAndroid Build Coastguard Worker 
28*6fa2df46SAndroid Build Coastguard Worker struct SchedAttr__ {
29*6fa2df46SAndroid Build Coastguard Worker   uint32_t size;         /* Size of this structure */
30*6fa2df46SAndroid Build Coastguard Worker   uint32_t sched_policy; /* Policy (SCHED_*) */
31*6fa2df46SAndroid Build Coastguard Worker   uint64_t sched_flags;  /* Flags */
32*6fa2df46SAndroid Build Coastguard Worker 
33*6fa2df46SAndroid Build Coastguard Worker   int32_t sched_nice;      /* Nice value (SCHED_OTHER,
34*6fa2df46SAndroid Build Coastguard Worker                                     SCHED_BATCH) */
35*6fa2df46SAndroid Build Coastguard Worker   uint32_t sched_priority; /* Static priority (SCHED_FIFO,
36*6fa2df46SAndroid Build Coastguard Worker                                           SCHED_RR) */
37*6fa2df46SAndroid Build Coastguard Worker   /* Remaining fields are for SCHED_DEADLINE */
38*6fa2df46SAndroid Build Coastguard Worker   uint64_t sched_runtime;
39*6fa2df46SAndroid Build Coastguard Worker   uint64_t sched_deadline;
40*6fa2df46SAndroid Build Coastguard Worker   uint64_t sched_period;
41*6fa2df46SAndroid Build Coastguard Worker };
42*6fa2df46SAndroid Build Coastguard Worker 
43*6fa2df46SAndroid Build Coastguard Worker std::string to_string(const SchedAttr__& attr);
44*6fa2df46SAndroid Build Coastguard Worker 
45*6fa2df46SAndroid Build Coastguard Worker class SyscallInterface {
46*6fa2df46SAndroid Build Coastguard Worker  public:
~SyscallInterface()47*6fa2df46SAndroid Build Coastguard Worker   virtual ~SyscallInterface() {}
48*6fa2df46SAndroid Build Coastguard Worker 
49*6fa2df46SAndroid Build Coastguard Worker   virtual int Access(const std::string& path_name, int mode) = 0;
50*6fa2df46SAndroid Build Coastguard Worker   virtual int Close(int fd) = 0;
51*6fa2df46SAndroid Build Coastguard Worker   virtual int CloseDir(DIR* dirp) = 0;
52*6fa2df46SAndroid Build Coastguard Worker   virtual int FAdvise(int fd, int64_t offset, int64_t len, int advice) = 0;
53*6fa2df46SAndroid Build Coastguard Worker   virtual int FAllocate(int fd, int mode, int64_t offset, int64_t len) = 0;
54*6fa2df46SAndroid Build Coastguard Worker   virtual int FTruncate(int fd, int64_t length) = 0;
55*6fa2df46SAndroid Build Coastguard Worker   virtual int FStat(int filedes, struct stat64* buf) = 0;
56*6fa2df46SAndroid Build Coastguard Worker   virtual int FSync(int fd) = 0;
57*6fa2df46SAndroid Build Coastguard Worker   virtual pid_t GetTid() = 0;
58*6fa2df46SAndroid Build Coastguard Worker   virtual int Open(const std::string& path_name, int flags, int mode) = 0;
59*6fa2df46SAndroid Build Coastguard Worker   virtual DIR* OpenDir(const std::string& name) = 0;
60*6fa2df46SAndroid Build Coastguard Worker   virtual int64_t Read(int fd, char* buf, int64_t count, int64_t offset) = 0;
61*6fa2df46SAndroid Build Coastguard Worker   virtual int SchedSetattr(pid_t pid, const SchedAttr__& attr, unsigned int flags) = 0;
62*6fa2df46SAndroid Build Coastguard Worker   virtual struct dirent* ReadDir(DIR* dirp) = 0;
63*6fa2df46SAndroid Build Coastguard Worker   virtual int64_t ReadLink(const std::string& path_name, char* buf, int64_t bufsiz) = 0;
64*6fa2df46SAndroid Build Coastguard Worker   virtual void Sync() = 0;
65*6fa2df46SAndroid Build Coastguard Worker   virtual int Unlink(const std::string& path_name) = 0;
66*6fa2df46SAndroid Build Coastguard Worker   virtual int64_t Write(int fd, char* buf, int64_t count, int64_t offset) = 0;
67*6fa2df46SAndroid Build Coastguard Worker   virtual int LockMutex(pthread_mutex_t* mutex) = 0;
68*6fa2df46SAndroid Build Coastguard Worker   virtual int UnlockMutex(pthread_mutex_t* mutex) = 0;
69*6fa2df46SAndroid Build Coastguard Worker };
70*6fa2df46SAndroid Build Coastguard Worker 
71*6fa2df46SAndroid Build Coastguard Worker class Syscall : public SyscallInterface {
72*6fa2df46SAndroid Build Coastguard Worker  public:
73*6fa2df46SAndroid Build Coastguard Worker   Syscall(Syscall& other) = delete;
74*6fa2df46SAndroid Build Coastguard Worker   void operator=(const Syscall&) = delete;
75*6fa2df46SAndroid Build Coastguard Worker 
76*6fa2df46SAndroid Build Coastguard Worker   static Syscall& GetSyscall();
77*6fa2df46SAndroid Build Coastguard Worker 
78*6fa2df46SAndroid Build Coastguard Worker   int Access(const std::string& path_name, int mode) override;
79*6fa2df46SAndroid Build Coastguard Worker   int Close(int fd) override;
80*6fa2df46SAndroid Build Coastguard Worker   int CloseDir(DIR* dirp) override;
81*6fa2df46SAndroid Build Coastguard Worker   int FAdvise(int fd, int64_t offset, int64_t len, int advice) override;
82*6fa2df46SAndroid Build Coastguard Worker   int FAllocate(int fd, int mode, int64_t offset, int64_t len) override;
83*6fa2df46SAndroid Build Coastguard Worker   int FTruncate(int fd, int64_t length) override;
84*6fa2df46SAndroid Build Coastguard Worker   int FStat(int filedes, struct stat64* buf) override;
85*6fa2df46SAndroid Build Coastguard Worker   int FSync(int fd) override;
86*6fa2df46SAndroid Build Coastguard Worker   pid_t GetTid() override;
87*6fa2df46SAndroid Build Coastguard Worker   int Open(const std::string& path_name, int flags, int mode) override;
88*6fa2df46SAndroid Build Coastguard Worker   DIR* OpenDir(const std::string& name) override;
89*6fa2df46SAndroid Build Coastguard Worker   int64_t Read(int fd, char* buf, int64_t count, int64_t offset) override;
90*6fa2df46SAndroid Build Coastguard Worker   int SchedSetattr(pid_t pid, const SchedAttr__& attr, unsigned int flags) override;
91*6fa2df46SAndroid Build Coastguard Worker   struct dirent* ReadDir(DIR* dirp) override;
92*6fa2df46SAndroid Build Coastguard Worker   int64_t ReadLink(const std::string& path_name, char* buf, int64_t bufsiz) override;
93*6fa2df46SAndroid Build Coastguard Worker   void Sync() override;
94*6fa2df46SAndroid Build Coastguard Worker   int Unlink(const std::string& path_name) override;
95*6fa2df46SAndroid Build Coastguard Worker   int64_t Write(int fd, char* buf, int64_t count, int64_t offset) override;
96*6fa2df46SAndroid Build Coastguard Worker   int LockMutex(pthread_mutex_t* mutex) override;
97*6fa2df46SAndroid Build Coastguard Worker   int UnlockMutex(pthread_mutex_t* mutex) override;
98*6fa2df46SAndroid Build Coastguard Worker 
99*6fa2df46SAndroid Build Coastguard Worker  private:
Syscall()100*6fa2df46SAndroid Build Coastguard Worker   Syscall(){};
101*6fa2df46SAndroid Build Coastguard Worker };
102*6fa2df46SAndroid Build Coastguard Worker 
103*6fa2df46SAndroid Build Coastguard Worker }  // namespace dittosuite
104