#include "main.h" #include extern "C" { inline bool path_exists (const std::string& name) { struct stat buffer; return (stat (name.c_str(), &buffer) == 0); } CLAPI void* initAug(augSettings settings, int flags) { if(!path_exists(std::string(settings.root))) { std::cout << "error: root path is invalid." << settings.root << std::endl; return nullptr; } return aug_init(settings.root, settings.loadPath, flags); } CLAPI void closeAug(void* aug) { aug_close((augeas*)aug); } // Wrapper of aug_preview CLAPI void printPreview(augeas* aug, const char* matchPath, const char* filePath) { if(aug == nullptr) { std::cout << "error: augeas is not initialized." << std::endl; return; } int r; char *s; char *etc_hosts_fn = nullptr; FILE *hosts_fp = nullptr; char *hosts_txt = nullptr; r = aug_load_file(aug,filePath); if(r != 0) { std::cout << "Error loading file." << std::endl; return; } r = aug_preview(aug,matchPath,&s); if(r != 0) { std::cout << "Failure previewing." << std::endl; return; } std::cout << s << std::endl; free(hosts_txt); free(s); } // Print tree of the matchPath CLAPI void printAugTree( augeas *aug, const char* matchPath, const char* filePath ) { if(aug == nullptr) { std::cout << "error: augeas is not initialized." << std::endl; return; } int r; FILE *out = tmpfile(); r = aug_load_file(aug, filePath); if(r != 0) { std::cout << "error: can't load file." << std::endl; return; } r = aug_print(aug, out,matchPath); if(r != 0) { std::cout << "error: aug_print failure." << std::endl; return; } std::map stdBindList; std::map ::iterator pos; char line[256]; rewind(out); while (fgets(line, 256, out) != nullptr) { // remove end of line line[strlen(line) - 1] = '\0'; std::string str_matchPath = matchPath; std::string s = line; // skip comments if (s.find("#comment") != std::string::npos) continue; s = s.substr(str_matchPath.length() - 1); // split by '=' sign size_t eqpos = s.find(" = "); if (eqpos == std::string::npos) continue; // extract key and value std::string key = s.substr(0, eqpos); std::string value = s.substr(eqpos + 3); // remove '"' sign from around value value.erase(value.begin()); value.erase(value.end() - 1); stdBindList.insert(std::pair(key,value)); // 2 } fclose(out); for (pos = stdBindList.begin();pos!=stdBindList.end();pos++) { std::cout << "Key: " << pos->first << ";" << " Value: " << pos->second << std::endl; } } }