2 +----------------------------------------------------------------------+
4 +----------------------------------------------------------------------+
5 | Copyright (c) 2010-present Facebook, Inc. (http://www.facebook.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
17 #include "hphp/runtime/base/pipe.h"
19 #include "hphp/runtime/base/type-string.h"
22 #include "hphp/util/process.h"
24 #include "hphp/util/light-process.h"
29 IMPLEMENT_RESOURCE_ALLOCATION(Pipe
)
30 ///////////////////////////////////////////////////////////////////////////////
39 bool Pipe::open(const String
& filename
, const String
& mode
) {
40 assert(m_stream
== nullptr);
41 assert(getFd() == -1);
44 auto old_cwd
= Process::GetCurrentDirectory();
45 chdir(g_context
->getCwd().data());
46 FILE* f
= _popen(filename
.data(), mode
.data());
47 chdir(old_cwd
.c_str());
49 FILE *f
= LightProcess::popen(filename
.data(), mode
.data(),
50 g_context
->getCwd().data());
61 invokeFiltersOnClose();
65 bool Pipe::closeImpl() {
68 if (valid() && !isClosed()) {
71 int pcloseRet
= _pclose(m_stream
);
73 int pcloseRet
= LightProcess::pclose(m_stream
);
74 if (WIFEXITED(pcloseRet
)) pcloseRet
= WEXITSTATUS(pcloseRet
);
76 s_pcloseRet
= pcloseRet
;
77 ret
= (pcloseRet
== 0);
85 ///////////////////////////////////////////////////////////////////////////////