diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-21 08:09:30 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-21 08:09:30 +0000 |
commit | 1912cfef3207b30c2691a3f71c524a69ac969b19 (patch) | |
tree | e13101b5a3c721dfd3a00179a49e43b454dcd5d5 /base/process_util_posix.cc | |
parent | 37f876a54ffb14d1630b1c0ebdbeda82ed150816 (diff) | |
download | chromium_src-1912cfef3207b30c2691a3f71c524a69ac969b19.zip chromium_src-1912cfef3207b30c2691a3f71c524a69ac969b19.tar.gz chromium_src-1912cfef3207b30c2691a3f71c524a69ac969b19.tar.bz2 |
More solid detection of browser process in chrome_process_util_linux.cc:
- use GetAppOutput instead of popen
- make unexpected conditions fatal (otherwise the tests using this code
would mistakenly assume that there is no running browser process)
Also add a constant for SingletonSocket.
Make necessary adjustments to GetAppOutput - ignore stderr (because fuser
prints the file name to stderr and having stderr in |output| would
require more parsing).
Review URL: http://codereview.chromium.org/77031
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14091 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/process_util_posix.cc')
-rw-r--r-- | base/process_util_posix.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/base/process_util_posix.cc b/base/process_util_posix.cc index 75c9b96..3570a16 100644 --- a/base/process_util_posix.cc +++ b/base/process_util_posix.cc @@ -326,17 +326,23 @@ bool GetAppOutput(const CommandLine& cl, std::string* output) { return false; case 0: // child { + int dev_null = open("/dev/null", O_WRONLY); + if (dev_null < 0) + exit(127); + int rv; do { rv = dup2(pipe_fd[1], STDOUT_FILENO); } while (rv == -1 && errno == EINTR); do { - rv = dup2(pipe_fd[1], STDERR_FILENO); + rv = dup2(dev_null, STDERR_FILENO); } while (rv == -1 && errno == EINTR); if (pipe_fd[0] != STDOUT_FILENO && pipe_fd[0] != STDERR_FILENO) close(pipe_fd[0]); if (pipe_fd[1] != STDOUT_FILENO && pipe_fd[1] != STDERR_FILENO) close(pipe_fd[1]); + if (dev_null != STDOUT_FILENO && dev_null != STDERR_FILENO) + close(dev_null); const std::vector<std::string> argv = cl.argv(); char* argv_cstr[argv.size() + 1]; @@ -373,7 +379,7 @@ bool GetAppOutput(const CommandLine& cl, std::string* output) { if (bytes_read > 0) buf_output.append(buffer, bytes_read); } - output->assign(buf_output); + output->swap(buf_output); close(pipe_fd[0]); return true; } |