mirror of
https://github.com/janet-lang/janet
synced 2024-12-27 17:00:27 +00:00
Merge branch 'master' into threads-3
This commit is contained in:
commit
8368e55151
@ -437,7 +437,7 @@ static Janet cfun_io_eprin(int32_t argc, Janet *argv) {
|
|||||||
return cfun_io_print_impl(argc, argv, 0, "err", stderr);
|
return cfun_io_print_impl(argc, argv, 0, "err", stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Janet cfun_io_printf_impl(int32_t argc, Janet *argv,
|
static Janet cfun_io_printf_impl(int32_t argc, Janet *argv, int newline,
|
||||||
const char *name, FILE *dflt_file) {
|
const char *name, FILE *dflt_file) {
|
||||||
FILE *f;
|
FILE *f;
|
||||||
janet_arity(argc, 1, -1);
|
janet_arity(argc, 1, -1);
|
||||||
@ -451,6 +451,7 @@ static Janet cfun_io_printf_impl(int32_t argc, Janet *argv,
|
|||||||
/* Special case buffer */
|
/* Special case buffer */
|
||||||
JanetBuffer *buf = janet_unwrap_buffer(x);
|
JanetBuffer *buf = janet_unwrap_buffer(x);
|
||||||
janet_buffer_format(buf, fmt, 0, argc, argv);
|
janet_buffer_format(buf, fmt, 0, argc, argv);
|
||||||
|
if (newline) janet_buffer_push_u8(buf, '\n');
|
||||||
return janet_wrap_nil();
|
return janet_wrap_nil();
|
||||||
}
|
}
|
||||||
case JANET_NIL:
|
case JANET_NIL:
|
||||||
@ -467,6 +468,7 @@ static Janet cfun_io_printf_impl(int32_t argc, Janet *argv,
|
|||||||
}
|
}
|
||||||
JanetBuffer *buf = janet_buffer(10);
|
JanetBuffer *buf = janet_buffer(10);
|
||||||
janet_buffer_format(buf, fmt, 0, argc, argv);
|
janet_buffer_format(buf, fmt, 0, argc, argv);
|
||||||
|
if (newline) janet_buffer_push_u8(buf, '\n');
|
||||||
if (buf->count) {
|
if (buf->count) {
|
||||||
if (1 != fwrite(buf->data, buf->count, 1, f)) {
|
if (1 != fwrite(buf->data, buf->count, 1, f)) {
|
||||||
janet_panicf("could not print %d bytes to file", buf->count, name);
|
janet_panicf("could not print %d bytes to file", buf->count, name);
|
||||||
@ -481,11 +483,19 @@ static Janet cfun_io_printf_impl(int32_t argc, Janet *argv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Janet cfun_io_printf(int32_t argc, Janet *argv) {
|
static Janet cfun_io_printf(int32_t argc, Janet *argv) {
|
||||||
return cfun_io_printf_impl(argc, argv, "out", stdout);
|
return cfun_io_printf_impl(argc, argv, 1, "out", stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Janet cfun_io_prinf(int32_t argc, Janet *argv) {
|
||||||
|
return cfun_io_printf_impl(argc, argv, 0, "out", stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Janet cfun_io_eprintf(int32_t argc, Janet *argv) {
|
static Janet cfun_io_eprintf(int32_t argc, Janet *argv) {
|
||||||
return cfun_io_printf_impl(argc, argv, "err", stderr);
|
return cfun_io_printf_impl(argc, argv, 1, "err", stderr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Janet cfun_io_eprinf(int32_t argc, Janet *argv) {
|
||||||
|
return cfun_io_printf_impl(argc, argv, 0, "err", stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void janet_dynprintf(const char *name, FILE *dflt_file, const char *format, ...) {
|
void janet_dynprintf(const char *name, FILE *dflt_file, const char *format, ...) {
|
||||||
@ -542,7 +552,12 @@ static const JanetReg io_cfuns[] = {
|
|||||||
{
|
{
|
||||||
"printf", cfun_io_printf,
|
"printf", cfun_io_printf,
|
||||||
JDOC("(printf fmt & xs)\n\n"
|
JDOC("(printf fmt & xs)\n\n"
|
||||||
"Prints output formatted as if with (string/format fmt ;xs) to (dyn :out stdout).")
|
"Prints output formatted as if with (string/format fmt ;xs) to (dyn :out stdout) with a trailing newline.")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"prinf", cfun_io_prinf,
|
||||||
|
JDOC("(prinf fmt & xs)\n\n"
|
||||||
|
"Like printf but with no trailing newline.")
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"eprin", cfun_io_eprin,
|
"eprin", cfun_io_eprin,
|
||||||
@ -557,7 +572,12 @@ static const JanetReg io_cfuns[] = {
|
|||||||
{
|
{
|
||||||
"eprintf", cfun_io_eprintf,
|
"eprintf", cfun_io_eprintf,
|
||||||
JDOC("(eprintf fmt & xs)\n\n"
|
JDOC("(eprintf fmt & xs)\n\n"
|
||||||
"Prints output formatted as if with (string/format fmt ;xs) to (dyn :err stderr).")
|
"Prints output formatted as if with (string/format fmt ;xs) to (dyn :err stderr) with a trailing newline.")
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"eprinf", cfun_io_eprinf,
|
||||||
|
JDOC("(eprinf fmt & xs)\n\n"
|
||||||
|
"Like eprintf but with no trailing newline.")
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file/open", cfun_io_fopen,
|
"file/open", cfun_io_fopen,
|
||||||
|
@ -375,18 +375,18 @@ static Janet os_shell(int32_t argc, Janet *argv) {
|
|||||||
static Janet os_environ(int32_t argc, Janet *argv) {
|
static Janet os_environ(int32_t argc, Janet *argv) {
|
||||||
(void) argv;
|
(void) argv;
|
||||||
janet_fixarity(argc, 0);
|
janet_fixarity(argc, 0);
|
||||||
size_t nenv = 0;
|
int32_t nenv = 0;
|
||||||
char **env = environ;
|
char **env = environ;
|
||||||
while (*env++)
|
while (*env++)
|
||||||
nenv += 1;
|
nenv += 1;
|
||||||
JanetTable *t = janet_table(nenv);
|
JanetTable *t = janet_table(nenv);
|
||||||
for (size_t i = 0; i < nenv; i++) {
|
for (int32_t i = 0; i < nenv; i++) {
|
||||||
char *e = environ[i];
|
char *e = environ[i];
|
||||||
char *eq = strchr(e, '=');
|
char *eq = strchr(e, '=');
|
||||||
if (!eq) janet_panic("no '=' in environ");
|
if (!eq) janet_panic("no '=' in environ");
|
||||||
char *v = eq + 1;
|
char *v = eq + 1;
|
||||||
size_t full_len = strlen(e);
|
int32_t full_len = (int32_t) strlen(e);
|
||||||
size_t val_len = strlen(v);
|
int32_t val_len = (int32_t) strlen(v);
|
||||||
janet_table_put(
|
janet_table_put(
|
||||||
t,
|
t,
|
||||||
janet_stringv((const uint8_t *)e, full_len - val_len - 1),
|
janet_stringv((const uint8_t *)e, full_len - val_len - 1),
|
||||||
|
Loading…
Reference in New Issue
Block a user