mirror of
https://github.com/janet-lang/janet
synced 2024-12-26 00:10:27 +00:00
Merge branch 'master' into ev
This commit is contained in:
commit
1213990b7d
15
.builds/meson2.yml
Normal file
15
.builds/meson2.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
image: openbsd/latest
|
||||||
|
sources:
|
||||||
|
- https://git.sr.ht/~bakpakin/janet
|
||||||
|
packages:
|
||||||
|
- meson
|
||||||
|
tasks:
|
||||||
|
- build: |
|
||||||
|
cd janet
|
||||||
|
meson setup build --buildtype=release
|
||||||
|
cd build
|
||||||
|
meson configure -Dprf=true
|
||||||
|
ninja
|
||||||
|
ninja test
|
||||||
|
doas ninja install
|
||||||
|
doas jpm --verbose install circlet
|
@ -19,5 +19,4 @@ tasks:
|
|||||||
meson configure -Dint_types=false
|
meson configure -Dint_types=false
|
||||||
meson configure -Dtyped_array=false
|
meson configure -Dtyped_array=false
|
||||||
meson configure -Dreduced_os=true
|
meson configure -Dreduced_os=true
|
||||||
meson configure -Dprf=false
|
|
||||||
ninja # will not pass tests but should build
|
ninja # will not pass tests but should build
|
||||||
|
@ -3,7 +3,16 @@ All notable changes to this project will be documented in this file.
|
|||||||
|
|
||||||
## Unreleased - ???
|
## Unreleased - ???
|
||||||
- Silence warnings in some compilers.
|
- Silence warnings in some compilers.
|
||||||
|
- Update meson build script to fix bug on Debian's version of meson
|
||||||
|
|
||||||
|
## 1.11.3 - 2020-08-03
|
||||||
|
- Add `JANET_HASHSEED` environment variable when `JANET_PRF` is enabled.
|
||||||
|
- Expose `janet_cryptorand` in C API.
|
||||||
|
- Properly initialize PRF in default janet program
|
||||||
- Add `index-of` to core library.
|
- Add `index-of` to core library.
|
||||||
|
- Add `-fPIC` back to core CFLAGS (non-optional when compiling default client with Makefile)
|
||||||
|
- Fix defaults on Windows for ARM
|
||||||
|
- Fix defaults on NetBSD.
|
||||||
|
|
||||||
## 1.11.1 - 2020-07-25
|
## 1.11.1 - 2020-07-25
|
||||||
- Fix jpm and git with multiple git installs on Windows
|
- Fix jpm and git with multiple git installs on Windows
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
[![Appveyor Status](https://ci.appveyor.com/api/projects/status/bjraxrxexmt3sxyv/branch/master?svg=true)](https://ci.appveyor.com/project/bakpakin/janet/branch/master)
|
[![Appveyor Status](https://ci.appveyor.com/api/projects/status/bjraxrxexmt3sxyv/branch/master?svg=true)](https://ci.appveyor.com/project/bakpakin/janet/branch/master)
|
||||||
[![Build Status](https://travis-ci.org/janet-lang/janet.svg?branch=master)](https://travis-ci.org/janet-lang/janet)
|
[![Build Status](https://travis-ci.org/janet-lang/janet.svg?branch=master)](https://travis-ci.org/janet-lang/janet)
|
||||||
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/freebsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/freebsd.yml?)
|
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/commits/freebsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/freebsd.yml?)
|
||||||
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/openbsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/openbsd.yml?)
|
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/commits/openbsd.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/openbsd.yml?)
|
||||||
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/meson.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/meson.yml?)
|
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/commits/meson.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/meson.yml?)
|
||||||
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/meson_min.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/meson_min.yml?)
|
[![builds.sr.ht status](https://builds.sr.ht/~bakpakin/janet/commits/meson_min.yml.svg)](https://builds.sr.ht/~bakpakin/janet/commits/meson_min.yml?)
|
||||||
|
|
||||||
<img src="https://raw.githubusercontent.com/janet-lang/janet/master/assets/janet-w200.png" alt="Janet logo" width=200 align="left">
|
<img src="https://raw.githubusercontent.com/janet-lang/janet/master/assets/janet-w200.png" alt="Janet logo" width=200 align="left">
|
||||||
|
|
||||||
|
@ -168,8 +168,6 @@ call jpm --verbose --test --modpath=. install https://github.com/janet-lang/path
|
|||||||
@if errorlevel 1 goto :TESTINSTALLFAIL
|
@if errorlevel 1 goto :TESTINSTALLFAIL
|
||||||
call jpm --verbose --test --modpath=. install https://github.com/janet-lang/argparse.git
|
call jpm --verbose --test --modpath=. install https://github.com/janet-lang/argparse.git
|
||||||
@if errorlevel 1 goto :TESTINSTALLFAIL
|
@if errorlevel 1 goto :TESTINSTALLFAIL
|
||||||
call jpm --verbose --modpath=. install https://github.com/bakpakin/x43bot.git
|
|
||||||
@if errorlevel 1 goto :TESTINSTALLFAIL
|
|
||||||
popd
|
popd
|
||||||
exit /b 0
|
exit /b 0
|
||||||
|
|
||||||
|
8
janet.1
8
janet.1
@ -213,5 +213,13 @@ find native and source code modules. If no JANET_PATH is set, Janet will look in
|
|||||||
the default location set at compile time.
|
the default location set at compile time.
|
||||||
.RE
|
.RE
|
||||||
|
|
||||||
|
.B JANET_HASHSEED
|
||||||
|
.RS
|
||||||
|
To disable randomization of Janet's PRF on start up, one can set this variable. This can have the
|
||||||
|
effect of making programs deterministic that otherwise would depend on the random seed chosen at program start.
|
||||||
|
This variable does nothing in the default configuration of Janet, as PRF is disabled by default. Also, JANET_REDUCED_OS
|
||||||
|
cannot be defined for this variable to have an effect.
|
||||||
|
.RE
|
||||||
|
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
Written by Calvin Rose <calsrose@gmail.com>
|
Written by Calvin Rose <calsrose@gmail.com>
|
||||||
|
19
jpm
19
jpm
@ -535,6 +535,23 @@
|
|||||||
```
|
```
|
||||||
|
|
||||||
int main(int argc, const char **argv) {
|
int main(int argc, const char **argv) {
|
||||||
|
|
||||||
|
#if defined(JANET_PRF)
|
||||||
|
uint8_t hash_key[JANET_HASH_KEY_SIZE + 1];
|
||||||
|
#ifdef JANET_REDUCED_OS
|
||||||
|
char *envvar = NULL;
|
||||||
|
#else
|
||||||
|
char *envvar = getenv("JANET_HASHSEED");
|
||||||
|
#endif
|
||||||
|
if (NULL != envvar) {
|
||||||
|
strncpy((char *) hash_key, envvar, sizeof(hash_key) - 1);
|
||||||
|
} else if (janet_cryptorand(hash_key, JANET_HASH_KEY_SIZE) != 0) {
|
||||||
|
fputs("unable to initialize janet PRF hash function.\n", stderr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
janet_init_hash_key(hash_key);
|
||||||
|
#endif
|
||||||
|
|
||||||
janet_init();
|
janet_init();
|
||||||
|
|
||||||
/* Get core env */
|
/* Get core env */
|
||||||
@ -761,7 +778,7 @@ int main(int argc, const char **argv) {
|
|||||||
(unless no-deps (do-rule "install-deps"))
|
(unless no-deps (do-rule "install-deps"))
|
||||||
(do-rule "build")
|
(do-rule "build")
|
||||||
(do-rule "install"))
|
(do-rule "install"))
|
||||||
([err] (print "Error building git repository dependency: " err)))
|
([err f] (print "Error building git repository dependency: " err) (propagate err f)))
|
||||||
(os/cd olddir))
|
(os/cd olddir))
|
||||||
|
|
||||||
(defn install-rule
|
(defn install-rule
|
||||||
|
47
meson.build
47
meson.build
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
project('janet', 'c',
|
project('janet', 'c',
|
||||||
default_options : ['c_std=c99', 'b_lundef=false', 'default_library=both'],
|
default_options : ['c_std=c99', 'b_lundef=false', 'default_library=both'],
|
||||||
version : '1.11.1')
|
version : '1.11.4')
|
||||||
|
|
||||||
# Global settings
|
# Global settings
|
||||||
janet_path = join_paths(get_option('prefix'), get_option('libdir'), 'janet')
|
janet_path = join_paths(get_option('prefix'), get_option('libdir'), 'janet')
|
||||||
@ -180,30 +180,28 @@ libjanet = library('janet', janetc,
|
|||||||
|
|
||||||
# Extra c flags - adding -fvisibility=hidden matches the Makefile and
|
# Extra c flags - adding -fvisibility=hidden matches the Makefile and
|
||||||
# shaves off about 10k on linux x64, likely similar on other platforms.
|
# shaves off about 10k on linux x64, likely similar on other platforms.
|
||||||
native_cc = meson.get_compiler('c', native: true)
|
if cc.has_argument('-fvisibility=hidden')
|
||||||
cross_cc = meson.get_compiler('c', native: false)
|
extra_cflags = ['-fvisibility=hidden']
|
||||||
if native_cc.has_argument('-fvisibility=hidden')
|
|
||||||
extra_native_cflags = ['-fvisibility=hidden']
|
|
||||||
else
|
else
|
||||||
extra_native_cflags = []
|
extra_cflags = []
|
||||||
endif
|
endif
|
||||||
if cross_cc.has_argument('-fvisibility=hidden')
|
|
||||||
extra_cross_cflags = ['-fvisibility=hidden']
|
|
||||||
else
|
|
||||||
extra_cross_cflags = []
|
|
||||||
endif
|
|
||||||
|
|
||||||
janet_mainclient = executable('janet', janetc, mainclient_src,
|
janet_mainclient = executable('janet', janetc, mainclient_src,
|
||||||
include_directories : incdir,
|
include_directories : incdir,
|
||||||
dependencies : [m_dep, dl_dep, thread_dep],
|
dependencies : [m_dep, dl_dep, thread_dep],
|
||||||
c_args : extra_native_cflags,
|
c_args : extra_cflags,
|
||||||
install : true)
|
install : true)
|
||||||
|
|
||||||
if meson.is_cross_build()
|
if meson.is_cross_build()
|
||||||
|
native_cc = meson.get_compiler('c', native: true)
|
||||||
|
if native_cc.has_argument('-fvisibility=hidden')
|
||||||
|
extra_native_cflags = ['-fvisibility=hidden']
|
||||||
|
else
|
||||||
|
extra_native_cflags = []
|
||||||
|
endif
|
||||||
janet_nativeclient = executable('janet-native', janetc, mainclient_src,
|
janet_nativeclient = executable('janet-native', janetc, mainclient_src,
|
||||||
include_directories : incdir,
|
include_directories : incdir,
|
||||||
dependencies : [m_dep, dl_dep, thread_dep],
|
dependencies : [m_dep, dl_dep, thread_dep],
|
||||||
c_args : extra_cross_cflags,
|
c_args : extra_native_cflags,
|
||||||
native : true)
|
native : true)
|
||||||
else
|
else
|
||||||
janet_nativeclient = janet_mainclient
|
janet_nativeclient = janet_mainclient
|
||||||
@ -218,16 +216,17 @@ docs = custom_target('docs',
|
|||||||
|
|
||||||
# Tests
|
# Tests
|
||||||
test_files = [
|
test_files = [
|
||||||
'test/suite0.janet',
|
'test/suite0000.janet',
|
||||||
'test/suite1.janet',
|
'test/suite0001.janet',
|
||||||
'test/suite2.janet',
|
'test/suite0002.janet',
|
||||||
'test/suite3.janet',
|
'test/suite0003.janet',
|
||||||
'test/suite4.janet',
|
'test/suite0004.janet',
|
||||||
'test/suite5.janet',
|
'test/suite0005.janet',
|
||||||
'test/suite6.janet',
|
'test/suite0006.janet',
|
||||||
'test/suite7.janet',
|
'test/suite0007.janet',
|
||||||
'test/suite8.janet',
|
'test/suite0008.janet',
|
||||||
'test/suite9.janet'
|
'test/suite0009.janet',
|
||||||
|
'test/suite0010.janet'
|
||||||
]
|
]
|
||||||
foreach t : test_files
|
foreach t : test_files
|
||||||
test(t, janet_nativeclient, args : files([t]), workdir : meson.current_source_dir())
|
test(t, janet_nativeclient, args : files([t]), workdir : meson.current_source_dir())
|
||||||
|
@ -28,9 +28,9 @@
|
|||||||
|
|
||||||
#define JANET_VERSION_MAJOR 1
|
#define JANET_VERSION_MAJOR 1
|
||||||
#define JANET_VERSION_MINOR 11
|
#define JANET_VERSION_MINOR 11
|
||||||
#define JANET_VERSION_PATCH 2
|
#define JANET_VERSION_PATCH 4
|
||||||
#define JANET_VERSION_EXTRA "-dev"
|
#define JANET_VERSION_EXTRA "-dev"
|
||||||
#define JANET_VERSION "1.11.2-dev"
|
#define JANET_VERSION "1.11.4-dev"
|
||||||
|
|
||||||
/* #define JANET_BUILD "local" */
|
/* #define JANET_BUILD "local" */
|
||||||
|
|
||||||
|
@ -282,6 +282,8 @@ static Janet cfun_io_fclose(int32_t argc, Janet *argv) {
|
|||||||
iof->flags |= JANET_FILE_CLOSED;
|
iof->flags |= JANET_FILE_CLOSED;
|
||||||
if (status == -1) janet_panic("could not close file");
|
if (status == -1) janet_panic("could not close file");
|
||||||
return janet_wrap_integer(WEXITSTATUS(status));
|
return janet_wrap_integer(WEXITSTATUS(status));
|
||||||
|
#else
|
||||||
|
return janet_wrap_nil();
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
if (fclose(iof->file)) {
|
if (fclose(iof->file)) {
|
||||||
|
@ -37,8 +37,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#define RETRY_EINTR(RC, CALL) do { (RC) = CALL; } while((RC) < 0 && errno == EINTR)
|
|
||||||
|
|
||||||
#ifdef JANET_APPLE
|
#ifdef JANET_APPLE
|
||||||
#include <AvailabilityMacros.h>
|
#include <AvailabilityMacros.h>
|
||||||
#endif
|
#endif
|
||||||
@ -68,12 +66,6 @@ extern char **environ;
|
|||||||
#include <mach/mach.h>
|
#include <mach/mach.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Setting C99 standard makes this not available, but it should
|
|
||||||
* work/link properly if we detect a BSD */
|
|
||||||
#if defined(JANET_BSD) || defined(MAC_OS_X_VERSION_10_7)
|
|
||||||
void arc4random_buf(void *buf, size_t nbytes);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Not POSIX, but all Unixes but Solaris have this function. */
|
/* Not POSIX, but all Unixes but Solaris have this function. */
|
||||||
#if defined(JANET_POSIX) && !defined(__sun)
|
#if defined(JANET_POSIX) && !defined(__sun)
|
||||||
time_t timegm(struct tm *tm);
|
time_t timegm(struct tm *tm);
|
||||||
@ -557,7 +549,6 @@ static Janet os_cwd(int32_t argc, Janet *argv) {
|
|||||||
|
|
||||||
static Janet os_cryptorand(int32_t argc, Janet *argv) {
|
static Janet os_cryptorand(int32_t argc, Janet *argv) {
|
||||||
JanetBuffer *buffer;
|
JanetBuffer *buffer;
|
||||||
const char *genericerr = "unable to get sufficient random data";
|
|
||||||
janet_arity(argc, 1, 2);
|
janet_arity(argc, 1, 2);
|
||||||
int32_t offset;
|
int32_t offset;
|
||||||
int32_t n = janet_getinteger(argv, 0);
|
int32_t n = janet_getinteger(argv, 0);
|
||||||
@ -572,44 +563,9 @@ static Janet os_cryptorand(int32_t argc, Janet *argv) {
|
|||||||
/* We could optimize here by adding setcount_uninit */
|
/* We could optimize here by adding setcount_uninit */
|
||||||
janet_buffer_setcount(buffer, offset + n);
|
janet_buffer_setcount(buffer, offset + n);
|
||||||
|
|
||||||
#ifdef JANET_WINDOWS
|
if (janet_cryptorand(buffer->data + offset, n) != 0)
|
||||||
for (int32_t i = offset; i < buffer->count; i += sizeof(unsigned int)) {
|
janet_panic("unable to get sufficient random data");
|
||||||
unsigned int v;
|
|
||||||
if (rand_s(&v))
|
|
||||||
janet_panic(genericerr);
|
|
||||||
for (int32_t j = 0; (j < sizeof(unsigned int)) && (i + j < buffer->count); j++) {
|
|
||||||
buffer->data[i + j] = v & 0xff;
|
|
||||||
v = v >> 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#elif defined(JANET_LINUX) || ( defined(JANET_APPLE) && !defined(MAC_OS_X_VERSION_10_7) )
|
|
||||||
/* We should be able to call getrandom on linux, but it doesn't seem
|
|
||||||
to be uniformly supported on linux distros.
|
|
||||||
On Mac, arc4random_buf wasn't available on until 10.7.
|
|
||||||
In these cases, use this fallback path for now... */
|
|
||||||
int rc;
|
|
||||||
int randfd;
|
|
||||||
RETRY_EINTR(randfd, open("/dev/urandom", O_RDONLY | O_CLOEXEC));
|
|
||||||
if (randfd < 0)
|
|
||||||
janet_panic(genericerr);
|
|
||||||
while (n > 0) {
|
|
||||||
ssize_t nread;
|
|
||||||
RETRY_EINTR(nread, read(randfd, buffer->data + offset, n));
|
|
||||||
if (nread <= 0) {
|
|
||||||
RETRY_EINTR(rc, close(randfd));
|
|
||||||
janet_panic(genericerr);
|
|
||||||
}
|
|
||||||
offset += nread;
|
|
||||||
n -= nread;
|
|
||||||
}
|
|
||||||
RETRY_EINTR(rc, close(randfd));
|
|
||||||
#elif defined(JANET_BSD) || defined(MAC_OS_X_VERSION_10_7)
|
|
||||||
(void) genericerr;
|
|
||||||
arc4random_buf(buffer->data + offset, n);
|
|
||||||
#else
|
|
||||||
(void) genericerr;
|
|
||||||
janet_panic("cryptorand currently unsupported on this platform");
|
|
||||||
#endif
|
|
||||||
return janet_wrap_buffer(buffer);
|
return janet_wrap_buffer(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,11 @@
|
|||||||
#include "gc.h"
|
#include "gc.h"
|
||||||
#ifdef JANET_WINDOWS
|
#ifdef JANET_WINDOWS
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -630,3 +635,51 @@ int janet_gettime(struct timespec *spec) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Setting C99 standard makes this not available, but it should
|
||||||
|
* work/link properly if we detect a BSD */
|
||||||
|
#if defined(JANET_BSD) || defined(MAC_OS_X_VERSION_10_7)
|
||||||
|
void arc4random_buf(void *buf, size_t nbytes);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int janet_cryptorand(uint8_t *out, size_t n) {
|
||||||
|
#ifdef JANET_WINDOWS
|
||||||
|
for (size_t i = 0; i < n; i += sizeof(unsigned int)) {
|
||||||
|
unsigned int v;
|
||||||
|
if (rand_s(&v))
|
||||||
|
return -1;
|
||||||
|
for (int32_t j = 0; (j < sizeof(unsigned int)) && (i + j < n); j++) {
|
||||||
|
out[i + j] = v & 0xff;
|
||||||
|
v = v >> 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
#elif defined(JANET_LINUX) || ( defined(JANET_APPLE) && !defined(MAC_OS_X_VERSION_10_7) )
|
||||||
|
/* We should be able to call getrandom on linux, but it doesn't seem
|
||||||
|
to be uniformly supported on linux distros.
|
||||||
|
On Mac, arc4random_buf wasn't available on until 10.7.
|
||||||
|
In these cases, use this fallback path for now... */
|
||||||
|
int rc;
|
||||||
|
int randfd;
|
||||||
|
RETRY_EINTR(randfd, open("/dev/urandom", O_RDONLY | O_CLOEXEC));
|
||||||
|
if (randfd < 0)
|
||||||
|
return -1;
|
||||||
|
while (n > 0) {
|
||||||
|
ssize_t nread;
|
||||||
|
RETRY_EINTR(nread, read(randfd, out, n));
|
||||||
|
if (nread <= 0) {
|
||||||
|
RETRY_EINTR(rc, close(randfd));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
out += nread;
|
||||||
|
n -= nread;
|
||||||
|
}
|
||||||
|
RETRY_EINTR(rc, close(randfd));
|
||||||
|
return 0;
|
||||||
|
#elif defined(JANET_BSD) || defined(MAC_OS_X_VERSION_10_7)
|
||||||
|
arc4random_buf(out, n);
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
return -1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
@ -108,6 +108,8 @@ void janet_core_cfuns(JanetTable *env, const char *regprefix, const JanetReg *cf
|
|||||||
int janet_gettime(struct timespec *spec);
|
int janet_gettime(struct timespec *spec);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define RETRY_EINTR(RC, CALL) do { (RC) = CALL; } while((RC) < 0 && errno == EINTR)
|
||||||
|
|
||||||
/* Initialize builtin libraries */
|
/* Initialize builtin libraries */
|
||||||
void janet_lib_io(JanetTable *env);
|
void janet_lib_io(JanetTable *env);
|
||||||
void janet_lib_math(JanetTable *env);
|
void janet_lib_math(JanetTable *env);
|
||||||
|
@ -1632,6 +1632,8 @@ JANET_API FILE *janet_dynfile(const char *name, FILE *def);
|
|||||||
JANET_API JanetAbstract janet_checkfile(Janet j);
|
JANET_API JanetAbstract janet_checkfile(Janet j);
|
||||||
JANET_API FILE *janet_unwrapfile(Janet j, int32_t *flags);
|
JANET_API FILE *janet_unwrapfile(Janet j, int32_t *flags);
|
||||||
|
|
||||||
|
JANET_API int janet_cryptorand(uint8_t *out, size_t n);
|
||||||
|
|
||||||
/* Marshal API */
|
/* Marshal API */
|
||||||
JANET_API void janet_marshal_size(JanetMarshalContext *ctx, size_t value);
|
JANET_API void janet_marshal_size(JanetMarshalContext *ctx, size_t value);
|
||||||
JANET_API void janet_marshal_int(JanetMarshalContext *ctx, int32_t value);
|
JANET_API void janet_marshal_int(JanetMarshalContext *ctx, int32_t value);
|
||||||
|
@ -1017,6 +1017,23 @@ int main(int argc, char **argv) {
|
|||||||
atexit(norawmode);
|
atexit(norawmode);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(JANET_PRF)
|
||||||
|
uint8_t hash_key[JANET_HASH_KEY_SIZE + 1];
|
||||||
|
#ifdef JANET_REDUCED_OS
|
||||||
|
char *envvar = NULL;
|
||||||
|
#else
|
||||||
|
char *envvar = getenv("JANET_HASHSEED");
|
||||||
|
#endif
|
||||||
|
if (NULL != envvar) {
|
||||||
|
strncpy((char *) hash_key, envvar, sizeof(hash_key) - 1);
|
||||||
|
} else if (janet_cryptorand(hash_key, JANET_HASH_KEY_SIZE) != 0) {
|
||||||
|
fputs("unable to initialize janet PRF hash function.\n", stderr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
janet_init_hash_key(hash_key);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Set up VM */
|
/* Set up VM */
|
||||||
janet_init();
|
janet_init();
|
||||||
|
|
||||||
|
37
test/suite0010.janet
Normal file
37
test/suite0010.janet
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# Copyright (c) 2020 Calvin Rose & contributors
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
(import ./helper :prefix "" :exit true)
|
||||||
|
(start-suite 10)
|
||||||
|
|
||||||
|
# index-of
|
||||||
|
(assert (= nil (index-of 10 [])) "index-of 1")
|
||||||
|
(assert (= nil (index-of 10 [1 2 3])) "index-of 2")
|
||||||
|
(assert (= 1 (index-of 2 [1 2 3])) "index-of 3")
|
||||||
|
(assert (= 0 (index-of :a [:a :b :c])) "index-of 4")
|
||||||
|
(assert (= nil (index-of :a {})) "index-of 5")
|
||||||
|
(assert (= :a (index-of :A {:a :A :b :B})) "index-of 6")
|
||||||
|
(assert (= :a (index-of :A @{:a :A :b :B})) "index-of 7")
|
||||||
|
(assert (= 0 (index-of (chr "a") "abc")) "index-of 8")
|
||||||
|
(assert (= nil (index-of (chr "a") "")) "index-of 9")
|
||||||
|
(assert (= nil (index-of 10 @[])) "index-of 10")
|
||||||
|
(assert (= nil (index-of 10 @[1 2 3])) "index-of 11")
|
||||||
|
|
||||||
|
(end-suite)
|
Loading…
Reference in New Issue
Block a user