char* naStr_data(naRef s)
{
if(!IS_STR(s)) return 0;
- return s.ref.ptr.str->data;
+ return (char*)s.ref.ptr.str->data;
}
static void setlen(struct naStr* s, int sz)
s->data[sz] = 0; // nul terminate
}
+naRef naStr_buf(naRef dst, int len)
+{
+ setlen(dst.ref.ptr.str, len);
+ naBZero(dst.ref.ptr.str->data, len);
+ return dst;
+}
+
naRef naStr_fromdata(naRef dst, char* data, int len)
{
if(!IS_STR(dst)) return naNil();
int naStr_parsenum(char* str, int len, double* result)
{
- return tonum(str, len, result);
+ return tonum((unsigned char*)str, len, result);
}
int naStr_tonum(naRef str, double* out)
if(len == 1 && s[0] == '.')
return 0;
+ // Strip off the leading negative sign first, so we can correctly
+ // parse things like -.xxx which would otherwise confuse
+ // readsigned.
+ if(len > 1 && s[0] == '-' && s[1] != '-') {
+ sgn = -1; s++; len--;
+ }
+
// Read the integer part
i = readsigned(s, len, i, &val);
if(val < 0) { sgn = -1; val = -val; }