ref: b3a8b43fb3cfdc518b9064dcb287b6875b990203
parent: 711d0a33b84330f0752c666538863b58916a1187
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Tue Apr 3 15:03:44 EDT 2012
mothra: <base> tag, nstrcpy
--- a/sys/src/cmd/mothra/getpix.c
+++ b/sys/src/cmd/mothra/getpix.c
@@ -76,7 +76,7 @@
}
close(fd);
p = emallocz(sizeof(Pix), 1);
- strncpy(p->name, ap->image, sizeof(p->name));
+ nstrcpy(p->name, ap->image, sizeof(p->name));
p->b=b;
p->width=ap->width;
p->height=ap->height;
--- a/sys/src/cmd/mothra/mothra.c
+++ b/sys/src/cmd/mothra/mothra.c
@@ -473,6 +473,10 @@
setmalloctag(v, getcallerpc(&n));
return v;
}
+void nstrcpy(char *to, char *from, int len){+ strncpy(to, from, len);
+ to[len-1] = 0;
+}
char *genwww(Panel *, int index){static char buf[1024];
@@ -798,7 +802,7 @@
url->tag[0] = 0;
if(x = strrchr(url->fullname, '#')){*x++ = 0;
- strncpy(url->tag, x, sizeof(url->tag));
+ nstrcpy(url->tag, x, sizeof(url->tag));
}
fd = open(cleanname(url->fullname), OREAD);
if(fd < 0)
@@ -905,9 +909,7 @@
urlstr(Url *url){if(url->fullname[0])
return url->fullname;
- if(url->reltext[0])
- return url->reltext;
- return nil;
+ return url->reltext;
}
void selurl(char *urlname){static Url url;
@@ -916,8 +918,8 @@
message("selected: %s", urlstr(selection));}
void seturl(Url *url, char *urlname, char *base){- strncpy(url->reltext, urlname, sizeof(url->reltext));
- strncpy(url->basename, base, sizeof(url->basename));
+ nstrcpy(url->reltext, urlname, sizeof(url->reltext));
+ nstrcpy(url->basename, base, sizeof(url->basename));
url->fullname[0] = 0;
url->tag[0] = 0;
url->map = 0;
@@ -1120,7 +1122,7 @@
int n, len, fd;
if((fd=open("/dev/snarf", OREAD))<0)return;
- strncpy(buf, plentryval(p), sizeof(buf));
+ nstrcpy(buf, plentryval(p), sizeof(buf));
len=strlen(buf);
n=read(fd, buf+len, sizeof(buf)-len-1);
if(n>0){--- a/sys/src/cmd/mothra/mothra.h
+++ b/sys/src/cmd/mothra/mothra.h
@@ -93,6 +93,7 @@
void getfonts(void);
void *emalloc(int);
void *emallocz(int, int);
+void nstrcpy(char *to, char *from, int len);
void freeform(void *p);
void message(char *, ...);
int snooptype(int fd);
--- a/sys/src/cmd/mothra/rdhtml.c
+++ b/sys/src/cmd/mothra/rdhtml.c
@@ -613,7 +613,7 @@
g.etext=g.text+NTITLE-1;
g.spacc=0;
g.form=0;
- strncpy(g.text, name, NTITLE);
+ nstrcpy(g.text, name, NTITLE);
plaintext(&g);
finish(dst);
}
@@ -675,10 +675,10 @@
if(str=pl_getattr(g.attr, "id")){char swap[NNAME];
- strncpy(swap, g.state->name, sizeof(swap));
- strncpy(g.state->name, str, sizeof(g.state->name));
+ nstrcpy(swap, g.state->name, sizeof(swap));
+ nstrcpy(g.state->name, str, sizeof(g.state->name));
pl_htmloutput(&g, 0, "", 0);
- strncpy(g.state->name, swap, sizeof(g.state->name));
+ nstrcpy(g.state->name, swap, sizeof(g.state->name));
}
switch(g.tag){default:
@@ -689,7 +689,7 @@
break;
case Tag_img:
if(str=pl_getattr(g.attr, "src"))
- strncpy(g.state->image, str, sizeof(g.state->image));
+ nstrcpy(g.state->image, str, sizeof(g.state->image));
g.state->ismap=pl_hasattr(g.attr, "ismap");
if(str=pl_getattr(g.attr, "width"))
g.state->width = strtolength(&g, HORIZ, str);
@@ -725,11 +725,15 @@
case Tag_td:
g.spacc++;
break;
+ case Tag_base:
+ if(str=pl_getattr(g.attr, "href"))
+ nstrcpy(g.dst->url->fullname, str, sizeof(g.dst->url->fullname));
+ break;
case Tag_a:
if(str=pl_getattr(g.attr, "href"))
- strncpy(g.state->link, str, sizeof(g.state->link));
+ nstrcpy(g.state->link, str, sizeof(g.state->link));
if(str=pl_getattr(g.attr, "name")){- strncpy(g.state->name, str, sizeof(g.state->name));
+ nstrcpy(g.state->name, str, sizeof(g.state->name));
pl_htmloutput(&g, 0, "", 0);
}
break;
@@ -757,9 +761,9 @@
case Tag_frame:
case Tag_iframe:
if(str=pl_getattr(g.attr, "src"))
- strncpy(g.state->link, str, sizeof(g.state->link));
+ nstrcpy(g.state->link, str, sizeof(g.state->link));
if(str=pl_getattr(g.attr, "name"))
- strncpy(g.state->name, str, sizeof(g.state->name));
+ nstrcpy(g.state->name, str, sizeof(g.state->name));
else
str = g.state->link;
pl_htmloutput(&g, 0, tag[g.tag].name, 0);
@@ -1060,7 +1064,7 @@
break;
case TEXT:
if(g.state->link[0]==0 && (str = linkify(g.token))){- strncpy(g.state->link, str, sizeof(g.state->link));
+ nstrcpy(g.state->link, str, sizeof(g.state->link));
pl_htmloutput(&g, g.nsp, g.token, 0);
g.state->link[0] = 0;
free(str);
--
⑨