1/* 2* Copyright (c) 2015, The Linux Foundation. All rights reserved. 3* 4* Redistribution and use in source and binary forms, with or without 5* modification, are permitted provided that the following conditions are 6* met: 7* * Redistributions of source code must retain the above copyright 8* notice, this list of conditions and the following disclaimer. 9* * Redistributions in binary form must reproduce the above 10* copyright notice, this list of conditions and the following 11* disclaimer in the documentation and/or other materials provided 12* with the distribution. 13* * Neither the name of The Linux Foundation nor the names of its 14* contributors may be used to endorse or promote products derived 15* from this software without specific prior written permission. 16* 17* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*/ 29 30#include <utils/sys.h> 31#include <sys/ioctl.h> 32#include <fcntl.h> 33#include <unistd.h> 34#include <string> 35 36#define __CLASS__ "Sys" 37 38namespace sdm { 39 40#ifndef SDM_VIRTUAL_DRIVER 41 42int PthreadCancel(pthread_t /* thread */) { 43 return 0; 44} 45 46// Pointer to actual driver interfaces. 47Sys::ioctl Sys::ioctl_ = ::ioctl; 48Sys::access Sys::access_ = ::access; 49Sys::open Sys::open_ = ::open; 50Sys::close Sys::close_ = ::close; 51Sys::poll Sys::poll_ = ::poll; 52Sys::pread Sys::pread_ = ::pread; 53Sys::pwrite Sys::pwrite_ = ::pwrite; 54Sys::pthread_cancel Sys::pthread_cancel_ = PthreadCancel; 55Sys::dup Sys::dup_ = ::dup; 56Sys::read Sys::read_ = ::read; 57Sys::write Sys::write_ = ::write; 58Sys::eventfd Sys::eventfd_ = ::eventfd; 59 60bool Sys::getline_(fstream &fs, std::string &line) { 61 return std::getline(fs, line) ? true : false; 62} 63 64#endif // SDM_VIRTUAL_DRIVER 65 66DynLib::~DynLib() { 67 Close(); 68} 69 70bool DynLib::Open(const char *lib_name) { 71 Close(); 72 lib_ = ::dlopen(lib_name, RTLD_NOW); 73 74 return (lib_ != NULL); 75} 76 77bool DynLib::Sym(const char *func_name, void **func_ptr) { 78 if (lib_) { 79 *func_ptr = ::dlsym(lib_, func_name); 80 } else { 81 *func_ptr = NULL; 82 } 83 84 return (*func_ptr != NULL); 85} 86 87void DynLib::Close() { 88 if (lib_) { 89 ::dlclose(lib_); 90 lib_ = NULL; 91 } 92} 93 94} // namespace sdm 95 96