if take address of local, move to heap.
heuristic to not print bogus strings.
fix one error message format.
R=ken
OCL=23849
CL=23851
diff --git a/src/runtime/string.c b/src/runtime/string.c
index b31e7cc..e708d02 100644
--- a/src/runtime/string.c
+++ b/src/runtime/string.c
@@ -17,6 +17,20 @@
return l;
}
+int32 maxstring;
+
+string
+gostringsize(int32 l)
+{
+ string s;
+
+ s = mal(sizeof(s->len)+l+1);
+ s->len = l;
+ if(l > maxstring)
+ maxstring = l;
+ return s;
+}
+
string
gostring(byte *str)
{
@@ -24,8 +38,7 @@
string s;
l = findnull(str);
- s = mal(sizeof(s->len)+l+1);
- s->len = l;
+ s = gostringsize(l);
mcpy(s->str, str, l+1);
return s;
}
@@ -46,8 +59,7 @@
l = s1->len + s2->len;
- s3 = mal(sizeof(s3->len)+l);
- s3->len = l;
+ s3 = gostringsize(l);
mcpy(s3->str, s1->str, s1->len);
mcpy(s3->str+s1->len, s2->str, s2->len);
@@ -139,8 +151,7 @@
}
l = hindex-lindex;
- so = mal(sizeof(so->len)+l);
- so->len = l;
+ so = gostringsize(l);
mcpy(so->str, si->str+lindex, l);
FLUSH(&so);
}
@@ -164,7 +175,7 @@
void
sys·intstring(int64 v, string s)
{
- s = mal(sizeof(s->len)+8);
+ s = gostringsize(8);
s->len = runetochar(s->str, v);
FLUSH(&s);
}
@@ -172,8 +183,7 @@
void
sys·byteastring(byte *a, int32 l, string s)
{
- s = mal(sizeof(s->len)+l);
- s->len = l;
+ s = gostringsize(l);
mcpy(s->str, a, l);
FLUSH(&s);
}
@@ -181,8 +191,7 @@
void
sys·arraystring(Array b, string s)
{
- s = mal(sizeof(s->len)+b.nel);
- s->len = b.nel;
+ s = gostringsize(b.nel);
mcpy(s->str, b.array, s->len);
FLUSH(&s);
}