Re: About rewrite zend_compile_file on win32.
| From: | Bleakwind | Date: | Sun, 29 May 2016 12:21:09 +0000 |
| Subject: | Re: About rewrite zend_compile_file on win32. | ||
| References: | 1 | Groups: | php.pecl.dev |
| Request: | Send a blank email to pecl-dev+get-13788@lists.php.net to get a copy of this message | ||
I have solved the problem, Use windows pipe
*int _pipe( int *phandles, unsigned int psize, int textmode ); *
instead of CreatePipe or CreateNamedPipe.
Thanks!
~~~~~~~~~~~~
- bleakwind@gmail.com
2016-05-29 10:07 GMT+08:00 Bleakwind <bleakwind@gmail.com>:
> About rewrite zend_compile_file on win32.
>
> pipe on windows can not work.
>
>
>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *static zend_op_array *mynew_compile_file(zend_file_handle *file_handle,
>> int type) { // Some Code... #if PHP_WIN32 // On win this
>> can not work HANDLE piperead, pipewrite; SECURITY_ATTRIBUTES
>> sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES);
>> sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if
>> (!CreatePipe(&piperead, &pipewrite, &sa, 0)) { return NULL;
>> } if (!WriteFile(pipewrite, data_source, data_source_len, NULL,
>> NULL)) { return NULL; } int file_des =
>> _open_osfhandle((zend_intptr_t)piperead, 0); if (file_handle->type
>> == ZEND_HANDLE_FP) { fclose(file_handle->handle.fp); } if
>> (file_handle->type == ZEND_HANDLE_FD) { close(file_handle->handle.fd); }
>> file_handle->type = ZEND_HANDLE_FD; file_handle->handle.fd =
>> file_des; ////// // On win this also can not work
>> const char *pStrPipeName = "\\\\.\\pipe\\NamePipe_MoreWindows";
>> DWORD dwLen = 0; OVERLAPPED ov; memset(&ov, 0,
>> sizeof(OVERLAPPED)); HANDLE hPipe = CreateNamedPipe(pStrPipeName,
>> PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_NOWAIT,
>> PIPE_UNLIMITED_INSTANCES, 0, 0, NMPWAIT_WAIT_FOREVER, 0); if
>> (WaitNamedPipe(pStrPipeName, NMPWAIT_WAIT_FOREVER) == FALSE) {
>> return NULL; } WriteFileEx(hPipe, data_source,
>> data_source_len, &dwLen, &ov); int file_des =
>> _open_osfhandle((intptr_t)hPipe, 0); if (file_handle->type ==
>> ZEND_HANDLE_FP) { fclose(file_handle->handle.fp); } if
>> (file_handle->type == ZEND_HANDLE_FD) { close(file_handle->handle.fd); }
>> file_handle->type = ZEND_HANDLE_FD; file_handle->handle.fd =
>> file_des; ////// #else // On Unix this can work int
>> pipeline[2] = {0, 0}; if (0 != pipe(pipeline)) { return
>> NULL; } if (write(pipeline[1], data_source, data_source_len)
>> != data_source_len) { return NULL; } if
>> (file_handle->type == ZEND_HANDLE_FP) { fclose(file_handle->handle.fp); }
>> if (file_handle->type == ZEND_HANDLE_FD) {
>> close(file_handle->handle.fd); } file_handle->type =
>> ZEND_HANDLE_FD; file_handle->handle.fd = pipeline[0]; if
>> (pipeline[1]) { close(pipeline[1]); } ////// #endif return
>> myori_compile_file(file_handle, type);}*
>
>
>
> ~~~~~~~~~~~~
> - bleakwind@gmail.com
>