About rewrite zend_compile_file on win32.
| From: | Bleakwind | Date: | Sun, 29 May 2016 02:07:32 +0000 |
| Subject: | About rewrite zend_compile_file on win32. | ||
| Groups: | php.pecl.dev | ||
| Request: | Send a blank email to pecl-dev+get-13787@lists.php.net to get a copy of this message | ||
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