| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | /* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date           Author        Notes * 2010-11-17      yi.qiu   first version */#include <rtthread.h>#include <rtm.h>#include <string.h>#include "dlmodule.h"#define MODULE_ROOT_DIR     "/modules"void* dlopen(const char *filename, int flags){    struct rt_dlmodule *module;    char *fullpath;    const char*def_path = MODULE_ROOT_DIR;    /* check parameters */    RT_ASSERT(filename != RT_NULL);    if (filename[0] != '/') /* it's a relative path, prefix with MODULE_ROOT_DIR */    {        fullpath = rt_malloc(strlen(def_path) + strlen(filename) + 2);        /* join path and file name */        rt_snprintf(fullpath, strlen(def_path) + strlen(filename) + 2,            "%s/%s", def_path, filename);    }    else    {        fullpath = (char*)filename; /* absolute path, use it directly */    }    rt_enter_critical();    /* find in module list */    module = dlmodule_find(fullpath);    if(module != RT_NULL)     {        rt_exit_critical();        module->nref++;    }    else     {        rt_exit_critical();        module = dlmodule_load(fullpath);    }    if(fullpath != filename)    {        rt_free(fullpath);    }    return (void*)module;}RTM_EXPORT(dlopen);
 |