16 #include "bufferreader.h"
27 std::unique_ptr<char, void(*)(
void*)> dup(strdup(filename), free);
29 c = strrchr(dup.get(),
'.');
31 LOG(llevError,
"LicenseManager: invalid filename %s\n", filename);
35 c = strrchr(dup.get(),
'.');
37 LOG(llevError,
"LicenseManager: invalid filename %s\n", filename);
43 std::string faceset(c);
45 c = strrchr(dup.get(),
'/');
47 LOG(llevError,
"LicenseManager: invalid filename %s\n", filename);
53 auto &items = licenses[faceset];
59 while ((line = bufferreader_next_line(reader)) !=
nullptr) {
62 c = strchr(line,
' ');
64 LOG(llevError,
"LicenseManager: malformed line '%s' in %s:%zu\n", line, filename, bufferreader_current_line(reader));
71 items.push_back(std::make_pair(line, c));
76 for (
auto wall : {
false,
true }) {
79 return search->second;
86 auto dot = face.find(
'.');
87 if (dot == std::string::npos) {
90 auto result = face.substr(0, dot);
91 if (tryWall && result.length() > 2 && result[result.length() - 2] ==
'_') {
92 auto letter = result[result.length() - 1];
93 if ((letter >=
'0' && letter <=
'9') || (letter >=
'A' && letter <=
'F')) {
94 return result.substr(0, result.length() - 2);