git: 9front

Download patch

ref: 7a43f27b2a0c19c52f9245d244bf26f566a834c6
parent: 1c0dc31af5cef7754824de665a6de4c80636ddc3
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Tue Jun 18 18:02:07 EDT 2013

devshr: fix wstat, style

- same problem with wstat, if we error then owner has been already updated...
- avoid smalloc while holding qlock in wstat, do it before
- pikeshedd style...

--- a/sys/src/9/port/devshr.c
+++ b/sys/src/9/port/devshr.c
@@ -89,7 +89,7 @@
 {
 	if(decref(mpt))
 		return;
-	if(mpt->m.to)
+	if(mpt->m.to != nil)
 		cclose(mpt->m.to);
 	free(mpt->name);
 	free(mpt->owner);
@@ -148,9 +148,9 @@
 	nc = devclone(c);
 	sch = smalloc(sizeof(*sch));
 	memmove(sch, och, sizeof(*sch));
-	if(sch->shr)
+	if(sch->shr != nil)
 		incref(sch->shr);
-	if(sch->mpt)
+	if(sch->mpt != nil)
 		incref(sch->mpt);
 	sch->chan = nc;
 	nc->aux = sch;
@@ -165,9 +165,9 @@
 	sch = tosch(c);
 	c->aux = nil;
 	sch->chan = nil;
-	if(sch->mpt)
+	if(sch->mpt != nil)
 		putmpt(sch->mpt);
-	if(sch->shr)
+	if(sch->shr != nil)
 		putshr(sch->shr);
 	free(sch);	
 }
