-
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathversion_name.cpp
More file actions
37 lines (35 loc) · 977 Bytes
/
Copy pathversion_name.cpp
File metadata and controls
37 lines (35 loc) · 977 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <modloader/statichook.h>
#include <modloader/loader.h>
#include <string>
#include <cstring>
#include <link.h>
#include <dlfcn.h>
using namespace modloader;
THook(std::string, _ZN6Common22getServerVersionStringEv) {
std::string ret = original();
ret += " modded (ModLoader ";
ret += ModLoader::getVersion();
bool f = true;
ModLoader::forEachMod([&ret, &f](void *v) {
struct link_map *ent;
if (dlinfo(v, RTLD_DI_LINKMAP, &ent) == 0 && ent != nullptr && ent->l_name != nullptr) {
if (!f)
ret += ", ";
else
ret += ", mods: ";
f = false;
const char* name = basename(ent->l_name);
size_t namelen = strlen(name);
if (namelen >= 3 && memcmp(&name[namelen - 3], ".so", 3) == 0) {
namelen -= 3;
if (namelen >= 3 && memcmp(name, "lib", 3) == 0) {
name = &name[3];
namelen -= 3;
}
}
ret.append(name, namelen);
}
});
ret += ")";
return ret;
}