| // Copyright 2019 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include <stdlib.h> | |
| #include <iostream> | |
| #include <string> | |
| namespace { | |
| // Returns the current user username. | |
| std::string Username() { | |
| const char* username = getenv("USER"); | |
| return username ? std::string(username) : std::string(); | |
| } | |
| // Writes |string| to |stream| while escaping all C escape sequences. | |
| void EscapeString(std::ostream* stream, const std::string& string) { | |
| for (char c : string) { | |
| switch (c) { | |
| case 0: | |
| *stream << "\\0"; | |
| break; | |
| case '\a': | |
| *stream << "\\a"; | |
| break; | |
| case '\b': | |
| *stream << "\\b"; | |
| break; | |
| case '\e': | |
| *stream << "\\e"; | |
| break; | |
| case '\f': | |
| *stream << "\\f"; | |
| break; | |
| case '\n': | |
| *stream << "\\n"; | |
| break; | |
| case '\r': | |
| *stream << "\\r"; | |
| break; | |
| case '\t': | |
| *stream << "\\t"; | |
| break; | |
| case '\v': | |
| *stream << "\\v"; | |
| break; | |
| case '\\': | |
| *stream << "\\\\"; | |
| break; | |
| case '\"': | |
| *stream << "\\\""; | |
| break; | |
| default: | |
| *stream << c; | |
| break; | |
| } | |
| } | |
| } | |
| } // namespace | |
| int main(int argc, char** argv) { | |
| std::string username = Username(); | |
| std::cout << "{\"username\": \""; | |
| EscapeString(&std::cout, username); | |
| std::cout << "\"}" << std::endl; | |
| return 0; | |
| } |