xref: /aosp_15_r20/test/dittosuite/src/syscall.cpp (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 #include <sys/syscall.h>
16*6fa2df46SAndroid Build Coastguard Worker 
17*6fa2df46SAndroid Build Coastguard Worker #include <sstream>
18*6fa2df46SAndroid Build Coastguard Worker 
19*6fa2df46SAndroid Build Coastguard Worker #include <ditto/logger.h>
20*6fa2df46SAndroid Build Coastguard Worker #include <ditto/syscall.h>
21*6fa2df46SAndroid Build Coastguard Worker 
22*6fa2df46SAndroid Build Coastguard Worker namespace dittosuite {
23*6fa2df46SAndroid Build Coastguard Worker 
GetSyscall()24*6fa2df46SAndroid Build Coastguard Worker Syscall& Syscall::GetSyscall() {
25*6fa2df46SAndroid Build Coastguard Worker   static Syscall syscall;
26*6fa2df46SAndroid Build Coastguard Worker   return syscall;
27*6fa2df46SAndroid Build Coastguard Worker }
28*6fa2df46SAndroid Build Coastguard Worker 
Access(const std::string & path_name,int mode)29*6fa2df46SAndroid Build Coastguard Worker int Syscall::Access(const std::string& path_name, int mode) {
30*6fa2df46SAndroid Build Coastguard Worker   return access(path_name.c_str(), mode);
31*6fa2df46SAndroid Build Coastguard Worker }
32*6fa2df46SAndroid Build Coastguard Worker 
Close(int fd)33*6fa2df46SAndroid Build Coastguard Worker int Syscall::Close(int fd) {
34*6fa2df46SAndroid Build Coastguard Worker   return close(fd);
35*6fa2df46SAndroid Build Coastguard Worker }
36*6fa2df46SAndroid Build Coastguard Worker 
CloseDir(DIR * dirp)37*6fa2df46SAndroid Build Coastguard Worker int Syscall::CloseDir(DIR* dirp) {
38*6fa2df46SAndroid Build Coastguard Worker   return closedir(dirp);
39*6fa2df46SAndroid Build Coastguard Worker }
40*6fa2df46SAndroid Build Coastguard Worker 
FAdvise(int fd,int64_t offset,int64_t len,int advice)41*6fa2df46SAndroid Build Coastguard Worker int Syscall::FAdvise(int fd, int64_t offset, int64_t len, int advice) {
42*6fa2df46SAndroid Build Coastguard Worker   return posix_fadvise64(fd, offset, len, advice);
43*6fa2df46SAndroid Build Coastguard Worker }
44*6fa2df46SAndroid Build Coastguard Worker 
FAllocate(int fd,int mode,int64_t offset,int64_t len)45*6fa2df46SAndroid Build Coastguard Worker int Syscall::FAllocate(int fd, int mode, int64_t offset, int64_t len) {
46*6fa2df46SAndroid Build Coastguard Worker   return fallocate64(fd, mode, offset, len);
47*6fa2df46SAndroid Build Coastguard Worker }
48*6fa2df46SAndroid Build Coastguard Worker 
FTruncate(int fd,int64_t length)49*6fa2df46SAndroid Build Coastguard Worker int Syscall::FTruncate(int fd, int64_t length) {
50*6fa2df46SAndroid Build Coastguard Worker   return ftruncate64(fd, length);
51*6fa2df46SAndroid Build Coastguard Worker }
52*6fa2df46SAndroid Build Coastguard Worker 
FStat(int filedes,struct stat64 * buf)53*6fa2df46SAndroid Build Coastguard Worker int Syscall::FStat(int filedes, struct stat64* buf) {
54*6fa2df46SAndroid Build Coastguard Worker   return fstat64(filedes, buf);
55*6fa2df46SAndroid Build Coastguard Worker }
56*6fa2df46SAndroid Build Coastguard Worker 
FSync(int fd)57*6fa2df46SAndroid Build Coastguard Worker int Syscall::FSync(int fd) {
58*6fa2df46SAndroid Build Coastguard Worker   return fsync(fd);
59*6fa2df46SAndroid Build Coastguard Worker }
60*6fa2df46SAndroid Build Coastguard Worker 
GetTid()61*6fa2df46SAndroid Build Coastguard Worker pid_t Syscall::GetTid() {
62*6fa2df46SAndroid Build Coastguard Worker   long ret = syscall(SYS_gettid);
63*6fa2df46SAndroid Build Coastguard Worker   if (ret == -1) {
64*6fa2df46SAndroid Build Coastguard Worker     PLOGF("Error calling syscall(SYS_gettid)");
65*6fa2df46SAndroid Build Coastguard Worker   }
66*6fa2df46SAndroid Build Coastguard Worker   return ret;
67*6fa2df46SAndroid Build Coastguard Worker }
68*6fa2df46SAndroid Build Coastguard Worker 
Open(const std::string & path_name,int flags,int mode)69*6fa2df46SAndroid Build Coastguard Worker int Syscall::Open(const std::string& path_name, int flags, int mode) {
70*6fa2df46SAndroid Build Coastguard Worker   return open(path_name.c_str(), flags, mode);
71*6fa2df46SAndroid Build Coastguard Worker }
72*6fa2df46SAndroid Build Coastguard Worker 
OpenDir(const std::string & name)73*6fa2df46SAndroid Build Coastguard Worker DIR* Syscall::OpenDir(const std::string& name) {
74*6fa2df46SAndroid Build Coastguard Worker   return opendir(name.c_str());
75*6fa2df46SAndroid Build Coastguard Worker }
76*6fa2df46SAndroid Build Coastguard Worker 
Read(int fd,char * buf,int64_t count,int64_t offset)77*6fa2df46SAndroid Build Coastguard Worker int64_t Syscall::Read(int fd, char* buf, int64_t count, int64_t offset) {
78*6fa2df46SAndroid Build Coastguard Worker   return pread64(fd, buf, count, offset);
79*6fa2df46SAndroid Build Coastguard Worker }
80*6fa2df46SAndroid Build Coastguard Worker 
ReadDir(DIR * dirp)81*6fa2df46SAndroid Build Coastguard Worker struct dirent* Syscall::ReadDir(DIR* dirp) {
82*6fa2df46SAndroid Build Coastguard Worker   return readdir(dirp);
83*6fa2df46SAndroid Build Coastguard Worker }
84*6fa2df46SAndroid Build Coastguard Worker 
ReadLink(const std::string & path_name,char * buf,int64_t bufsiz)85*6fa2df46SAndroid Build Coastguard Worker int64_t Syscall::ReadLink(const std::string& path_name, char* buf, int64_t bufsiz) {
86*6fa2df46SAndroid Build Coastguard Worker   return readlink(path_name.c_str(), buf, bufsiz);
87*6fa2df46SAndroid Build Coastguard Worker }
88*6fa2df46SAndroid Build Coastguard Worker 
SchedSetattr(pid_t pid,const SchedAttr__ & attr,unsigned int flags)89*6fa2df46SAndroid Build Coastguard Worker int Syscall::SchedSetattr(pid_t pid, const SchedAttr__& attr, unsigned int flags) {
90*6fa2df46SAndroid Build Coastguard Worker   long ret = syscall(__NR_sched_setattr, pid, &attr, flags);
91*6fa2df46SAndroid Build Coastguard Worker   if (ret == -1) {
92*6fa2df46SAndroid Build Coastguard Worker     PLOGF("Error calling syscall(__NR_sched_setattr)");
93*6fa2df46SAndroid Build Coastguard Worker   }
94*6fa2df46SAndroid Build Coastguard Worker   return ret;
95*6fa2df46SAndroid Build Coastguard Worker }
96*6fa2df46SAndroid Build Coastguard Worker 
Sync()97*6fa2df46SAndroid Build Coastguard Worker void Syscall::Sync() {
98*6fa2df46SAndroid Build Coastguard Worker   return sync();
99*6fa2df46SAndroid Build Coastguard Worker }
100*6fa2df46SAndroid Build Coastguard Worker 
Unlink(const std::string & path_name)101*6fa2df46SAndroid Build Coastguard Worker int Syscall::Unlink(const std::string& path_name) {
102*6fa2df46SAndroid Build Coastguard Worker   return unlink(path_name.c_str());
103*6fa2df46SAndroid Build Coastguard Worker }
104*6fa2df46SAndroid Build Coastguard Worker 
Write(int fd,char * buf,int64_t count,int64_t offset)105*6fa2df46SAndroid Build Coastguard Worker int64_t Syscall::Write(int fd, char* buf, int64_t count, int64_t offset) {
106*6fa2df46SAndroid Build Coastguard Worker   return pwrite64(fd, buf, count, offset);
107*6fa2df46SAndroid Build Coastguard Worker }
108*6fa2df46SAndroid Build Coastguard Worker 
LockMutex(pthread_mutex_t * mutex)109*6fa2df46SAndroid Build Coastguard Worker int Syscall::LockMutex(pthread_mutex_t* mutex) {
110*6fa2df46SAndroid Build Coastguard Worker   return pthread_mutex_lock(mutex);
111*6fa2df46SAndroid Build Coastguard Worker }
112*6fa2df46SAndroid Build Coastguard Worker 
UnlockMutex(pthread_mutex_t * mutex)113*6fa2df46SAndroid Build Coastguard Worker int Syscall::UnlockMutex(pthread_mutex_t* mutex) {
114*6fa2df46SAndroid Build Coastguard Worker   return pthread_mutex_unlock(mutex);
115*6fa2df46SAndroid Build Coastguard Worker }
116*6fa2df46SAndroid Build Coastguard Worker 
to_string(const SchedAttr__ & attr)117*6fa2df46SAndroid Build Coastguard Worker std::string to_string(const SchedAttr__& attr) {
118*6fa2df46SAndroid Build Coastguard Worker   std::stringstream ss;
119*6fa2df46SAndroid Build Coastguard Worker   ss << "size: " << attr.size << ", policy: " << attr.sched_policy
120*6fa2df46SAndroid Build Coastguard Worker      << ", flags: " << attr.sched_flags << ", nice: " << attr.sched_nice
121*6fa2df46SAndroid Build Coastguard Worker      << ", priority: " << attr.sched_priority << ", runtime: " << attr.sched_runtime
122*6fa2df46SAndroid Build Coastguard Worker      << ", deadline: " << attr.sched_deadline << ", period: " << attr.sched_period;
123*6fa2df46SAndroid Build Coastguard Worker   return ss.str();
124*6fa2df46SAndroid Build Coastguard Worker }
125*6fa2df46SAndroid Build Coastguard Worker 
126*6fa2df46SAndroid Build Coastguard Worker }  // namespace dittosuite
127