summaryrefslogtreecommitdiff
path: root/kernel/file.c
diff options
context:
space:
mode:
authorMole Shang <[email protected]>2024-02-17 11:55:33 +0800
committerMole Shang <[email protected]>2024-02-17 12:22:07 +0800
commite8e0a7b4c97064eb5e9415726d7e38aaceccd3fd (patch)
treefb42ba5be7a8ae608b968266f62fd71fa889a89d /kernel/file.c
parenta6af72924b115c1177d18d9b1eaba56623e4248b (diff)
parentd85aec2689c4250d0384904bdc11aa618c726bec (diff)
downloadxv6-labs-e8e0a7b4c97064eb5e9415726d7e38aaceccd3fd.tar.gz
xv6-labs-e8e0a7b4c97064eb5e9415726d7e38aaceccd3fd.tar.bz2
xv6-labs-e8e0a7b4c97064eb5e9415726d7e38aaceccd3fd.zip
Merge branch 'thread' into fs
Conflicts: .gitignore Makefile conf/lab.mk kernel/param.h
Diffstat (limited to 'kernel/file.c')
-rw-r--r--kernel/file.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 25fa226..0fba21b 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -80,6 +80,11 @@ fileclose(struct file *f)
iput(ff.ip);
end_op();
}
+#ifdef LAB_NET
+ else if(ff.type == FD_SOCK){
+ sockclose(ff.sock);
+ }
+#endif
}
// Get metadata about file f.
@@ -122,7 +127,13 @@ fileread(struct file *f, uint64 addr, int n)
if((r = readi(f->ip, 1, addr, f->off, n)) > 0)
f->off += r;
iunlock(f->ip);
- } else {
+ }
+#ifdef LAB_NET
+ else if(f->type == FD_SOCK){
+ r = sockread(f->sock, addr, n);
+ }
+#endif
+ else {
panic("fileread");
}
@@ -173,7 +184,13 @@ filewrite(struct file *f, uint64 addr, int n)
i += r;
}
ret = (i == n ? n : -1);
- } else {
+ }
+#ifdef LAB_NET
+ else if(f->type == FD_SOCK){
+ ret = sockwrite(f->sock, addr, n);
+ }
+#endif
+ else {
panic("filewrite");
}