@@ -226,7 +226,7 @@
 			sch->shr = nil;
 		} else if(sch->level == Qcroot || sch->level == Qroot) {
 			qlock(&shrslk);
-			for(shr = shrs; shr; shr = shr->next)
+			for(shr = shrs; shr != nil; shr = shr->next)
 				if(strcmp(nam, shr->name) == 0){
 					incref(shr);
 					break;
@@ -242,7 +242,7 @@
 			shr = sch->shr;
 			h = &shr->umh;
 			rlock(&h->lock);
-			for(m = h->mount; m; m = m->next){
+			for(m = h->mount; m != nil; m = m->next){
 				mpt = tompt(m);
 				if(strcmp(nam, mpt->name) == 0){
 					incref(mpt);
@@ -259,7 +259,7 @@
 			h = &shr->umh;
 			wq2 = nil;
 			rlock(&h->lock);
-			for(m = h->mount; m && wq2 == nil; m = m->next){
+			for(m = h->mount; m != nil && wq2 == nil; m = m->next){
 				if(m->to == nil)
 					continue;
 				if(waserror())
@@ -302,7 +302,7 @@
 	case Qroot:
 	case Qcroot:
 		qlock(&shrslk);
-		for(shr = shrs; shr && s; shr = shr->next)
+		for(shr = shrs; shr != nil && s > 0; shr = shr->next)
 			s--;
 		if(shr == nil){
 			qunlock(&shrslk);
@@ -321,7 +321,7 @@
 		shr = sch->shr;
 		h = &shr->umh;
 		rlock(&h->lock);
-		for(m = h->mount; m && s; m = m->next)
+		for(m = h->mount; m != nil && s > 0; m = m->next)
 			s--;
 		if(m == nil){
 			runlock(&h->lock);
@@ -469,7 +469,7 @@
 			qunlock(&shrslk);
 			nexterror();
 		}
-		for(shr = shrs; shr; shr = shr->next)
+		for(shr = shrs; shr != nil; shr = shr->next)
 			if(strcmp(name, shr->name) == 0)
 				error(Eexist);
 
@@ -494,7 +494,7 @@
 	case Qcshr:
 		if(up->pgrp->noattach)
 			error(Enoattach);
-		if((perm & DMDIR) || openmode(omode) != OWRITE)
+		if((perm & DMDIR) != 0 || openmode(omode) != OWRITE)
 			error(Eperm);
 
 		shr = sch->shr;
@@ -511,7 +511,7 @@
 			wunlock(&h->lock);
 			nexterror();
 		}
-		for(m = h->mount; m; m = m->next){
+		for(m = h->mount; m != nil; m = m->next){
 			mpt = tompt(m);
 			if(strcmp(name, mpt->name) == 0)
 				error(Eexist);
@@ -574,13 +574,13 @@
 		h = &shr->umh;
 		qlock(&shrslk);
 		rlock(&h->lock);
-		if(h->mount){
+		if(h->mount != nil){
 			runlock(&h->lock);
 			qunlock(&shrslk);
 			error("directory not empty");
 		}
 		runlock(&h->lock);
-		for(sl = &shrs; *sl; sl = &((*sl)->next))
+		for(sl = &shrs; *sl != nil; sl = &((*sl)->next))
 			if(*sl == shr){
 				*sl = shr->next;
 				shr->next = nil;
@@ -594,7 +594,7 @@
 		m = &mpt->m;
 		h = &shr->umh;
 		wlock(&h->lock);
-		for(ml = &h->mount; *ml; ml = &((*ml)->next))
+		for(ml = &h->mount; *ml != nil; ml = &((*ml)->next))
 			if(*ml == m){
 				*ml = m->next;
 				m->next = nil;
@@ -618,6 +618,15 @@
 	Ent *ent;
 	Dir d;
 
+	strs = smalloc(n);
+	if(waserror()){
+		free(strs);
+		nexterror();
+	}
+	n = convM2D(dp, n, &d, strs);
+	if(n == 0)
+		error(Eshortstat);
+
 	h = nil;
 	sch = tosch(c);
 	switch(sch->level){
@@ -645,19 +654,9 @@
 	if(strcmp(ent->owner, up->user) && !iseve())
 		error(Eperm);
 
-	strs = smalloc(n);
-	if(waserror()){
-		free(strs);
-		nexterror();
-	}
-	n = convM2D(dp, n, &d, strs);
-	if(n == 0)
-		error(Eshortstat);
 	if(d.mode != ~0UL)
 		ent->perm = d.mode & 0777;
-	if(d.uid && *d.uid)
-		kstrdup(&ent->owner, d.uid);
-	if(d.name && *d.name && strcmp(ent->name, d.name) != 0) {
+	if(d.name != nil && *d.name && strcmp(ent->name, d.name) != 0) {
 		if(strchr(d.name, '/') != nil)
 			error(Ebadchar);
 		if(strlen(d.name) >= sizeof(up->genbuf))
@@ -664,8 +663,8 @@
 			error(Etoolong);
 		kstrdup(&ent->name, d.name);
 	}
-	poperror();
-	free(strs);
+	if(d.uid != nil && *d.uid)
+		kstrdup(&ent->owner, d.uid);
 
 	switch(sch->level){
 	case Qcshr:
@@ -677,6 +676,10 @@
 		wunlock(&h->lock);
 		break;
 	}
+
+	poperror();
+	free(strs);
+
 	return n;
 }
 
@@ -771,7 +774,7 @@
 	m->to = c0;
 	wunlock(&h->lock);
 
-	if(bc)
+	if(bc != nil)
 		cclose(bc);
 
 	return n;
@@ -810,7 +813,7 @@
 static void
 chowner(Ent *ent, char *old, char *new)
 {
-	if(ent->owner!=nil && strcmp(old, ent->owner)==0)
+	if(ent->owner != nil && strcmp(old, ent->owner) == 0)
 		kstrdup(&ent->owner, new);
 }
 
@@ -821,9 +824,9 @@
 	Mount *m;
 
 	qlock(&shrslk);
-	for(shr = shrs; shr; shr = shr->next){
+	for(shr = shrs; shr != nil; shr = shr->next){
 		wlock(&shr->umh.lock);
-		for(m = shr->umh.mount; m; m = m->next)
+		for(m = shr->umh.mount; m != nil; m = m->next)
 			chowner(tompt(m), old, new);
 		wunlock(&shr->umh.lock);
 		chowner(shr, old, new);
--