#else
if (children) {
- char *cmd_line;
+ wchar_t *cmd_line_tmp, cmd_line[PHP_WIN32_IOUTIL_MAXPATHLEN];
+ size_t cmd_line_len;
char kid_buf[16];
- char my_name[MAX_PATH] = {0};
int i;
ZeroMemory(&kid_cgi_ps, sizeof(kid_cgi_ps));
/* kids will inherit the env, don't let them spawn */
SetEnvironmentVariable("PHP_FCGI_CHILDREN", NULL);
- GetModuleFileName(NULL, my_name, MAX_PATH);
- cmd_line = my_name;
+ /* The current command line is used as is. This should normally be no issue,
+ even if there were some I/O redirection. If some issues turn out, an
+ extra parsing might be needed here. */
+ cmd_line_tmp = GetCommandLineW();
+ if (!cmd_line_tmp) {
+ DWORD err = GetLastError();
+ char *err_text = php_win32_error_to_msg(err);
+
+ fprintf(stderr, "unable to get current command line: [0x%08lx]: %s\n", err, err_text);
+
+ goto parent_out;
+ }
+
+ cmd_line_len = wcslen(cmd_line_tmp);
+ if (cmd_line_len > sizeof(cmd_line) - 1) {
+ fprintf(stderr, "command line is too long\n");
+ goto parent_out;
+ }
+ memmove(cmd_line, cmd_line_tmp, (cmd_line_len + 1)*sizeof(wchar_t));
job = CreateJobObject(NULL, NULL);
if (!job) {
i = kids;
while (0 < i--) {
PROCESS_INFORMATION pi;
- STARTUPINFO si;
+ STARTUPINFOW si;
if (NULL != kid_cgi_ps[i]) {
continue;
si.hStdInput = (HANDLE)_get_osfhandle(fcgi_fd);
si.hStdError = INVALID_HANDLE_VALUE;
- if (CreateProcess(NULL, cmd_line, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
+ if (CreateProcessW(NULL, cmd_line, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {
kid_cgi_ps[i] = pi.hProcess;
if (!AssignProcessToJobObject(job, pi.hProcess)) {
DWORD err = GetLastError();