fix core text and map ownership

This commit is contained in:
2026-08-11 19:32:58 +09:00
parent b63122dd14
commit e70278a3d2
6 changed files with 99 additions and 31 deletions

24
str.c
View File

@@ -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';