git: 9front

Download patch

ref: 4036cfaed7302890f4cb93503c0b5612e2043e04
parent: a92616172d7bc6e192a5949d952acfd3d357dfef
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Tue Jun 19 08:32:55 EDT 2012

mothra: fix submit fields

--- a/sys/src/cmd/mothra/forms.c
+++ b/sys/src/cmd/mothra/forms.c
@@ -178,7 +178,6 @@
 			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 @@
 	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 @@
 		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 @@
 			}
 		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 @@
 		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 @@
 		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 @@
 			}
 		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 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);
--