ports: tar and xz

This commit is contained in:
Matheus
2023-08-02 21:27:24 -03:00
parent 245da66fc3
commit 30851d4971
7 changed files with 71 additions and 9 deletions
+1 -4
View File
@@ -11,16 +11,13 @@
#define VMM_FLAGS_FILE 8
#define VMM_FLAGS_EXACT 16
#define VMM_FLAGS_SHARED 32
#define VMM_FLAGS_COPY 64
#define VMM_PERMANENT_FLAGS_MASK (VMM_FLAGS_FILE | VMM_FLAGS_SHARED | VMM_FLAGS_COPY)
#define VMM_PERMANENT_FLAGS_MASK (VMM_FLAGS_FILE | VMM_FLAGS_SHARED)
#define VMM_ACTION_READ 1
#define VMM_ACTION_WRITE 2
#define VMM_ACTION_EXEC 4
#define VMM_DESTROY_FLAGS_NOSYNC 1
typedef struct {
vnode_t *node;
uintmax_t offset;
+1 -5
View File
@@ -206,7 +206,6 @@ static void insertrange(vmmspace_t *space, vmmrange_t *newrange) {
static void destroyrange(vmmrange_t *range, uintmax_t _offset, size_t size, int flags) {
uintmax_t top = _offset + size;
__assert(!(range->flags & VMM_FLAGS_COPY)); // TODO unimplemented
for (uintmax_t offset = _offset; offset < top; offset += PAGE_SIZE) {
void *vaddr = (void *)((uintptr_t)range->start + offset);
@@ -218,7 +217,7 @@ static void destroyrange(vmmrange_t *range, uintmax_t _offset, size_t size, int
proc_t *proc = thread ? thread->proc : NULL;
cred_t *cred = proc ? &proc->cred : NULL;
if ((range->flags & VMM_FLAGS_FILE) && (range->flags & VMM_FLAGS_SHARED) && (flags & VMM_DESTROY_FLAGS_NOSYNC) == 0) {
if ((range->flags & VMM_FLAGS_FILE) && (range->flags & VMM_FLAGS_SHARED)) {
__assert(VOP_MUNMAP(range->vnode, vaddr, range->offset + offset, mmuflagstovnodeflags(range->mmuflags) | (range->flags & VMM_FLAGS_SHARED ? V_FFLAGS_SHARED : 0), cred) == 0);
} else {
pmm_release(physical);
@@ -402,8 +401,6 @@ void *vmm_map(void *addr, volatile size_t size, int flags, mmuflags_t mmuflags,
range->flags = VMM_PERMANENT_FLAGS_MASK & flags;
range->mmuflags = mmuflags;
// TODO CoW
if (flags & VMM_FLAGS_FILE) {
// XXX make sure that writes can't happen to executable memory mapped files and check file permissions
vmmfiledesc_t *desc = private;
@@ -526,7 +523,6 @@ void vmm_destroycontext(vmmcontext_t *context) {
}
vmmcontext_t *vmm_fork(vmmcontext_t *oldcontext) {
// TODO copy on write
vmmcontext_t *newcontext = vmm_newcontext();
if (newcontext == NULL)
return NULL;