int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn) { char file[256]; FILE *fp = fopen(build_pathname_r(file, sizeof(file) - 1, "%s", filename), "rt"); if (!fp) { if (warn) { AMXXLOG_Error("[AMXX] Plugins list not found (file \"%s\")", filename); } return 1; } // Find now folder char pluginName[256], error[256], debug[256]; int debugFlag = 0; const char *pluginsDir = get_localinfo("amxx_pluginsdir", "addons/amxmodx/plugins"); String line; List<String *>::iterator block_iter; while (!feof(fp)) { pluginName[0] = '\0'; debug[0] = '\0'; debugFlag = 0; line.clear(); line._fread(fp); /** quick hack */ char *ptr = const_cast<char *>(line.c_str()); while (*ptr) { if (*ptr == ';') { *ptr = '\0'; } else { ptr++; } } sscanf(line.c_str(), "%s %s", pluginName, debug); if (!isalnum(*pluginName)) { continue; } if (isalnum(*debug) && !strcmp(debug, "debug")) { debugFlag = 1; } bool skip = false; for (block_iter = m_BlockList.begin(); block_iter != m_BlockList.end(); block_iter++) { if ((*block_iter)->compare(pluginName) == 0) { skip = true; break; } } if (skip || !strcmp(debug, "disabled")) { continue; } if (findPlugin(pluginName) != NULL) { continue; } CPlugin* plugin = loadPlugin(pluginsDir, pluginName, error, debugFlag); if (plugin->getStatusCode() == ps_bad_load) { char errorMsg[255]; sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName); plugin->setError(errorMsg); AMXXLOG_Error("[AMXX] %s", plugin->getError()); } } fclose(fp); return pCounter; }
int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn) { char file[PLATFORM_MAX_PATH]; FILE *fp = fopen(build_pathname_r(file, sizeof(file), "%s", filename), "rt"); if (!fp) { if (warn) { AMXXLOG_Error("[AMXX] Plugins list not found (file \"%s\")", filename); } return 1; } // Find now folder char pluginName[256], error[256], debug[256]; int debugFlag = 0; const char *pluginsDir = get_localinfo("amxx_pluginsdir", "addons/amxmodx/plugins"); char line[512]; List<ke::AString *>::iterator block_iter; while (!feof(fp)) { pluginName[0] = '\0'; debug[0] = '\0'; debugFlag = 0; line[0] = '\0'; fgets(line, sizeof(line), fp); /** quick hack */ char *ptr = line; while (*ptr) { if (*ptr == ';') { *ptr = '\0'; } else { ptr++; } } sscanf(line, "%s %s", pluginName, debug); if (!isalnum(*pluginName)) { continue; } if (isalnum(*debug) && !strcmp(debug, "debug")) { debugFlag = 1; } bool skip = false; for (block_iter = m_BlockList.begin(); block_iter != m_BlockList.end(); block_iter++) { if ((*block_iter)->compare(pluginName) == 0) { skip = true; break; } } if (skip || !strcmp(debug, "disabled")) { continue; } if (findPlugin(pluginName) != NULL) { continue; } CPlugin* plugin = loadPlugin(pluginsDir, pluginName, error, sizeof(error), debugFlag); if (plugin->getStatusCode() == ps_bad_load) { char errorMsg[255]; sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName); plugin->setError(errorMsg); AMXXLOG_Error("[AMXX] %s", plugin->getError()); } else { cell addr; if (amx_FindPubVar(plugin->getAMX(), "MaxClients", &addr) != AMX_ERR_NOTFOUND) { *get_amxaddr(plugin->getAMX(), addr) = gpGlobals->maxClients; } if (amx_FindPubVar(plugin->getAMX(), "MapName", &addr) != AMX_ERR_NOTFOUND) { set_amxstring(plugin->getAMX(), addr, STRING(gpGlobals->mapname), MAX_MAPNAME_LENGTH - 1); } if (amx_FindPubVar(plugin->getAMX(), "NULL_STRING", &addr) != AMX_ERR_NOTFOUND) { plugin->m_pNullStringOfs = get_amxaddr(plugin->getAMX(), addr); } if (amx_FindPubVar(plugin->getAMX(), "NULL_VECTOR", &addr) != AMX_ERR_NOTFOUND) { plugin->m_pNullVectorOfs = get_amxaddr(plugin->getAMX(), addr); } } } fclose(fp); return pCounter; }
int CPluginMngr::loadPluginsFromDir(const char* dir, bool debug ){ char pluginName[ 256 ], error[ 256 ], dirFull[ 256 ]; char * ext = 0; #if defined WIN32 build_pathname_r( dirFull , sizeof( dirFull ) , "%s\\*" , dir ); _finddata_t fd; intptr_t handle = _findfirst( dirFull , &fd); if (handle < 0){ return 0; } while (!_findnext(handle, &fd)){ if ( !strcmp ( fd.name , ".") || !strcmp ( fd.name , "..") ){ continue; } ext = strrchr( fd.name, '.' ); if( !ext || strcmp( ext , ".amxx" ) ){ continue; } *ext = '\0'; strncpy( pluginName , fd.name , ext - ( fd.name ) ); pluginName[ ext - ( fd.name ) ] = '\0'; if ( findPlugin( pluginName ) != NULL ){ continue; } CPlugin* plugin = loadPlugin( dir, fd.name, error, debug , pluginName ); if (plugin->getStatusCode() == ps_bad_load){ char errorMsg[255]; sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName); plugin->setError(errorMsg); AMXXLOG_Error("[AMXX] %s", plugin->getError()); } } _findclose(handle); #elif defined(__linux__) || defined(__APPLE__) build_pathname_r( dirFull , sizeof( dirFull ) , "%s" , dir ); struct dirent *ep; DIR *dp; if (( dp = opendir( dirFull ) ) == NULL ){ return 0; } while ( ( ep = readdir( dp )) != NULL ){ if ( !strcmp ( ep -> d_name , ".") || !strcmp ( ep -> d_name , "..") ){ continue; } ext = strrchr( ep -> d_name, '.' ); if( !ext || strcmp( ext , ".amxx" ) ){ continue; } strncpy( pluginName , ep -> d_name , ext - ( ep -> d_name ) ); pluginName[ ext - ( ep -> d_name ) ] = '\0'; if ( findPlugin( pluginName ) != NULL ){ continue; } CPlugin* plugin = loadPlugin( dir, ep -> d_name, error, debug , pluginName ); if (plugin->getStatusCode() == ps_bad_load){ char errorMsg[255]; sprintf(errorMsg, "%s (plugin \"%s\")", error, pluginName); plugin->setError(errorMsg); AMXXLOG_Error("[AMXX] %s", plugin->getError()); } } closedir (dp); #endif return pCounter; }