git: plan9front

Download patch

ref: 260fcc61c01b32c7b878063ca9dd7c9a118981bf
parent: 577d31ab137f300e8b6fcb25bbb206777fb8d557
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Thu Jan 12 10:15:25 EST 2012

fix wrong use of qid.type == QTDIR comparsion

--- a/sys/src/cmd/hgfs/fs.c
+++ b/sys/src/cmd/hgfs/fs.c
@@ -240,7 +240,7 @@
 	fsmkqid(&d->qid, level, aux);
 
 	d->mode = 0444;
-	if(d->qid.type == QTDIR)
+	if(d->qid.type & QTDIR)
 		d->mode |= DMDIR | 0111;
 
 	ri = nil;
@@ -405,7 +405,7 @@
 	Revfile *rf;
 	int i, level;
 
-	if(!(fid->qid.type&QTDIR))
+	if((fid->qid.type & QTDIR) == 0)
 		return "walk in non-directory";
 
 	rf = fid->aux;
--- a/sys/src/cmd/ip/cifsd/dir.c
+++ b/sys/src/cmd/ip/cifsd/dir.c
@@ -160,7 +160,7 @@
 	n = -1;
 	if(fd < 0 || t == nil)
 		goto out;
-	if(t->qid.type != QTDIR){
+	if((t->qid.type & QTDIR) == 0){
 		werrstr("not a directory");
 		goto out;
 	}
--- a/sys/src/cmd/ip/cifsd/file.c
+++ b/sys/src/cmd/ip/cifsd/file.c
@@ -122,7 +122,7 @@
 			goto out;
 		}
 
-		isdir = d->qid.type == QTDIR;
+		isdir = (d->qid.type & QTDIR) != 0;
 		switch(cdisp){
 		case FILE_SUPERSEDE:
 			act = FILE_SUPERSEDED;
--- a/sys/src/cmd/ip/cifsd/smb.c
+++ b/sys/src/cmd/ip/cifsd/smb.c
@@ -383,7 +383,7 @@
 		xcmd, 0, nfid, act, tofiletime(d->mtime), tofiletime(d->atime),
 		tofiletime(d->mtime), tofiletime(d->mtime), extfileattr(d),
 		allocsize(d->length, t->share->blocksize), 
-		d->length, f->rtype, d->qid.type == QTDIR, &r->rp)){
+		d->length, f->rtype, (d->qid.type & QTDIR) != 0, &r->rp)){
 		delfid(t, nfid);
 		r->respond(r, STATUS_INVALID_SMB);
 	} else
@@ -911,7 +911,7 @@
 		r->respond(r, smbmkerror());
 		goto out;
 	}
-	if(d->qid.type != QTDIR){
+	if((d->qid.type & QTDIR) == 0){
 		r->respond(r, STATUS_OBJECT_PATH_NOT_FOUND);
 		goto out;
 	}
@@ -1057,7 +1057,7 @@
 	alen = allocsize(dlen, share->blocksize);
 	atime = tofiletime(d->atime);
 	mtime = tofiletime(d->mtime);
-	isdir = d->qid.type == QTDIR;
+	isdir = (d->qid.type & QTDIR) != 0;
 	delete = f && deletedfile(f);
 	link = !delete;
 
@@ -1205,7 +1205,7 @@
 	case 0x0104:	/* SMB_SET_FILE_END_OF_FILE_INFO */
 		if(f == nil || !unpack(b, p, e, "v", &len))
 			goto unsup;
-		if(d->qid.type == QTDIR)
+		if(d->qid.type & QTDIR)
 			return STATUS_OS2_INVALID_ACCESS;
 		if(len != -1LL)
 			nd.length = len;
--- a/sys/src/cmd/ip/cifsd/util.c
+++ b/sys/src/cmd/ip/cifsd/util.c
@@ -144,7 +144,9 @@
 {
 	int a;
 
-	a = (d->qid.type == QTDIR) ? ATTR_DIRECTORY : ATTR_NORMAL;
+	a = (d->qid.type & QTDIR) ? ATTR_DIRECTORY : ATTR_NORMAL;
+	if((d->qid.type & QTTMP) == 0)
+		a |= ATTR_ARCHIVE;
 	if((d->mode & 0222) == 0)
 		a |= ATTR_READONLY;
 	if(d->name[0] == '.' && d->name[1] && d->name[1] != '.')
--- a/sys/src/cmd/ip/torrent.c
+++ b/sys/src/cmd/ip/torrent.c
@@ -754,7 +754,7 @@
 
 	if((d = dirfstat(fd)) == nil)
 		return -1;
-	if(d->qid.type == QTDIR){
+	if(d->qid.type & QTDIR){
 		free(d);
 		werrstr("file is a directory");
 		return -1;
--- a/sys/src/cmd/webfs/fs.c
+++ b/sys/src/cmd/webfs/fs.c
@@ -211,7 +211,7 @@
 	d->uid = estrdup(user);
 	d->gid = estrdup(user);
 	d->muid = estrdup(user);
-	if(d->qid.type == QTDIR)
+	if(d->qid.type & QTDIR)
 		d->mode |= DMDIR | 0111;
 	switch(level){
 	case Qheader:
--