1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifdef OHOS_FDTRACK_HOOK_ENABLE 17 #include <stdlib.h> 18 #include <dlfcn.h> 19 #include <errno.h> 20 #include <stdio.h> 21 #include "musl_log.h" 22 #include "musl_fdtrack_hook.h" 23 24 static char *__fdtrack_hook_shared_lib = "libfdleak_tracker.so"; 25 FDTRACK_START_HOOK(int fd_value)26int FDTRACK_START_HOOK(int fd_value) 27 { 28 int fd = fd_value; 29 if (fd != -1 && __predict_false(__fdtrack_enabled) && __predict_false(__fdtrack_hook)) { 30 struct fdtrack_event event; 31 event.type = FDTRACK_EVENT_TYPE_CREATE; 32 event.fd = fd; 33 atomic_load(&__fdtrack_hook)(&event); 34 } 35 return fd; 36 } 37 __musl_fdtrack_initializenull38__attribute__((constructor())) static void __musl_fdtrack_initialize() 39 { 40 if (!check_beta_develop_before()) { 41 return; 42 } 43 void* shared_library_handle = NULL; 44 shared_library_handle = dlopen(__fdtrack_hook_shared_lib, RTLD_NOW | RTLD_LOCAL); 45 if (shared_library_handle == NULL) { 46 MUSL_LOGI("FdTrack, Unable to open shared library %s: %s.\n", __fdtrack_hook_shared_lib, dlerror()); 47 return; 48 } 49 } 50 51 #endif 52