| # REQUIRES: python, system-windows |
| # RUN: %python %s %lldb-dap > %t.out 2>&1 |
| # RUN: FileCheck %s --check-prefix=ERROR --allow-empty < %t.out |
| |
| # ERROR-NOT: DAP session error: |
| |
| # Test that we can successfully start the dap server from the console on Windows. |
| |
| import sys |
| import subprocess |
| import os |
| |
| lldb_dap_path = sys.argv[1] |
| if lldb_dap_path.startswith('%'): |
| lldb_dap_path = lldb_dap_path[1:] |
| lldb_dap_path = os.path.normpath(lldb_dap_path) |
| |
| import ctypes |
| from ctypes import wintypes |
| import msvcrt |
| |
| GENERIC_READ = 0x80000000 |
| GENERIC_WRITE = 0x40000000 |
| OPEN_EXISTING = 3 |
| FILE_SHARE_READ = 0x00000001 |
| FILE_SHARE_WRITE = 0x00000002 |
| |
| kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) |
| |
| conin_handle = kernel32.CreateFileW( |
| "CONIN$", |
| GENERIC_READ | GENERIC_WRITE, |
| FILE_SHARE_READ | FILE_SHARE_WRITE, |
| None, |
| OPEN_EXISTING, |
| 0, |
| None |
| ) |
| |
| if conin_handle == -1: |
| print("Failed to open CONIN$", file=sys.stderr) |
| sys.exit(1) |
| |
| conin_fd = msvcrt.open_osfhandle(conin_handle, os.O_RDONLY) |
| |
| proc = subprocess.Popen( |
| [lldb_dap_path], |
| stdin=conin_fd, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.STDOUT |
| ) |
| |
| os.close(conin_fd) |
| |
| try: |
| output, _ = proc.communicate(timeout=2) |
| except subprocess.TimeoutExpired: |
| proc.kill() |
| output, _ = proc.communicate() |
| |
| sys.stdout.buffer.write(output) |
| sys.stdout.flush() |