Skip to content

Commit 86de039

Browse files
committed
Merge branch 'master' of github.com:janet-lang/janet
2 parents 2360164 + c93ddce commit 86de039

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/core/capi.c

+18-4
Original file line numberDiff line numberDiff line change
@@ -209,14 +209,28 @@ const char *janet_optcstring(const Janet *argv, int32_t argc, int32_t n, const c
209209
#undef DEFINE_OPTLEN
210210

211211
const char *janet_getcstring(const Janet *argv, int32_t n) {
212-
const uint8_t *jstr = janet_getstring(argv, n);
213-
const char *cstr = (const char *)jstr;
214-
if (strlen(cstr) != (size_t) janet_string_length(jstr)) {
215-
janet_panic("string contains embedded 0s");
212+
if (!janet_checktype(argv[n], JANET_STRING)) {
213+
janet_panic_type(argv[n], n, JANET_TFLAG_STRING);
214+
}
215+
return janet_getcbytes(argv, n);
216+
}
217+
218+
const char* janet_getcbytes(const Janet *argv, int32_t n) {
219+
JanetByteView view = janet_getbytes(argv, n);
220+
const char *cstr = (const char *)view.bytes;
221+
if (strlen(cstr) != (size_t) view.len) {
222+
janet_panic("bytes contain embedded 0s");
216223
}
217224
return cstr;
218225
}
219226

227+
const char *janet_optcbytes(const Janet *argv, int32_t argc, int32_t n, const char *dflt) {
228+
if (n >= argc || janet_checktype(argv[n], JANET_NIL)) {
229+
return dflt;
230+
}
231+
return janet_getcbytes(argv, n);
232+
}
233+
220234
int32_t janet_getnat(const Janet *argv, int32_t n) {
221235
Janet x = argv[n];
222236
if (!janet_checkint(x)) goto bad;

src/include/janet.h

+2
Original file line numberDiff line numberDiff line change
@@ -1968,6 +1968,7 @@ JANET_API JanetTable *janet_gettable(const Janet *argv, int32_t n);
19681968
JANET_API JanetStruct janet_getstruct(const Janet *argv, int32_t n);
19691969
JANET_API JanetString janet_getstring(const Janet *argv, int32_t n);
19701970
JANET_API const char *janet_getcstring(const Janet *argv, int32_t n);
1971+
JANET_API const char *janet_getcbytes(const Janet *argv, int32_t n);
19711972
JANET_API JanetSymbol janet_getsymbol(const Janet *argv, int32_t n);
19721973
JANET_API JanetKeyword janet_getkeyword(const Janet *argv, int32_t n);
19731974
JANET_API JanetBuffer *janet_getbuffer(const Janet *argv, int32_t n);
@@ -1997,6 +1998,7 @@ JANET_API JanetTuple janet_opttuple(const Janet *argv, int32_t argc, int32_t n,
19971998
JANET_API JanetStruct janet_optstruct(const Janet *argv, int32_t argc, int32_t n, JanetStruct dflt);
19981999
JANET_API JanetString janet_optstring(const Janet *argv, int32_t argc, int32_t n, JanetString dflt);
19992000
JANET_API const char *janet_optcstring(const Janet *argv, int32_t argc, int32_t n, const char *dflt);
2001+
JANET_API const char *janet_optcbytes(const Janet *argv, int32_t argc, int32_t n, const char *dflt);
20002002
JANET_API JanetSymbol janet_optsymbol(const Janet *argv, int32_t argc, int32_t n, JanetString dflt);
20012003
JANET_API JanetKeyword janet_optkeyword(const Janet *argv, int32_t argc, int32_t n, JanetString dflt);
20022004
JANET_API JanetFiber *janet_optfiber(const Janet *argv, int32_t argc, int32_t n, JanetFiber *dflt);

0 commit comments

Comments
 (0)