mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-01 16:58:30 +00:00
Fix getopt again
This commit is contained in:
parent
507d7a0b0b
commit
74caabb823
6 changed files with 28 additions and 28 deletions
|
@ -31,6 +31,26 @@
|
||||||
#include "libc/nt/thread.h"
|
#include "libc/nt/thread.h"
|
||||||
#include "libc/nt/thunk/msabi.h"
|
#include "libc/nt/thunk/msabi.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @fileoverview makes windows stdin handle capable of being poll'd
|
||||||
|
*
|
||||||
|
* 1. On Windows, there's no way to check how many bytes of input are
|
||||||
|
* available from the cmd.exe console. The only thing you can do is a
|
||||||
|
* blocking read that can't be interrupted.
|
||||||
|
*
|
||||||
|
* 2. On Windows, it's up to the parent process whether or not the
|
||||||
|
* handles it passes us are capable of non-blocking overlapped i/o
|
||||||
|
* reads (which we need for busy polling to check for interrupts).
|
||||||
|
*
|
||||||
|
* So we solve this by creating a thread which just does naive reads on
|
||||||
|
* standard input, and then relays the data to the process via a named
|
||||||
|
* pipe, which we explicitly creaete with overlapped i/o enabled.
|
||||||
|
*
|
||||||
|
* This code runs very early during process initialization, at the
|
||||||
|
* beginning of WinMain(). This module is only activated if the app
|
||||||
|
* links any one of: poll(), select(), or ioctl(FIONREAD).
|
||||||
|
*/
|
||||||
|
|
||||||
__msabi extern typeof(CloseHandle) *const __imp_CloseHandle;
|
__msabi extern typeof(CloseHandle) *const __imp_CloseHandle;
|
||||||
__msabi extern typeof(CreateFile) *const __imp_CreateFileW;
|
__msabi extern typeof(CreateFile) *const __imp_CreateFileW;
|
||||||
__msabi extern typeof(CreateNamedPipe) *const __imp_CreateNamedPipeW;
|
__msabi extern typeof(CreateNamedPipe) *const __imp_CreateNamedPipeW;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#ifndef _GETOPT_H
|
#ifndef _GETOPT_H
|
||||||
#define _GETOPT_H
|
#define _GETOPT_H
|
||||||
|
#include "third_party/getopt/long1.h"
|
||||||
#include "third_party/getopt/long2.h"
|
#include "third_party/getopt/long2.h"
|
||||||
#endif /* _GETOPT_H */
|
#endif /* _GETOPT_H */
|
||||||
|
|
|
@ -58,26 +58,6 @@
|
||||||
|
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
|
|
||||||
/**
|
|
||||||
* @fileoverview makes windows stdin handle capable of being poll'd
|
|
||||||
*
|
|
||||||
* 1. On Windows, there's no way to check how many bytes of input are
|
|
||||||
* available from the cmd.exe console. The only thing you can do is a
|
|
||||||
* blocking read that can't be interrupted.
|
|
||||||
*
|
|
||||||
* 2. On Windows, it's up to the parent process whether or not the
|
|
||||||
* handles it passes us are capable of non-blocking overlapped i/o
|
|
||||||
* reads (which we need for busy polling to check for interrupts).
|
|
||||||
*
|
|
||||||
* So we solve this by creating a thread which just does naive reads on
|
|
||||||
* standard input, and then relays the data to the process via a named
|
|
||||||
* pipe, which we explicitly creaete with overlapped i/o enabled.
|
|
||||||
*
|
|
||||||
* This code runs very early during process initialization, at the
|
|
||||||
* beginning of WinMain(). This module is only activated if the app
|
|
||||||
* links any one of: poll(), select(), or ioctl(FIONREAD).
|
|
||||||
*/
|
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
__msabi extern typeof(AddVectoredExceptionHandler) *const __imp_AddVectoredExceptionHandler;
|
__msabi extern typeof(AddVectoredExceptionHandler) *const __imp_AddVectoredExceptionHandler;
|
||||||
__msabi extern typeof(CloseHandle) *const __imp_CloseHandle;
|
__msabi extern typeof(CloseHandle) *const __imp_CloseHandle;
|
||||||
|
|
3
third_party/getopt/getopt.internal.h
vendored
3
third_party/getopt/getopt.internal.h
vendored
|
@ -1,7 +1,6 @@
|
||||||
#ifndef COSMOPOLITAN_GETOPT_H_
|
#ifndef COSMOPOLITAN_GETOPT_H_
|
||||||
#define COSMOPOLITAN_GETOPT_H_
|
#define COSMOPOLITAN_GETOPT_H_
|
||||||
#if defined(COSMOPOLITAN_GETOPT_LONG1_H_) || \
|
#if defined(_GETOPT_CORE_H) || defined(_GETOPT_EXT_H)
|
||||||
defined(COSMOPOLITAN_GETOPT_LONG2_H_)
|
|
||||||
#error "don't mix getopt_long() with cosmo's getopt()"
|
#error "don't mix getopt_long() with cosmo's getopt()"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
6
third_party/getopt/long1.h
vendored
6
third_party/getopt/long1.h
vendored
|
@ -1,5 +1,5 @@
|
||||||
#ifndef COSMOPOLITAN_GETOPT_LONG1_H_
|
#ifndef _GETOPT_CORE_H
|
||||||
#define COSMOPOLITAN_GETOPT_LONG1_H_
|
#define _GETOPT_CORE_H
|
||||||
#ifdef COSMOPOLITAN_GETOPT_H_
|
#ifdef COSMOPOLITAN_GETOPT_H_
|
||||||
#error "don't mix getopt_long() with cosmo's getopt()"
|
#error "don't mix getopt_long() with cosmo's getopt()"
|
||||||
#endif
|
#endif
|
||||||
|
@ -13,4 +13,4 @@ int getopt(int, char *const *, const char *);
|
||||||
|
|
||||||
COSMOPOLITAN_C_END_
|
COSMOPOLITAN_C_END_
|
||||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
#endif /* COSMOPOLITAN_GETOPT_LONG1_H_ */
|
#endif /* _GETOPT_CORE_H */
|
||||||
|
|
6
third_party/getopt/long2.h
vendored
6
third_party/getopt/long2.h
vendored
|
@ -1,5 +1,5 @@
|
||||||
#ifndef COSMOPOLITAN_GETOPT_LONG2_H_
|
#ifndef _GETOPT_EXT_H
|
||||||
#define COSMOPOLITAN_GETOPT_LONG2_H_
|
#define _GETOPT_EXT_H
|
||||||
#ifdef COSMOPOLITAN_GETOPT_H_
|
#ifdef COSMOPOLITAN_GETOPT_H_
|
||||||
#error "don't mix getopt_long() with cosmo's getopt()"
|
#error "don't mix getopt_long() with cosmo's getopt()"
|
||||||
#endif
|
#endif
|
||||||
|
@ -24,4 +24,4 @@ int getopt_long_only(int, char *const *, const char *, const struct option *,
|
||||||
|
|
||||||
COSMOPOLITAN_C_END_
|
COSMOPOLITAN_C_END_
|
||||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||||
#endif /* COSMOPOLITAN_GETOPT_LONG2_H_ */
|
#endif /* _GETOPT_EXT_H */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue