About rewrite zend_compile_file on win32.

From: 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

« previous php.pecl.dev (#13787) next »