Commit fd31899f authored by Jisi Liu's avatar Jisi Liu

implement remove strdup usage and implement our own

strdup is not part C or C++ standard but POXIS function. Several
compilers failed to compile strdup or generate warnings.
parent 34ebca0c
......@@ -52,6 +52,16 @@ namespace google {
namespace protobuf {
namespace compiler {
namespace {
char* portable_strdup(const char* s) {
char* ns = malloc(strlen(s) + 1);
if (ns) {
strcpy(ns, s);
}
return ns;
}
} // namespace
#ifdef _WIN32
static void CloseHandleOrDie(HANDLE handle) {
......@@ -115,7 +125,7 @@ void Subprocess::Start(const string& program, SearchMode search_mode) {
}
// CreateProcess() mutates its second parameter. WTF?
char* name_copy = strdup(program.c_str());
char* name_copy = portable_strdup(program.c_str());
// Create the process.
PROCESS_INFORMATION process_info;
......@@ -299,7 +309,7 @@ void Subprocess::Start(const string& program, SearchMode search_mode) {
GOOGLE_CHECK(pipe(stdin_pipe) != -1);
GOOGLE_CHECK(pipe(stdout_pipe) != -1);
char* argv[2] = { strdup(program.c_str()), NULL };
char* argv[2] = { portable_strdup(program.c_str()), NULL };
child_pid_ = fork();
if (child_pid_ == -1) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment