+ #if !(GDEF_OS_WINDOWS)
+ // strip .[ExecutableType] entirely (including preceding dot) on Mac and Linux
+ {
+ StringBuffer output;
+ StringBuffer variable;
+ bool found_dot = false;
+ bool in_variable = false;
+ for (const char *i = m_string.c_str(); *i != '\0'; ++i) {
+ if (!found_dot && !in_variable) {
+ switch (*i) {
+ case '.':
+ found_dot = true;
+ break;
+ default:
+ output.push_back(*i);
+ break;
+ }
+ } else if (found_dot && !in_variable) {
+ switch (*i) {
+ case '[':
+ in_variable = true;
+ break;
+ default:
+ found_dot = false;
+ output.push_back(*i);
+ break;
+ }
+ } else {
+ switch (*i) {
+ case ']':
+ found_dot = false;
+ in_variable = false;
+ if ( strncmp("ExecutableType", variable.c_str(), sizeof(variable.c_str())) == 0 ) {
+ output.push_string("");
+ variable.clear();
+ }
+ break;
+ default:
+ variable.push_back(*i);
+ break;
+ }
+ }
+ }
+ setString(output.c_str());
+ }
+ #endif // !(GDEF_OS_WINDOWS)
+