]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/lua_api/l_server.cpp
Performance improvement: Use std::list instead of std::vector for request_media,...
[dragonfireclient.git] / src / script / lua_api / l_server.cpp
index 76fe439eb87c659be1d0f235b66b6188b05929ae..16331a933be2a999a15a1d89f26657b4b8b51d8e 100644 (file)
@@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "server.h"
 #include "environment.h"
 #include "player.h"
+#include "log.h"
 
 // request_shutdown()
 int ModApiServer::l_request_shutdown(lua_State *L)
@@ -366,13 +367,14 @@ int ModApiServer::l_get_modnames(lua_State *L)
        NO_MAP_LOCK_REQUIRED;
 
        // Get a list of mods
-       std::list<std::string> mods_unsorted, mods_sorted;
+       std::vector<std::string> mods_unsorted;
+       std::list<std::string> mods_sorted;
        getServer(L)->getModNames(mods_unsorted);
 
        // Take unsorted items from mods_unsorted and sort them into
        // mods_sorted; not great performance but the number of mods on a
        // server will likely be small.
-       for(std::list<std::string>::iterator i = mods_unsorted.begin();
+       for(std::vector<std::string>::iterator i = mods_unsorted.begin();
                        i != mods_unsorted.end(); ++i) {
                bool added = false;
                for(std::list<std::string>::iterator x = mods_sorted.begin();
@@ -449,6 +451,36 @@ int ModApiServer::l_notify_authentication_modified(lua_State *L)
        return 0;
 }
 
+#ifndef NDEBUG
+// cause_error(type_of_error)
+int ModApiServer::l_cause_error(lua_State *L)
+{
+       NO_MAP_LOCK_REQUIRED;
+       std::string type_of_error = "none";
+       if(lua_isstring(L, 1))
+               type_of_error = lua_tostring(L, 1);
+
+       errorstream << "Error handler test called, errortype=" << type_of_error << std::endl;
+
+       if(type_of_error == "segv") {
+               volatile int* some_pointer = 0;
+               errorstream << "Cause a sigsegv now: " << (*some_pointer) << std::endl;
+
+       } else if (type_of_error == "zerodivision") {
+
+               unsigned int some_number = porting::getTimeS();
+               unsigned int zerovalue = 0;
+               unsigned int result = some_number / zerovalue;
+               errorstream << "Well this shouldn't ever be shown: " << result << std::endl;
+
+       } else if (type_of_error == "exception") {
+               throw BaseException("Errorhandler test fct called");
+       }
+
+       return 0;
+}
+#endif
+
 void ModApiServer::Initialize(lua_State *L, int top)
 {
        API_FCT(request_shutdown);
@@ -475,4 +507,8 @@ void ModApiServer::Initialize(lua_State *L, int top)
        API_FCT(kick_player);
        API_FCT(unban_player_or_ip);
        API_FCT(notify_authentication_modified);
+
+#ifndef NDEBUG
+       API_FCT(cause_error);
+#endif
 }