IPC unit tests and testing framework improvements
[platform/core/security/vasum.git] / common / utils / eventfd.cpp
1 /*
2 *  Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
3 *
4 *  Contact: Jan Olszak <j.olszak@samsung.com>
5 *
6 *  Licensed under the Apache License, Version 2.0 (the "License");
7 *  you may not use this file except in compliance with the License.
8 *  You may obtain a copy of the License at
9 *
10 *      http://www.apache.org/licenses/LICENSE-2.0
11 *
12 *  Unless required by applicable law or agreed to in writing, software
13 *  distributed under the License is distributed on an "AS IS" BASIS,
14 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 *  See the License for the specific language governing permissions and
16 *  limitations under the License
17 */
18
19 /**
20  * @file
21  * @author  Jan Olszak (j.olszak@samsung.com)
22  * @brief   Linux socket wrapper
23  */
24
25 #include "config.hpp"
26
27 #include "utils/eventfd.hpp"
28 #include "utils/exception.hpp"
29 #include "utils/fd-utils.hpp"
30 #include "logger/logger.hpp"
31
32 #include <sys/eventfd.h>
33 #include <cerrno>
34 #include <cstring>
35 #include <cstdint>
36
37 namespace utils {
38
39 EventFD::EventFD()
40 {
41     mFD = ::eventfd(0, EFD_SEMAPHORE | EFD_CLOEXEC);
42     if (mFD == -1) {
43         const std::string msg = "Error in eventfd: " + getSystemErrorMessage();
44         LOGE(msg);
45         throw EventFDException(msg);
46     }
47 }
48
49 EventFD::~EventFD()
50 {
51     utils::close(mFD);
52 }
53
54 int EventFD::getFD() const
55 {
56     return mFD;
57 }
58
59 void EventFD::send()
60 {
61     const std::uint64_t toSend = 1;
62     utils::write(mFD, &toSend, sizeof(toSend));
63 }
64
65 void EventFD::receive()
66 {
67     std::uint64_t readBuffer;
68     utils::read(mFD, &readBuffer, sizeof(readBuffer));
69 }
70
71
72 } // namespace utils