fix core text and map ownership
This commit is contained in:
24
str.c
24
str.c
@@ -1,11 +1,6 @@
|
||||
#include "dat.h"
|
||||
#include "fn.h"
|
||||
|
||||
enum
|
||||
{
|
||||
Maxrunes = nelem(((Str*)0)->r),
|
||||
};
|
||||
|
||||
void
|
||||
sinit(Str *s, char *src, int n)
|
||||
{
|
||||
@@ -13,7 +8,11 @@ sinit(Str *s, char *src, int n)
|
||||
|
||||
s->n = 0;
|
||||
while(n > 0 && s->n < Maxrunes){
|
||||
if(!fullrune(src, n))
|
||||
break;
|
||||
len = chartorune(&s->r[s->n], src);
|
||||
if(len > n)
|
||||
break;
|
||||
s->n++;
|
||||
src += len;
|
||||
n -= len;
|
||||
@@ -44,9 +43,10 @@ spopr(Str *s)
|
||||
void
|
||||
sappend(Str *dst, Str *src)
|
||||
{
|
||||
int i;
|
||||
int i, n;
|
||||
|
||||
for(i = 0; i < src->n && dst->n < Maxrunes; i++)
|
||||
n = src->n;
|
||||
for(i = 0; i < n && dst->n < Maxrunes; i++)
|
||||
dst->r[dst->n++] = src->r[i];
|
||||
}
|
||||
|
||||
@@ -66,11 +66,17 @@ scmp(Str *a, Str *b)
|
||||
int
|
||||
stoutf(Str *s, char *buf, int sz)
|
||||
{
|
||||
char tmp[UTFmax];
|
||||
int i, n, len;
|
||||
|
||||
if(sz <= 0)
|
||||
return 0;
|
||||
n = 0;
|
||||
for(i = 0; i < s->n && n < sz - UTFmax; i++){
|
||||
len = runetochar(buf + n, &s->r[i]);
|
||||
for(i = 0; i < s->n; i++){
|
||||
len = runetochar(tmp, &s->r[i]);
|
||||
if(len > sz - n - 1)
|
||||
break;
|
||||
memmove(buf + n, tmp, len);
|
||||
n += len;
|
||||
}
|
||||
buf[n] = '\0';
|
||||
|
||||
Reference in New Issue
Block a user