return "";
}
-
-void
-print_command(FILE* fp, const char* const* argv)
-{
- for (int i = 0; argv[i]; i++) {
- fprintf(fp, "%s%s", (i == 0) ? "" : " ", argv[i]);
- }
- fprintf(fp, "\n");
-}
-
-char*
-format_command(const char* const* argv)
-{
- size_t len = 0;
- for (int i = 0; argv[i]; i++) {
- len += (i == 0) ? 0 : 1;
- len += strlen(argv[i]);
- }
- len += 1;
- char* buf = static_cast<char*>(x_malloc(len + 1));
- char* p = buf;
- for (int i = 0; argv[i]; i++) {
- if (i != 0) {
- *p++ = ' ';
- }
- for (const char* q = argv[i]; *q != '\0'; q++) {
- *p++ = *q;
- }
- }
- *p++ = '\n';
- *p++ = '\0';
- return buf;
-}
const char* exclude_name,
const char* path);
-void print_command(FILE* fp, const char* const* argv);
-char* format_command(const char* const* argv);
-
#ifdef _WIN32
char* win32argvtos(const char* prefix, const char* const* argv, int* length);
std::string win32getshell(const char* path);
bool debug_log_enabled = false;
+void
+print_command(FILE* fp, const char* const* argv)
+{
+ for (int i = 0; argv[i]; i++) {
+ fprintf(fp, "%s%s", (i == 0) ? "" : " ", argv[i]);
+ }
+ fprintf(fp, "\n");
+}
+
} // namespace
// Initialize logging. Call only once.
}
#ifdef HAVE_SYSLOG
if (use_syslog) {
- char* s = format_command(argv);
- syslog(LOG_DEBUG, "%s", s);
- free(s);
+ syslog(LOG_DEBUG, "%s", format_command(argv).c_str());
}
#endif
if (debug_log_enabled) {
debug_log_buffer += prefix;
- char* s = format_command(argv);
- debug_log_buffer += s;
- free(s);
+ debug_log_buffer += format_command(argv);
}
}
cc_log("Failed to open %s: %s", path, strerror(errno));
}
}
+
+std::string
+format_command(const char* const* argv)
+{
+ std::string result;
+ for (int i = 0; argv[i]; i++) {
+ if (i != 0) {
+ result += ' ';
+ }
+ for (const char* arg = argv[i]; *arg != '\0'; arg++) {
+ result += *arg;
+ }
+ }
+ result += '\n';
+ return result;
+}
void cc_bulklog(const char* format, ...) ATTR_FORMAT(printf, 1, 2);
void cc_log_argv(const char* prefix, const char* const* argv);
void cc_dump_debug_log_buffer(const char* path);
+std::string format_command(const char* const* argv);
test_argprocessing.cpp
test_compopt.cpp
test_hashutil.cpp
- test_legacy_util.cpp)
+ test_legacy_util.cpp
+ test_logging.cpp)
if(INODE_CACHE_SUPPORTED)
list(APPEND source_files test_InodeCache.cpp)
// this program; if not, write to the Free Software Foundation, Inc., 51
// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-#include "../src/execute.hpp"
#include "../src/legacy_util.hpp"
#include "third_party/doctest.h"
}
}
-TEST_CASE("format_command")
-{
- const char* argv[] = {"foo", "bar", nullptr};
-
- CHECK_STR_EQ_FREE2("foo bar\n", format_command(argv));
-}
+TEST_SUITE_END();
--- /dev/null
+// Copyright (C) 2010-2020 Joel Rosdahl and other contributors
+//
+// See doc/AUTHORS.adoc for a complete list of contributors.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3 of the License, or (at your option)
+// any later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+// more details.
+//
+// You should have received a copy of the GNU General Public License along with
+// this program; if not, write to the Free Software Foundation, Inc., 51
+// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+#include "../src/logging.hpp"
+
+#include "third_party/doctest.h"
+
+TEST_SUITE_BEGIN("logging");
+
+TEST_CASE("format_command")
+{
+ const char* argv_0[] = {nullptr};
+ CHECK(format_command(argv_0) == "\n");
+
+ const char* argv_2[] = {"foo", "bar", nullptr};
+ CHECK(format_command(argv_2) == "foo bar\n");
+}
+
+TEST_SUITE_END();