aboutsummaryrefslogtreecommitdiff
path: root/pk/file.c
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2011-04-08 01:57:38 -0700
committerAndrew Waterman <waterman@s144.Millennium.Berkeley.EDU>2011-04-08 02:11:57 -0700
commit666ae0c9e5355e578c2487b81f48b4b74cc16dda (patch)
treec8e5ddbb6cd1dfe2c4fe0e5995c57efaf65d4299 /pk/file.c
parentc6fef75003abf36c618b9fff4f64f3bda76af804 (diff)
downloadriscv-pk-666ae0c9e5355e578c2487b81f48b4b74cc16dda.zip
riscv-pk-666ae0c9e5355e578c2487b81f48b4b74cc16dda.tar.gz
riscv-pk-666ae0c9e5355e578c2487b81f48b4b74cc16dda.tar.bz2
[pk,fesvr] pk now loads elfs itself
this allows it to detect 32b binaries
Diffstat (limited to 'pk/file.c')
-rw-r--r--pk/file.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/pk/file.c b/pk/file.c
index e35256e..13f7d38 100644
--- a/pk/file.c
+++ b/pk/file.c
@@ -16,7 +16,7 @@ static void file_incref(file_t* f)
atomic_add(&f->refcnt,1);
}
-static void file_decref(file_t* f)
+void file_decref(file_t* f)
{
if(atomic_add(&f->refcnt,-1) == 2)
{
@@ -118,6 +118,11 @@ sysret_t file_read(file_t* f, char* buf, size_t size)
return frontend_syscall(SYS_read,f->kfd,(long)buf,size,0);
}
+sysret_t file_pread(file_t* f, char* buf, size_t size, off_t offset)
+{
+ return frontend_syscall(SYS_pread,f->kfd,(long)buf,size,offset);
+}
+
sysret_t file_write(file_t* f, const char* buf, size_t size)
{
if(f->kfd == 1 || f->kfd == 2)
@@ -129,6 +134,11 @@ sysret_t file_write(file_t* f, const char* buf, size_t size)
return frontend_syscall(SYS_write,f->kfd,(long)buf,size,0);
}
+sysret_t file_pwrite(file_t* f, const char* buf, size_t size, off_t offset)
+{
+ return frontend_syscall(SYS_pwrite,f->kfd,(long)buf,size,offset);
+}
+
sysret_t file_stat(file_t* f, struct stat* s)
{
return frontend_syscall(SYS_fstat,f->kfd,(long)s,0,0);