Пример #1
0
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);
  }
}
Пример #2
0
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;
}
Пример #3
0
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];
}
Пример #4
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;
}
Пример #5
0
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;
}