mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-27 23:08:31 +00:00
Make improvements
- Invent openatemp() API - Invent O_UNLINK open flag - Introduce getenv_secure() API - Remove `git pull` from cosmocc - Fix utimes() when path is NULL - Fix mktemp() to never return NULL - Fix utimensat() UTIME_OMIT on XNU - Improve utimensat() code for RHEL5 - Turn `argv[0]` C:/ to /C/ on Windows - Introduce tmpnam() and tmpnam_r() APIs - Fix more const issues with internal APIs - Permit utimes() on WIN32 in O_RDONLY mode - Fix fdopendir() to check fd is a directory - Fix recent crash regression in landlock make - Fix futimens(AT_FDCWD, NULL) to return EBADF - Use workaround so `make -j` doesn't fork bomb - Rename dontdiscard to __wur (just like glibc) - Fix st_size for WIN32 symlinks containing UTF-8 - Introduce stdio ext APIs needed by GNU coreutils - Fix lstat() on WIN32 for symlinks to directories - Move some constants from normalize.inc to limits.h - Fix segv with memchr() and memcmp() overlapping page - Implement POSIX fflush() behavior for reader streams - Implement AT_SYMLINK_NOFOLLOW for utimensat() on WIN32 - Don't change read-only status of existing files on WIN32 - Correctly handle `0x[^[:xdigit:]]` case in strtol() functions
This commit is contained in:
parent
8596e83cce
commit
f531acc8f9
297 changed files with 1920 additions and 1681 deletions
|
@ -55,10 +55,10 @@ int64_t RegisterEventSource(const char16_t *lpUNCServerName,
|
|||
const char16_t *lpSourceName);
|
||||
int32_t DeregisterEventSource(uint64_t handle);
|
||||
|
||||
int64_t CreateEvent(struct NtSecurityAttributes *opt_lpEventAttributes,
|
||||
int64_t CreateEvent(const struct NtSecurityAttributes *opt_lpEventAttributes,
|
||||
bool32 bManualReset, bool32 bInitialState,
|
||||
const char16_t *opt_lpName);
|
||||
int64_t CreateEventEx(struct NtSecurityAttributes *lpEventAttributes,
|
||||
int64_t CreateEventEx(const struct NtSecurityAttributes *lpEventAttributes,
|
||||
const char16_t *lpName, uint32_t dwFlags,
|
||||
uint32_t dwDesiredAccess);
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ bool32 SetCurrentDirectory(const char16_t *lpPathName);
|
|||
uint32_t GetCurrentDirectory(uint32_t nBufferLength, char16_t *out_lpBuffer);
|
||||
|
||||
bool32 CreateDirectory(const char16_t *lpPathName,
|
||||
struct NtSecurityAttributes *lpSecurityAttributes);
|
||||
const struct NtSecurityAttributes *lpSecurityAttributes);
|
||||
bool32 RemoveDirectory(const char16_t *lpPathName);
|
||||
|
||||
bool32 DuplicateHandle(int64_t hSourceProcessHandle, int64_t hSourceHandle,
|
||||
|
@ -131,7 +131,7 @@ bool32 UnlockFileEx(int64_t hFile, uint32_t dwReserved,
|
|||
|
||||
bool32 CreateHardLink(const char16_t *lpFileName,
|
||||
const char16_t *lpExistingFileName,
|
||||
struct NtSecurityAttributes *reserved)
|
||||
const struct NtSecurityAttributes *reserved)
|
||||
paramsnonnull((1, 2));
|
||||
bool32 CreateSymbolicLink(const char16_t *lpSymlinkFileName,
|
||||
const char16_t *lpTargetPathName, uint32_t dwFlags)
|
||||
|
@ -156,7 +156,7 @@ bool32 OpenProcessToken(int64_t hProcessHandle, uint32_t dwDesiredAccess,
|
|||
bool32 DuplicateToken(int64_t hExistingTokenHandle, int dwImpersonationLevel,
|
||||
int64_t *out_hDuplicateTokenHandle);
|
||||
bool32 DuplicateTokenEx(int64_t hExistingToken, unsigned int dwDesiredAccess,
|
||||
struct NtSecurityAttributes *lpTokenAttributes,
|
||||
const struct NtSecurityAttributes *lpTokenAttributes,
|
||||
int ImpersonationLevel, int TokenType,
|
||||
int64_t *out_phNewToken);
|
||||
|
||||
|
|
|
@ -81,12 +81,12 @@ bool32 OfferVirtualMemory(void *inout_VirtualAddress, size_t Size,
|
|||
int Priority);
|
||||
|
||||
int64_t GetProcessHeap(void);
|
||||
void *HeapAlloc(int64_t hHeap, uint32_t dwFlags, size_t dwBytes) dontdiscard;
|
||||
void *HeapAlloc(int64_t hHeap, uint32_t dwFlags, size_t dwBytes) __wur;
|
||||
bool32 HeapFree(int64_t hHeap, uint32_t dwFlags, void *opt_lpMem);
|
||||
void *HeapReAlloc(int64_t hHeap, uint32_t dwFlags, void *lpMem,
|
||||
size_t dwBytes) dontdiscard;
|
||||
size_t dwBytes) __wur;
|
||||
|
||||
void *GlobalAlloc(uint32_t uFlags, uint64_t dwBytes) dontdiscard;
|
||||
void *GlobalAlloc(uint32_t uFlags, uint64_t dwBytes) __wur;
|
||||
void *GlobalFree(void *hMem);
|
||||
|
||||
#if ShouldUseMsabiAttribute()
|
||||
|
|
|
@ -36,8 +36,8 @@ COSMOPOLITAN_C_START_
|
|||
|
||||
bool32 CreateProcess(const char16_t *opt_lpApplicationName,
|
||||
char16_t *lpCommandLine,
|
||||
struct NtSecurityAttributes *opt_lpProcessAttributes,
|
||||
struct NtSecurityAttributes *opt_lpThreadAttributes,
|
||||
const struct NtSecurityAttributes *opt_lpProcessAttributes,
|
||||
const struct NtSecurityAttributes *opt_lpThreadAttributes,
|
||||
bool32 bInheritHandles, uint32_t dwCreationFlags,
|
||||
void *opt_lpEnvironment,
|
||||
const char16_t *opt_lpCurrentDirectory,
|
||||
|
|
|
@ -102,7 +102,7 @@ int RegConnectRegistryEx(const char16_t *lpMachineName, int64_t hKey,
|
|||
int RegCreateKey(int64_t hKey, const char16_t *lpSubKey, int64_t *phkResult);
|
||||
int RegCreateKeyEx(int64_t hKey, const char16_t *lpSubKey, uint32_t Reserved,
|
||||
int16_t *lpClass, uint32_t dwOptions, int samDesired,
|
||||
struct NtSecurityAttributes *lpSecurityAttributes,
|
||||
const struct NtSecurityAttributes *lpSecurityAttributes,
|
||||
int64_t *phkResult, uint32_t *lpdwDisposition);
|
||||
int RegDeleteKey(int64_t hKey, const char16_t *lpSubKey);
|
||||
int RegDeleteKeyEx(int64_t hKey, const char16_t *lpSubKey, int samDesired,
|
||||
|
@ -127,7 +127,7 @@ int RegReplaceKey(int64_t hKey, const char16_t *lpSubKey,
|
|||
const char16_t *lpNewFile, const char16_t *lpOldFile);
|
||||
int RegRestoreKey(int64_t hKey, const char16_t *lpFile, uint32_t dwFlags);
|
||||
int RegSaveKey(int64_t hKey, const char16_t *lpFile,
|
||||
struct NtSecurityAttributes *lpSecurityAttributes);
|
||||
const struct NtSecurityAttributes *lpSecurityAttributes);
|
||||
int RegSetKeySecurity(int64_t hKey, uint32_t SecurityInformation,
|
||||
void *pSecurityDescriptor);
|
||||
int RegUnLoadKey(int64_t hKey, const char16_t *lpSubKey);
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
COSMOPOLITAN_C_START_
|
||||
|
||||
char16_t *GetCommandLine(void) nosideeffect;
|
||||
char16_t *GetEnvironmentStrings(void) dontdiscard;
|
||||
char16_t *GetEnvironmentStrings(void) __wur;
|
||||
bool32 FreeEnvironmentStrings(char16_t *) paramsnonnull();
|
||||
bool32 ReadFile(int64_t hFile, void *lpBuffer, uint32_t nNumberOfBytesToRead,
|
||||
uint32_t *lpNumberOfBytesRead,
|
||||
|
|
|
@ -11,7 +11,7 @@ struct NtSecurityAttributes {
|
|||
};
|
||||
|
||||
const char *DescribeNtSecurityAttributes(char[32],
|
||||
struct NtSecurityAttributes *);
|
||||
const struct NtSecurityAttributes *);
|
||||
#define DescribeNtSecurityAttributes(x) \
|
||||
DescribeNtSecurityAttributes(alloca(32), x)
|
||||
|
||||
|
|
|
@ -75,15 +75,16 @@ bool32 RegisterWaitForSingleObject(int64_t *phNewWaitObject, int64_t hObject,
|
|||
void *Context, uint32_t dwMilliseconds,
|
||||
uint32_t dwFlags);
|
||||
|
||||
int64_t CreateWaitableTimer(struct NtSecurityAttributes *lpTimerAttributes,
|
||||
bool32 bManualReset, const char16_t *lpTimerName);
|
||||
int64_t CreateWaitableTimer(
|
||||
const struct NtSecurityAttributes *lpTimerAttributes, bool32 bManualReset,
|
||||
const char16_t *lpTimerName);
|
||||
bool32 SetWaitableTimer(int64_t hTimer, const int64_t *lpDueTimeAsFtOrNegRela,
|
||||
int32_t opt_lPeriodMs, NtTimerapcroutine opt_callback,
|
||||
void *lpArgToCallback, bool32 fUnsleepSystem);
|
||||
|
||||
int64_t CreateSemaphore(struct NtSecurityAttributes *opt_lpSemaphoreAttributes,
|
||||
uint32_t lInitialCount, uint32_t lMaximumCount,
|
||||
const char16_t *opt_lpName);
|
||||
int64_t CreateSemaphore(
|
||||
const struct NtSecurityAttributes *opt_lpSemaphoreAttributes,
|
||||
uint32_t lInitialCount, uint32_t lMaximumCount, const char16_t *opt_lpName);
|
||||
|
||||
int32_t ReleaseMutex(int64_t hMutex);
|
||||
int32_t ReleaseSemaphore(int64_t hSemaphore, int32_t lReleaseCount,
|
||||
|
|
|
@ -30,7 +30,7 @@ COSMOPOLITAN_C_START_
|
|||
│ cosmopolitan § new technology » threads ─╬─│┼
|
||||
╚────────────────────────────────────────────────────────────────────────────│*/
|
||||
|
||||
int64_t CreateThread(struct NtSecurityAttributes *lpThreadAttributes,
|
||||
int64_t CreateThread(const struct NtSecurityAttributes *lpThreadAttributes,
|
||||
size_t dwStackSize, void *lpStartAddress,
|
||||
void *lpParameter, uint32_t dwCreationFlags,
|
||||
uint32_t *opt_lpThreadId);
|
||||
|
|
|
@ -291,7 +291,7 @@ struct NtInterfaceInfo {
|
|||
*/
|
||||
|
||||
int32_t WSAStartup(uint16_t wVersionRequested, struct NtWsaData *lpWSAData)
|
||||
paramsnonnull() dontdiscard;
|
||||
paramsnonnull() __wur;
|
||||
|
||||
int WSACleanup(void);
|
||||
int WSAGetLastError(void) nosideeffect;
|
||||
|
@ -311,7 +311,7 @@ int __sys_select_nt(int, struct NtFdSet *, struct NtFdSet *, struct NtFdSet *,
|
|||
|
||||
uint64_t WSASocket(int af, int type, int protocol,
|
||||
const struct NtWsaProtocolInfo *opt_lpProtocolInfo,
|
||||
const uint32_t opt_group, uint32_t dwFlags) dontdiscard;
|
||||
const uint32_t opt_group, uint32_t dwFlags) __wur;
|
||||
|
||||
int WSAConnect(uint64_t s, const struct sockaddr *name, const int namelen,
|
||||
const struct NtIovec *opt_lpCallerData,
|
||||
|
@ -340,8 +340,7 @@ bool32 WSAConnectByList(uint64_t s,
|
|||
int64_t WSAAccept(uint64_t s, struct sockaddr *out_addr,
|
||||
int32_t *opt_inout_addrlen,
|
||||
const NtConditionProc opt_lpfnCondition,
|
||||
const uint32_t *opt_dwCallbackData)
|
||||
paramsnonnull((2)) dontdiscard;
|
||||
const uint32_t *opt_dwCallbackData) paramsnonnull((2)) __wur;
|
||||
|
||||
bool32 AcceptEx(int64_t sListenSocket, int64_t sAcceptSocket,
|
||||
void *out_lpOutputBuffer /*[recvlen+local+remoteaddrlen]*/,
|
||||
|
@ -409,7 +408,7 @@ int WSANSPIoctl(int64_t hLookup, uint32_t dwControlCode,
|
|||
const struct NtWsaCompletion *opt_lpCompletion)
|
||||
paramsnonnull((3, 5, 7));
|
||||
|
||||
int64_t WSACreateEvent(void) dontdiscard;
|
||||
int64_t WSACreateEvent(void) __wur;
|
||||
bool32 WSACloseEvent(const int64_t hEvent);
|
||||
bool32 WSAResetEvent(const int64_t hEvent);
|
||||
bool32 WSASetEvent(const int64_t hEvent);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue