mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-05 18:58:30 +00:00
Greatly expand system() shell code features
The cosmopolitan command interpreter now has 13 builtin commands, variable support, support for ; / && / || syntax, asynchronous support, and plenty of unit tests with bug fixes. This change fixes a bug in posix_spawn() with null envp arg. strace logging now uses atomic writes for scatter functions. Breaking change renaming GetCpuCount() to _getcpucount(). TurfWar is now updated to use the new token bucket algorithm. WIN32 affinity masks now inherit across fork() and execve().
This commit is contained in:
parent
e7329b7cba
commit
b41f91c658
80 changed files with 1370 additions and 344 deletions
65
third_party/double-conversion/dc.mk
vendored
Normal file
65
third_party/double-conversion/dc.mk
vendored
Normal file
|
@ -0,0 +1,65 @@
|
|||
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
|
||||
#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘
|
||||
|
||||
PKGS += THIRD_PARTY_DOUBLECONVERSION
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS += THIRD_PARTY_DOUBLECONVERSION_A
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_DEPS) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A = \
|
||||
o/$(MODE)/third_party/double-conversion/libdouble-conversion.a
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_FILES := $(wildcard third_party/double-conversion/*)
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_SRCS_C = $(filter %.c,$(THIRD_PARTY_DOUBLECONVERSION_A_FILES))
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_SRCS_CC = $(filter %.cc,$(THIRD_PARTY_DOUBLECONVERSION_A_FILES))
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_HDRS = $(filter %.h,$(THIRD_PARTY_DOUBLECONVERSION_A_FILES))
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_SRCS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_SRCS_C) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_SRCS_CC)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_OBJS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_SRCS_C:%.c=o/$(MODE)/%.o) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_SRCS_CC:%.cc=o/$(MODE)/%.o)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_CHECKS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A).pkg \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_HDRS:%=o/$(MODE)/%.okk)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_DIRECTDEPS = \
|
||||
LIBC_INTRIN \
|
||||
LIBC_NEXGEN32E \
|
||||
LIBC_STR \
|
||||
LIBC_TINYMATH
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_DEPS := \
|
||||
$(call uniq,$(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_A_DIRECTDEPS),$($(x))))
|
||||
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A): \
|
||||
third_party/double-conversion/ \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A).pkg \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_OBJS)
|
||||
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A).pkg: \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_OBJS) \
|
||||
$(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_A_DIRECTDEPS),$($(x)_A).pkg)
|
||||
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_OBJS): private \
|
||||
OVERRIDE_CXXFLAGS += \
|
||||
-ffunction-sections \
|
||||
-fdata-sections
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_LIBS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)))
|
||||
THIRD_PARTY_DOUBLECONVERSION_SRCS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)_SRCS))
|
||||
THIRD_PARTY_DOUBLECONVERSION_HDRS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)_HDRS))
|
||||
THIRD_PARTY_DOUBLECONVERSION_CHECKS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)_CHECKS))
|
||||
THIRD_PARTY_DOUBLECONVERSION_OBJS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)_OBJS))
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_OBJS): third_party/double-conversion/dc.mk
|
||||
|
||||
.PHONY: o/$(MODE)/third_party/double-conversion
|
||||
o/$(MODE)/third_party/double-conversion: \
|
||||
o/$(MODE)/third_party/double-conversion/test \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_CHECKS)
|
|
@ -1,25 +1,7 @@
|
|||
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
|
||||
#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘
|
||||
|
||||
PKGS += THIRD_PARTY_DOUBLECONVERSION
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS += THIRD_PARTY_DOUBLECONVERSION_A
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_DEPS) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A = \
|
||||
o/$(MODE)/third_party/double-conversion/libdouble-conversion.a
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_FILES := $(wildcard third_party/double-conversion/*)
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_SRCS_C = $(filter %.c,$(THIRD_PARTY_DOUBLECONVERSION_A_FILES))
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_SRCS_CC = $(filter %.cc,$(THIRD_PARTY_DOUBLECONVERSION_A_FILES))
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_HDRS = $(filter %.h,$(THIRD_PARTY_DOUBLECONVERSION_A_FILES))
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_SRCS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_SRCS_C) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_SRCS_CC)
|
||||
PKGS += THIRD_PARTY_DOUBLECONVERSION_TEST
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_COMS = \
|
||||
o/$(MODE)/third_party/double-conversion/double-conversion-tester.com
|
||||
|
@ -28,9 +10,15 @@ THIRD_PARTY_DOUBLECONVERSION_TEST_BINS = \
|
|||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_COMS) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_COMS:%=%.dbg)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS += THIRD_PARTY_DOUBLECONVERSION_TEST_A
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_HDRS = \
|
||||
third_party/double-conversion/test/cctest.h \
|
||||
third_party/double-conversion/test/checks.h \
|
||||
third_party/double-conversion/test/gay-fixed.h \
|
||||
third_party/double-conversion/test/gay-precision.h \
|
||||
third_party/double-conversion/test/gay-shortest.h \
|
||||
third_party/double-conversion/test/gay-shortest-single.h
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_A_SRCS_CC = \
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_SRCS = \
|
||||
third_party/double-conversion/test/cctest.cc \
|
||||
third_party/double-conversion/test/gay-fixed.cc \
|
||||
third_party/double-conversion/test/gay-precision.cc \
|
||||
|
@ -46,64 +34,26 @@ THIRD_PARTY_DOUBLECONVERSION_TEST_A_SRCS_CC = \
|
|||
third_party/double-conversion/test/test-ieee.cc \
|
||||
third_party/double-conversion/test/test-strtod.cc
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_A_HDRS = \
|
||||
third_party/double-conversion/test/cctest.h \
|
||||
third_party/double-conversion/test/checks.h \
|
||||
third_party/double-conversion/test/gay-fixed.h \
|
||||
third_party/double-conversion/test/gay-precision.h \
|
||||
third_party/double-conversion/test/gay-shortest.h \
|
||||
third_party/double-conversion/test/gay-shortest-single.h
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_OBJS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_SRCS:%.cc=o/$(MODE)/%.o)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_A_SRCS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_A_SRCS_C) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_A_SRCS_CC)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_OBJS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_SRCS_C:%.c=o/$(MODE)/%.o) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_SRCS_CC:%.cc=o/$(MODE)/%.o)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_CHECKS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A).pkg \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_HDRS:%=o/$(MODE)/%.okk)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_A_OBJS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_A_SRCS_CC:%.cc=o/$(MODE)/%.o)
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_DIRECTDEPS = \
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_DIRECTDEPS = \
|
||||
LIBC_INTRIN \
|
||||
LIBC_NEXGEN32E \
|
||||
LIBC_MEM \
|
||||
LIBC_RUNTIME \
|
||||
LIBC_STDIO \
|
||||
LIBC_FMT \
|
||||
LIBC_SYSV \
|
||||
LIBC_STR \
|
||||
LIBC_STUBS \
|
||||
LIBC_TINYMATH \
|
||||
THIRD_PARTY_GDTOA \
|
||||
THIRD_PARTY_LIBCXX
|
||||
THIRD_PARTY_LIBCXX \
|
||||
THIRD_PARTY_DOUBLECONVERSION
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_A_DEPS := \
|
||||
$(call uniq,$(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_A_DIRECTDEPS),$($(x))))
|
||||
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A): \
|
||||
third_party/double-conversion/ \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A).pkg \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_OBJS)
|
||||
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A).pkg: \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_OBJS) \
|
||||
$(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_A_DIRECTDEPS),$($(x)_A).pkg)
|
||||
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_OBJS): private \
|
||||
OVERRIDE_CXXFLAGS += \
|
||||
-ffunction-sections \
|
||||
-fdata-sections
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_DEPS := \
|
||||
$(call uniq,$(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_TEST_DIRECTDEPS),$($(x))))
|
||||
|
||||
o/$(MODE)/third_party/double-conversion/double-conversion-tester.com.dbg: \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A_DEPS) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_A) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_A_OBJS) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_DEPS) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_OBJS) \
|
||||
$(CRT) \
|
||||
$(APE_NO_MODIFY_SELF)
|
||||
@$(APELINK)
|
||||
|
@ -119,7 +69,7 @@ THIRD_PARTY_DOUBLECONVERSION_TEST_NAMES = \
|
|||
test-bignum-dtoa \
|
||||
test-bignum
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_RUNS = \
|
||||
THIRD_PARTY_DOUBLECONVERSION_TEST_CHECKS = \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_NAMES:%=o/$(MODE)/third_party/double-conversion/%.runs)
|
||||
|
||||
# TODO(jart): find some way to run these under runitd
|
||||
|
@ -160,13 +110,6 @@ o/$(MODE)/third_party/double-conversion/test-bignum.runs: \
|
|||
o/$(MODE)/third_party/double-conversion/double-conversion-tester.com
|
||||
@$(COMPILE) -ACHECK -wtT$@ $< test-bignum
|
||||
|
||||
THIRD_PARTY_DOUBLECONVERSION_LIBS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)))
|
||||
THIRD_PARTY_DOUBLECONVERSION_SRCS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)_SRCS))
|
||||
THIRD_PARTY_DOUBLECONVERSION_HDRS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)_HDRS))
|
||||
THIRD_PARTY_DOUBLECONVERSION_CHECKS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)_CHECKS))
|
||||
THIRD_PARTY_DOUBLECONVERSION_OBJS = $(foreach x,$(THIRD_PARTY_DOUBLECONVERSION_ARTIFACTS),$($(x)_OBJS))
|
||||
|
||||
.PHONY: o/$(MODE)/third_party/double-conversion
|
||||
o/$(MODE)/third_party/double-conversion: \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_CHECKS) \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_RUNS)
|
||||
.PHONY: o/$(MODE)/third_party/double-conversion/test
|
||||
o/$(MODE)/third_party/double-conversion/test: \
|
||||
$(THIRD_PARTY_DOUBLECONVERSION_TEST_CHECKS)
|
1
third_party/lua/lua.mk
vendored
1
third_party/lua/lua.mk
vendored
|
@ -230,6 +230,7 @@ THIRD_PARTY_LUA_LUA_DIRECTDEPS = \
|
|||
LIBC_LOG \
|
||||
LIBC_STR \
|
||||
LIBC_SYSV \
|
||||
LIBC_THREAD \
|
||||
THIRD_PARTY_LINENOISE \
|
||||
THIRD_PARTY_LUA \
|
||||
THIRD_PARTY_LUA_UNIX \
|
||||
|
|
134
third_party/musl/strfmon.c
vendored
Normal file
134
third_party/musl/strfmon.c
vendored
Normal file
|
@ -0,0 +1,134 @@
|
|||
/*-*- mode:c;indent-tabs-mode:t;c-basic-offset:8;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set et ft=c ts=8 tw=8 fenc=utf-8 :vi│
|
||||
╚──────────────────────────────────────────────────────────────────────────────╝
|
||||
│ │
|
||||
│ Musl Libc │
|
||||
│ Copyright © 2005-2014 Rich Felker, et al. │
|
||||
│ │
|
||||
│ Permission is hereby granted, free of charge, to any person obtaining │
|
||||
│ a copy of this software and associated documentation files (the │
|
||||
│ "Software"), to deal in the Software without restriction, including │
|
||||
│ without limitation the rights to use, copy, modify, merge, publish, │
|
||||
│ distribute, sublicense, and/or sell copies of the Software, and to │
|
||||
│ permit persons to whom the Software is furnished to do so, subject to │
|
||||
│ the following conditions: │
|
||||
│ │
|
||||
│ The above copyright notice and this permission notice shall be │
|
||||
│ included in all copies or substantial portions of the Software. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, │
|
||||
│ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF │
|
||||
│ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. │
|
||||
│ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY │
|
||||
│ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, │
|
||||
│ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE │
|
||||
│ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │
|
||||
│ │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/errno.h"
|
||||
#include "libc/fmt/fmt.h"
|
||||
#include "libc/str/locale.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/thread/tls.h"
|
||||
#include "third_party/python/Include/object.h"
|
||||
|
||||
asm(".ident\t\"\\n\\n\
|
||||
Musl libc (MIT License)\\n\
|
||||
Copyright 2005-2014 Rich Felker, et. al.\"");
|
||||
asm(".include \"libc/disclaimer.inc\"");
|
||||
// clang-format off
|
||||
|
||||
static ssize_t vstrfmon_l(char *s, size_t n, locale_t loc, const char *fmt, va_list ap)
|
||||
{
|
||||
size_t l;
|
||||
double x;
|
||||
int fill, nogrp, negpar, nosym, left, intl;
|
||||
int lp, rp, w, fw;
|
||||
char *s0=s;
|
||||
for (; n && *fmt; ) {
|
||||
if (*fmt != '%') {
|
||||
literal:
|
||||
*s++ = *fmt++;
|
||||
n--;
|
||||
continue;
|
||||
}
|
||||
fmt++;
|
||||
if (*fmt == '%') goto literal;
|
||||
|
||||
fill = ' ';
|
||||
nogrp = 0;
|
||||
negpar = 0;
|
||||
nosym = 0;
|
||||
left = 0;
|
||||
for (; ; fmt++) {
|
||||
switch (*fmt) {
|
||||
case '=':
|
||||
fill = *++fmt;
|
||||
continue;
|
||||
case '^':
|
||||
nogrp = 1;
|
||||
continue;
|
||||
case '(':
|
||||
negpar = 1;
|
||||
case '+':
|
||||
continue;
|
||||
case '!':
|
||||
nosym = 1;
|
||||
continue;
|
||||
case '-':
|
||||
left = 1;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
for (fw=0; isdigit(*fmt); fmt++)
|
||||
fw = 10*fw + (*fmt-'0');
|
||||
lp = 0;
|
||||
rp = 2;
|
||||
if (*fmt=='#') for (lp=0, fmt++; isdigit(*fmt); fmt++)
|
||||
lp = 10*lp + (*fmt-'0');
|
||||
if (*fmt=='.') for (rp=0, fmt++; isdigit(*fmt); fmt++)
|
||||
rp = 10*rp + (*fmt-'0');
|
||||
|
||||
intl = *fmt++ == 'i';
|
||||
|
||||
w = lp + 1 + rp;
|
||||
if (!left && fw>w) w = fw;
|
||||
|
||||
x = va_arg(ap, double);
|
||||
l = snprintf(s, n, "%*.*f", w, rp, x);
|
||||
if (l >= n) {
|
||||
errno = E2BIG;
|
||||
return -1;
|
||||
}
|
||||
s += l;
|
||||
n -= l;
|
||||
}
|
||||
return s-s0;
|
||||
}
|
||||
|
||||
ssize_t strfmon_l(char *restrict s, size_t n, locale_t loc, const char *restrict fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
ssize_t ret;
|
||||
|
||||
va_start(ap, fmt);
|
||||
ret = vstrfmon_l(s, n, loc, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
ssize_t strfmon(char *restrict s, size_t n, const char *restrict fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
ssize_t ret;
|
||||
|
||||
va_start(ap, fmt);
|
||||
ret = vstrfmon_l(s, n, (locale_t)__get_tls()->tib_locale, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
return ret;
|
||||
}
|
2
third_party/python/Modules/posixmodule.c
vendored
2
third_party/python/Modules/posixmodule.c
vendored
|
@ -10507,7 +10507,7 @@ os_cpu_count_impl(PyObject *module)
|
|||
/*[clinic end generated code: output=5fc29463c3936a9c input=e7c8f4ba6dbbadd3]*/
|
||||
{
|
||||
int ncpu;
|
||||
ncpu = GetCpuCount();
|
||||
ncpu = _getcpucount();
|
||||
if (ncpu >= 1)
|
||||
return PyLong_FromLong(ncpu);
|
||||
else
|
||||
|
|
2
third_party/unzip/unix.c
vendored
2
third_party/unzip/unix.c
vendored
|
@ -973,7 +973,7 @@ int checkdir(__G__ pathcomp, flag)
|
|||
/* Function mkdir() */
|
||||
/********************/
|
||||
|
||||
int mkdir(path, mode)
|
||||
int mkdir_(path, mode)
|
||||
ZCONST char *path;
|
||||
int mode; /* ignored */
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue