1 // Copyright 2014 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chromeos-dbus-bindings/header_generator.h" 6 7 #include <string> 8 9 #include <base/files/file_path.h> 10 #include <base/files/file_util.h> 11 #include <base/strings/string_util.h> 12 #include <base/strings/stringprintf.h> 13 #include <brillo/strings/string_utils.h> 14 15 #include "chromeos-dbus-bindings/indented_text.h" 16 17 using std::string; 18 using std::vector; 19 20 namespace chromeos_dbus_bindings { 21 22 // static 23 string HeaderGenerator::GenerateHeaderGuard( 24 const base::FilePath& output_file) { 25 string guard = base::StringPrintf("____chromeos_dbus_binding__%s", 26 output_file.value().c_str()); 27 for (auto& c : guard) { 28 if (base::IsAsciiAlpha(c)) { 29 c = base::ToUpperASCII(c); 30 } else if (!base::IsAsciiDigit(c)) { 31 c = '_'; 32 } 33 } 34 return guard; 35 } 36 37 // static 38 bool HeaderGenerator::IsIntegralType(const string& type) { 39 return type.find("::") == std::string::npos; 40 } 41 42 // static 43 void HeaderGenerator::MakeConstReferenceIfNeeded(std::string* type) { 44 if (!IsIntegralType(*type)) { 45 *type = base::StringPrintf("const %s&", type->c_str()); 46 } 47 } 48 49 // static 50 bool HeaderGenerator::WriteTextToFile( 51 const base::FilePath& output_file, const IndentedText &text) { 52 string contents = text.GetContents(); 53 int expected_write_return = contents.size(); 54 if (base::WriteFile(output_file, contents.c_str(), contents.size()) != 55 expected_write_return) { 56 LOG(ERROR) << "Failed to write file " << output_file.value(); 57 return false; 58 } 59 return true; 60 } 61 62 // static 63 string HeaderGenerator::GetArgName(const char* prefix, 64 const string& arg_name, 65 int arg_index) { 66 string name = arg_name.empty() ? std::to_string(arg_index) : arg_name; 67 return base::StringPrintf("%s_%s", prefix, name.c_str()); 68 } 69 70 } // namespace chromeos_dbus_bindings 71