#include <iostream>
#include <string>
//environment global
struct environment_t {
const char* const path = std::getenv("PATH");
const char* const home = std::getenv("HOME");
const char* const shell = std::getenv("SHELL");
const char* const logname = std::getenv("LOGNAME");
const char* const uid = std::getenv("UID");
const char* const hostname = std::getenv("HOSTNAME");
const char* const mail = std::getenv("MAIL");
const char* const editor = std::getenv("EDITOR");
const char* const temp = std::getenv("TEMP");
protected:
environment_t()=default;
};
const environment_t& env() {
static const environment_t values = {};
return values;
}
// derived globals
const std::string& app_data_directory() {
static const std::string value(env().home + std::string("app/data"));
return value;
}
// safe and easy!
int main() {
std::cout << app_data_directory();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKLy9lbnZpcm9ubWVudCBnbG9iYWwKc3RydWN0IGVudmlyb25tZW50X3QgewoJY29uc3QgY2hhciogY29uc3QgcGF0aCA9IHN0ZDo6Z2V0ZW52KCJQQVRIIik7Cgljb25zdCBjaGFyKiBjb25zdCBob21lID0gc3RkOjpnZXRlbnYoIkhPTUUiKTsKCWNvbnN0IGNoYXIqIGNvbnN0IHNoZWxsID0gc3RkOjpnZXRlbnYoIlNIRUxMIik7Cgljb25zdCBjaGFyKiBjb25zdCBsb2duYW1lID0gc3RkOjpnZXRlbnYoIkxPR05BTUUiKTsKCWNvbnN0IGNoYXIqIGNvbnN0IHVpZCA9IHN0ZDo6Z2V0ZW52KCJVSUQiKTsKCWNvbnN0IGNoYXIqIGNvbnN0IGhvc3RuYW1lID0gc3RkOjpnZXRlbnYoIkhPU1ROQU1FIik7Cgljb25zdCBjaGFyKiBjb25zdCBtYWlsID0gc3RkOjpnZXRlbnYoIk1BSUwiKTsKCWNvbnN0IGNoYXIqIGNvbnN0IGVkaXRvciA9IHN0ZDo6Z2V0ZW52KCJFRElUT1IiKTsKCWNvbnN0IGNoYXIqIGNvbnN0IHRlbXAgPSBzdGQ6OmdldGVudigiVEVNUCIpOwpwcm90ZWN0ZWQ6CgllbnZpcm9ubWVudF90KCk9ZGVmYXVsdDsKfTsKY29uc3QgZW52aXJvbm1lbnRfdCYgZW52KCkgewogICBzdGF0aWMgY29uc3QgZW52aXJvbm1lbnRfdCB2YWx1ZXMgPSB7fTsKICAgcmV0dXJuIHZhbHVlczsKfQoKLy8gZGVyaXZlZCBnbG9iYWxzCmNvbnN0IHN0ZDo6c3RyaW5nJiBhcHBfZGF0YV9kaXJlY3RvcnkoKSB7CiAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgdmFsdWUoZW52KCkuaG9tZSArIHN0ZDo6c3RyaW5nKCJhcHAvZGF0YSIpKTsKICAgIHJldHVybiB2YWx1ZTsKfQoKLy8gc2FmZSBhbmQgZWFzeSEKaW50IG1haW4oKSB7CiAgICBzdGQ6OmNvdXQgPDwgYXBwX2RhdGFfZGlyZWN0b3J5KCk7Cn0=