static Error save_file(const String &p_path, const List<String> &p_content) { FileAccessRef file = FileAccess::open(p_path, FileAccess::WRITE); ERR_FAIL_COND_V(!file, ERR_FILE_CANT_WRITE); for (const List<String>::Element *e = p_content.front(); e != NULL; e = e->next()) { file->store_string(e->get()); } file->close(); return OK; }
bool PowerX11::read_power_file(const char *base, const char *node, const char *key, char *buf, size_t buflen) { ssize_t br = 0; FileAccessRef fd = open_power_file(base, node, key); if (!fd) { return false; } br = fd->get_buffer(reinterpret_cast<uint8_t *>(buf), buflen - 1); fd->close(); if (br < 0) { return false; } buf[br] = '\0'; // null-terminate the string return true; }
Error NETSolution::save() { bool dir_exists = DirAccess::exists(path); ERR_EXPLAIN("The directory does not exist."); ERR_FAIL_COND_V(!dir_exists, ERR_FILE_BAD_PATH); String projs_decl; String sln_platform_cfg; String proj_platform_cfg; for (Map<String, ProjectInfo>::Element *E = projects.front(); E; E = E->next()) { const String &name = E->key(); const ProjectInfo &procinfo = E->value(); projs_decl += sformat(PROJECT_DECLARATION, name, name + ".csproj", procinfo.guid); for (int i = 0; i < procinfo.configs.size(); i++) { const String &config = procinfo.configs[i]; if (i != 0) { sln_platform_cfg += "\n"; proj_platform_cfg += "\n"; } sln_platform_cfg += sformat(SOLUTION_PLATFORMS_CONFIG, config); proj_platform_cfg += sformat(PROJECT_PLATFORMS_CONFIG, procinfo.guid, config); } } String content = sformat(SOLUTION_TEMPLATE, projs_decl, sln_platform_cfg, proj_platform_cfg); FileAccessRef file = FileAccess::open(path_join(path, name + ".sln"), FileAccess::WRITE); ERR_FAIL_COND_V(!file, ERR_FILE_CANT_WRITE); file->store_string(content); file->close(); return OK; }
/* http://lxr.linux.no/linux+v2.6.29/drivers/char/apm-emulation.c */ bool PowerX11::GetPowerInfo_Linux_proc_apm() { bool need_details = false; int ac_status = 0; int battery_status = 0; int battery_flag = 0; int battery_percent = 0; int battery_time = 0; FileAccessRef fd = FileAccess::open(proc_apm_path, FileAccess::READ); char buf[128]; char *ptr = &buf[0]; char *str = NULL; ssize_t br; if (!fd) { return false; /* can't use this interface. */ } br = fd->get_buffer(reinterpret_cast<uint8_t *>(buf), sizeof(buf) - 1); fd->close(); if (br < 0) { return false; } buf[br] = '\0'; /* null-terminate the string. */ if (!next_string(&ptr, &str)) { /* driver version */ return false; } if (!next_string(&ptr, &str)) { /* BIOS version */ return false; } if (!next_string(&ptr, &str)) { /* APM flags */ return false; } if (!next_string(&ptr, &str)) { /* AC line status */ return false; } else if (!int_string(str, &ac_status)) { return false; } if (!next_string(&ptr, &str)) { /* battery status */ return false; } else if (!int_string(str, &battery_status)) { return false; } if (!next_string(&ptr, &str)) { /* battery flag */ return false; } else if (!int_string(str, &battery_flag)) { return false; } if (!next_string(&ptr, &str)) { /* remaining battery life percent */ return false; } String sstr = str; if (sstr[sstr.length() - 1] == '%') { sstr[sstr.length() - 1] = '\0'; } if (!int_string(str, &battery_percent)) { return false; } if (!next_string(&ptr, &str)) { /* remaining battery life time */ return false; } else if (!int_string(str, &battery_time)) { return false; } if (!next_string(&ptr, &str)) { /* remaining battery life time units */ return false; } else if (String(str) == "min") { battery_time *= 60; } if (battery_flag == 0xFF) { /* unknown state */ this->power_state = OS::POWERSTATE_UNKNOWN; } else if (battery_flag & (1 << 7)) { /* no battery */ this->power_state = OS::POWERSTATE_NO_BATTERY; } else if (battery_flag & (1 << 3)) { /* charging */ this->power_state = OS::POWERSTATE_CHARGING; need_details = true; } else if (ac_status == 1) { this->power_state = OS::POWERSTATE_CHARGED; /* on AC, not charging. */ need_details = true; } else { this->power_state = OS::POWERSTATE_ON_BATTERY; need_details = true; } this->percent_left = -1; this->nsecs_left = -1; if (need_details) { const int pct = battery_percent; const int secs = battery_time; if (pct >= 0) { /* -1 == unknown */ this->percent_left = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */ } if (secs >= 0) { /* -1 == unknown */ this->nsecs_left = secs; } } return true; }