Minor formatting changes
[akaros.git] / kern / drivers / dev / root.c
index 68eefd8..0f5a635 100644 (file)
@@ -56,7 +56,12 @@ int inumber = 13;
 /* Inferno seems to want to: perm |= DMDIR.  It gets checked in other places.
  * NxM didn't want this, IIRC.
  *
 /* Inferno seems to want to: perm |= DMDIR.  It gets checked in other places.
  * NxM didn't want this, IIRC.
  *
- * Also note that "" (/, #r, whatever) has no vers/next/sibling. */
+ * Also note that "" (/, #r, whatever) has no vers/next/sibling.
+ *
+ * If you want to add new entries, add it to the roottab such that the linked
+ * list of indexes is a cycle (change the last current one), then add an entry
+ * to rootdata, and then change the first rootdata entry to have another entry.
+ * Yeah, it's a pain in the ass. */
 struct dirtab roottab[MAXFILE] = {
        {"", {0, 0, QTDIR}, 0, DMDIR | 0777},
        {"chan", {1, 2, QTDIR}, 0, DMDIR | 0777},
 struct dirtab roottab[MAXFILE] = {
        {"", {0, 0, QTDIR}, 0, DMDIR | 0777},
        {"chan", {1, 2, QTDIR}, 0, DMDIR | 0777},
@@ -70,7 +75,8 @@ struct dirtab roottab[MAXFILE] = {
        {"env", {9, 10, QTDIR}, 0, DMDIR | 0777},
        {"root", {10, 11, QTDIR}, 0, DMDIR | 0777},
        {"srv", {11, 12, QTDIR}, 0, DMDIR | 0777},
        {"env", {9, 10, QTDIR}, 0, DMDIR | 0777},
        {"root", {10, 11, QTDIR}, 0, DMDIR | 0777},
        {"srv", {11, 12, QTDIR}, 0, DMDIR | 0777},
-       {"mnt", {12, 0, QTDIR}, 0, DMDIR | 0777},
+       {"mnt", {12, 13, QTDIR}, 0, DMDIR | 0777},
+       {"proc", {13, 0, QTDIR}, 0, DMDIR | 0777},
 };
 
 struct rootdata {
 };
 
 struct rootdata {
@@ -82,7 +88,8 @@ struct rootdata {
 };
 
 struct rootdata rootdata[MAXFILE] = {
 };
 
 struct rootdata rootdata[MAXFILE] = {
-       {0,     1,       &roottab[1],    12,    NULL},
+       {0,     1,       &roottab[1],    13,    NULL},
+       {0,     0,       NULL,   0,      NULL},
        {0,     0,       NULL,   0,      NULL},
        {0,     0,       NULL,   0,      NULL},
        {0,     0,       NULL,   0,      NULL},
        {0,     0,       NULL,   0,      NULL},
        {0,     0,       NULL,   0,      NULL},
        {0,     0,       NULL,   0,      NULL},
@@ -365,13 +372,11 @@ static long rootread(struct chan *c, void *buf, long n, int64_t offset)
        if (offset + n > len)
                n = len - offset;
        data = rootdata[p].ptr;
        if (offset + n > len)
                n = len - offset;
        data = rootdata[p].ptr;
-       /* we might call read from the kernel (load_elf()) */
-       if (current) {
-               if (memcpy_to_user_errno(current, buf, data + offset, n) < 0)
-                       error("%s: bad user addr %p", __FUNCTION__, buf);
-       } else {
-               memcpy(buf, data + offset, n);
-       }
+       /* we can't really claim it has to be a user address. Lots of
+        * kernel things read directly, e.g. /dev/reboot, #V, etc.
+        * Address validation should be done in the syscall layer.
+        */
+       memcpy(buf, data + offset, n);
        return n;
 }
 
        return n;
 }