Frage zu SpiderMonkey / JS_ConvertArguments [C-Sprache]

#2878001
Lesenswert?

Hallo,
ich übergebe einer selbtgeschriebenen JavaScript-Funktion ein String 
(eigentlich Byte-Array), welcher NICHT nullterminiert ist. D.h. er kann 
auch Null-Bytes im String enthalten.

z.zt. übergebe ich im JS-Code String und Länge
1
arr="1234\0005678";
2
own_func(arr,arr.length)
Im C-Code der Funktion habe ich dann die Länge des Arrays/Strings zur 
Verfügung, da ich ja strlen() nicht verwenden kann.
1
static JSBool own_func(JSContext *cx, JSObject *obj,
2
  uintN argc, jsval *argv, jsval *rval) {
3
const char *str;
4
jsdouble dbl;
5
int len;
6
if (!JS_ConvertArguments(cx, argc, argv, "sd",
7
  &str,&dbl)) return JS_FALSE;
8
len=(int)dbl

Mir gefällt die zusätzliche Längenangabe nicht.
Frage: Gibt es die Möglichkeit auf die Längenangabe im JS-Code zu 
verzichten und Länge des Arrays anders herzubekommen?
Persönliche Seite #2878010
Lesenswert?

Jürgen W. schrieb:
> Mir gefällt die zusätzliche Längenangabe nicht.

Ist aber so.

Solange das ein Array ist, das, wie in Deinem Beispiel, auch Nullen 
enthalten kann, es also nicht den C-String-Konventionen genügt, geht 
es nur mit einer zusätzlichen Längenangabe.

Erst wenn das Array den C-String-Konventionen genügt, also mit einer 
Null terminiert ist, lässt sich auf die Längenangabe verzichten und die 
in C üblichen Stringverarbeitungsfunktionen verwenden -- hier also 
strlen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren