summaryrefslogtreecommitdiff
path: root/sys/src/cmd/mothra/forms.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-06-19 12:32:55 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-06-19 12:32:55 +0200
commit89efb07d4fb901c1129a455b09335d671efe871c (patch)
tree9a983892853abec6e445d390308b25177f41d44f /sys/src/cmd/mothra/forms.c
parentccb34127656d7bd70be56710c26645628527bf0c (diff)
mothra: fix submit fields
Diffstat (limited to 'sys/src/cmd/mothra/forms.c')
-rw-r--r--sys/src/cmd/mothra/forms.c41
1 files changed, 25 insertions, 16 deletions
diff --git a/sys/src/cmd/mothra/forms.c b/sys/src/cmd/mothra/forms.c
index 885de18ac..5c9b71f23 100644
--- a/sys/src/cmd/mothra/forms.c
+++ b/sys/src/cmd/mothra/forms.c
@@ -178,7 +178,6 @@ void rdform(Hglob *g){
f->type=TYPEIN;
if(cistrcmp(s, "password")==0)
f->type=PASSWD;
-
s=f->name;
if(s && cistrcmp(s, "isindex")==0)
f->type=INDEX;
@@ -440,6 +439,13 @@ void h_resetinput(Panel *p, int){
case PASSWD:
plinitentry(f->p, USERFL, f->size*chrwidth, f->value, 0);
break;
+ case FILE:
+ free(f->value);
+ f->value=strdup("");
+ if(f->p==nil) break;
+ f->p->state=0;
+ pldraw(f->p, screen);
+ break;
case CHECK:
case RADIO:
f->state=f->checked;
@@ -506,17 +512,17 @@ void mencodeform(Form *form, int fd){
break;
case CHECK:
case RADIO:
+ case SUBMIT:
if(!f->state) break;
case HIDDEN:
if(f->name==0 || f->value==0)
- continue;
+ break;
fprint(fd, "%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n%s",
sep, f->name, f->value);
sep = "\r\n--" BOUNDARY;
break;
case SELECT:
- if(f->name==0)
- continue;
+ if(f->name==0) break;
for(o=f->options;o;o=o->next)
if(o->selected && o->value){
fprint(fd, "%s\r\nContent-Disposition: form-data; name=\"%s\"\r\n\r\n%s",
@@ -525,13 +531,12 @@ void mencodeform(Form *form, int fd){
}
break;
case TEXTWIN:
- if(f->name==0)
- continue;
+ if(f->name==0) break;
n=plelen(f->textwin);
rp=pleget(f->textwin);
p=b=malloc(UTFmax*n+1);
if(b == nil)
- continue;
+ break;
while(n > 0){
p += runetochar(p, rp);
rp++;
@@ -545,13 +550,13 @@ void mencodeform(Form *form, int fd){
break;
case FILE:
if(f->name==0 || f->value[0]==0)
- continue;
+ break;
if(p = strrchr(f->value, '/'))
p++;
if(p == 0 || *p == 0)
p = f->value;
if((b = malloc(nb = 8192)) == nil)
- continue;
+ break;
if((ifd = open(f->value, OREAD)) >= 0){
if(filetype(ifd, b, nb) < 0)
strcpy(b, "application/octet-stream");
@@ -589,16 +594,16 @@ void uencodeform(Form *form, int fd){
break;
case CHECK:
case RADIO:
+ case SUBMIT:
if(!f->state) break;
case HIDDEN:
if(f->name==0 || f->value==0)
- continue;
+ break;
fprint(fd, "%s%U=%U", sep, f->name, f->value);
sep = "&";
break;
case SELECT:
- if(f->name==0)
- continue;
+ if(f->name==0) break;
for(o=f->options;o;o=o->next)
if(o->selected && o->value){
fprint(fd, "%s%U=%U", sep, f->name, o->value);
@@ -606,13 +611,12 @@ void uencodeform(Form *form, int fd){
}
break;
case TEXTWIN:
- if(f->name==0)
- continue;
+ if(f->name==0) break;
n=plelen(f->textwin);
rp=pleget(f->textwin);
p=b=malloc(UTFmax*n+1);
if(b == nil)
- continue;
+ break;
while(n > 0){
p += runetochar(p, rp);
rp++;
@@ -629,9 +633,14 @@ void uencodeform(Form *form, int fd){
void h_submitinput(Panel *p, int){
char buf[NNAME];
Form *form;
+ Field *f;
int n, fd;
- form=((Field *)p->userp)->form;
+ f = p->userp;
+ form=f->form;
+ for(f=form->fields;f;f=f->next)
+ if(f->type==SUBMIT)
+ f->state = (f->p == p);
if(form->method==GET){
strcpy(buf, "/tmp/mfXXXXXXXXXXX");
fd = create(mktemp(buf), ORDWR|ORCLOSE, 0600);