static void load() { char* path = NULL; int length, dirname_length; printf("library loaded\n"); length = wai_getExecutablePath(NULL, 0, &dirname_length); if (length > 0) { path = (char*)malloc(length + 1); wai_getExecutablePath(path, length, &dirname_length); path[length] = '\0'; printf("executable path: %s\n", path); path[dirname_length] = '\0'; printf(" dirname: %s\n", path); printf(" basename: %s\n", path + dirname_length + 1); free(path); } length = wai_getModulePath(NULL, 0, &dirname_length); if (length > 0) { path = (char*)malloc(length + 1); wai_getModulePath(path, length, &dirname_length); path[length] = '\0'; printf("module path: %s\n", path); path[dirname_length] = '\0'; printf(" dirname: %s\n", path); printf(" basename: %s\n", path + dirname_length + 1); free(path); } }
sds parg_asset_whereami() { if (!_exedir) { int length = wai_getExecutablePath(0, 0, 0); _exedir = sdsnewlen("", length); int dirlen; wai_getExecutablePath(_exedir, length, &dirlen); sdsrange(_exedir, 0, dirlen); } return _exedir; }
char * get_current_directory_os() { static char dir[1024]; memset((void*)&dir[0],0,1024); int length = wai_getExecutablePath(0, 0, 0); if(length>=1024) return (char*)0; int dirname_length; wai_getExecutablePath((char*)&dir[0], length, &dirname_length); return (char*)&dir[0]; }
std::string appDir() { const int length = wai_getExecutablePath(nullptr, 0, nullptr); if(length == -1) return std::string(); char* path = (char*)malloc(length+1); int dirnameLength = length; if(wai_getExecutablePath(path, length, &dirnameLength) != length) return std::string(); // Only get the dirname path[dirnameLength] = '\0'; std::string str(path); free(path); return str; }
void *dlopen_qtplugin(std::string &plugin, void * &handle, const char *func) { #ifdef USE_EXTERNAL_PLUGINS int len = wai_getExecutablePath(NULL, 0, NULL); char *path = new char[len + 1]; wai_getExecutablePath(path, len, NULL); path[len] = '\0'; char *dir = dirname(path); if (!dir) { delete path; return NULL; } plugin = std::string(dir) + "/qtplugin.so"; handle = dlopen(plugin.c_str(), RTLD_LAZY); if (!handle) { plugin = std::string(dir) + "/../lib/fltk-dialog/qtplugin.so"; handle = dlopen(plugin.c_str(), RTLD_LAZY); } dir = NULL; delete path; #else if (!save_to_temp(qtplugin_so, qtplugin_so_len, ".so", plugin)) { return NULL; } handle = dlopen(plugin.c_str(), RTLD_LAZY); #endif /* USE_EXTERNAL_PLUGINS */ char *error = dlerror(); if (!handle) { std::cerr << error << std::endl; #ifndef USE_EXTERNAL_PLUGINS unlink(plugin.c_str()); #endif return NULL; } dlerror(); void *func_ptr = dlsym(handle, func); error = dlerror(); if (error || !func_ptr) { std::cerr << "error: " << error << std::endl; dlclose(handle); #ifndef USE_EXTERNAL_PLUGINS unlink(plugin.c_str()); #endif return NULL; } return func_ptr; }