// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef SANDBOX_LINUX_BPF_DSL_SYSCALL_SET_H__ #define SANDBOX_LINUX_BPF_DSL_SYSCALL_SET_H__ #include <stdint.h> #include <iterator> #include "sandbox/sandbox_export.h" namespace sandbox { // Iterates over the entire system call range from 0..0xFFFFFFFFu. This // iterator is aware of how system calls look like and will skip quickly // over ranges that can't contain system calls. It iterates more slowly // whenever it reaches a range that is potentially problematic, returning // the last invalid value before a valid range of system calls, and the // first invalid value after a valid range of syscalls. It iterates over // individual values whenever it is in the normal range for system calls // (typically MIN_SYSCALL..MAX_SYSCALL). // // Example usage: // for (uint32_t sysnum : SyscallSet::All()) { // // Do something with sysnum. // } class SANDBOX_EXPORT SyscallSet { … }; SANDBOX_EXPORT bool operator==(const SyscallSet& lhs, const SyscallSet& rhs); // Iterator provides C++ input iterator semantics for traversing a // SyscallSet. class SyscallSet::Iterator { … }; SANDBOX_EXPORT bool operator==(const SyscallSet::Iterator& lhs, const SyscallSet::Iterator& rhs); SANDBOX_EXPORT bool operator!=(const SyscallSet::Iterator& lhs, const SyscallSet::Iterator& rhs); } // namespace sandbox #endif // SANDBOX_LINUX_BPF_DSL_SYSCALL_SET_H__