142d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov/* 242d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * Copyright (C) 2015 The Android Open Source Project 342d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * 442d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * Licensed under the Apache License, Version 2.0 (the "License"); 542d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * you may not use this file except in compliance with the License. 642d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * You may obtain a copy of the License at 742d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * 842d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * http://www.apache.org/licenses/LICENSE-2.0 942d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * 1042d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * Unless required by applicable law or agreed to in writing, software 1142d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * distributed under the License is distributed on an "AS IS" BASIS, 1242d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1342d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * See the License for the specific language governing permissions and 1442d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov * limitations under the License. 1542d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov */ 1642d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 1742d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov#include <dlfcn.h> 1842d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 1942d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovstatic const char* g_local_string = "This string is local to root library"; 2042d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovextern "C" const char* g_private_extern_string; 2142d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovextern "C" const char* g_public_extern_string; 2242d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 2342d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovbool g_dlopened = false; 2442d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 2542d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovextern "C" const char* ns_get_local_string() { 2642d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov return g_local_string; 2742d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov} 2842d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 2942d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovextern "C" const char* ns_get_private_extern_string() { 3042d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov return g_private_extern_string; 3142d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov} 3242d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 3342d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovextern "C" const char* ns_get_public_extern_string() { 3442d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov return g_public_extern_string; 3542d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov} 3642d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 3742d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanovextern "C" const char* ns_get_dlopened_string() { 3842d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov void* handle = dlopen("libnstest_dlopened.so", RTLD_NOW | RTLD_GLOBAL); 3942d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov if (handle == nullptr) { 4042d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov return nullptr; 4142d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov } 4242d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 431ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanov const char** result = static_cast<const char**>(dlsym(handle, "g_private_dlopened_string")); 441ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanov if (result == nullptr) { 451ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanov return nullptr; 461ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanov } else { 4742d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov g_dlopened = true; 4842d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov } 4942d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov 501ffec1cc4d0e283bb1ff6f49843769a3493b8d73Dmitriy Ivanov return *result; 5142d5fcb9f494eb45de3b6bf759f4a18076e84728Dmitriy Ivanov} 52