History

devfs-posix: use stat->st_dev<<32 | stat->st_ino for qid.path

cinap_lenrek committed 10 years ago

Commit 0a8a66a1 parent 47ee1001 file · +6 −22Browse files

Unified · Split

kern/devfs-posix.c+6−22
@@ -40,7 +40,7 @@ struct Ufsinfo · 39 unmodified lines
40 40
41char *base = "/";41char *base = "/";
42 42
43static Qid fsqid(char*, struct stat *);43static Qid fsqid(struct stat *);
44static void fspath(Chan*, char*, char*);44static void fspath(Chan*, char*, char*);
45static ulong fsdirread(Chan*, uchar*, int, ulong);45static ulong fsdirread(Chan*, uchar*, int, ulong);
46static int fsomode(int);46static int fsomode(int);
@@ -130,7 +130,7 @@ fswalk1(Chan *c, char *name) · 83 unmodified lines
130 uif->uid = stbuf.st_uid;130 uif->uid = stbuf.st_uid;
131 uif->gid = stbuf.st_gid;131 uif->gid = stbuf.st_gid;
132 132
133 c->qid = fsqid(path, &stbuf);133 c->qid = fsqid(&stbuf);
134 134
135 return 1;135 return 1;
136}136}
@@ -302,7 +302,7 @@ fscreate(Chan *c, char *name, int mode, ulong perm) · 165 unmodified lines
302 302
303 if(stat(path, &stbuf) < 0)303 if(stat(path, &stbuf) < 0)
304 error(strerror(errno));304 error(strerror(errno));
305 c->qid = fsqid(path, &stbuf);305 c->qid = fsqid(&stbuf);
306 c->offset = 0;306 c->offset = 0;
307 c->flag |= COPEN;307 c->flag |= COPEN;
308 c->mode = openmode(mode);308 c->mode = openmode(mode);
@@ -458,31 +458,15 @@ fswstat(Chan *c, uchar *buf, int n) · 149 unmodified lines
458}458}
459 459
460static Qid460static Qid
461fsqid(char *p, struct stat *st)461fsqid(struct stat *st)
462{462{
463 Qid q;463 Qid q;
464 int dev;
465 ulong h;
466 static int nqdev;
467 static uchar *qdev;
468
469 if(qdev == 0)
470 qdev = mallocz(65536U, 1);
471 464
472 q.type = 0;465 q.type = 0;
473 if((st->st_mode&S_IFMT) == S_IFDIR)466 if((st->st_mode&S_IFMT) == S_IFDIR)
474 q.type = QTDIR;467 q.type = QTDIR;
475 468
476 dev = st->st_dev & 0xFFFFUL;469 q.path = (uvlong)st->st_dev<<32 | st->st_ino;
477 if(qdev[dev] == 0)
478 qdev[dev] = ++nqdev;
479
480 h = 0;
481 while(*p != '\0')
482 h += *p++ * 13;
483
484 q.path = (vlong)qdev[dev]<<32;
485 q.path |= h;
486 q.vers = st->st_mtime;470 q.vers = st->st_mtime;
487 471
488 return q;472 return q;
@@ -579,7 +563,7 @@ fsdirread(Chan *c, uchar *va, int count, ulong offset) · 90 unmodified lines
579 d.uid = "unknown";563 d.uid = "unknown";
580 d.gid = "unknown";564 d.gid = "unknown";
581 d.muid = "unknown";565 d.muid = "unknown";
582 d.qid = fsqid(path, &stbuf);566 d.qid = fsqid(&stbuf);
583 d.mode = (d.qid.type<<24)|(stbuf.st_mode&0777);567 d.mode = (d.qid.type<<24)|(stbuf.st_mode&0777);
584 d.atime = stbuf.st_atime;568 d.atime = stbuf.st_atime;
585 d.mtime = stbuf.st_mtime;569 d.mtime = stbuf.st_mtime;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t