BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / blob / 74ee43c3216e1f3c3b33a2b6afe70b52b62e5465 / vfs / namespace.c

// Related

Nucleus

Barry Ordered object lists 74ee43c (3 years, 2 months ago)
/*
 * This file implements the File System object, which is the namespace for a
 * task's file system.  It tracks a task's root and current working directory.
 */

#include <nucleus/object.h>
#include <nucleus/vfs.h>
#include "namespace.h"

static void file_system_new(Object *);
static void file_system_delete(Object *);
static void file_system_copy(Object *, Object *);

/* File System object type */
ObjectType fsType = {
	.name = "FILE SYSTEM",
	.size = sizeof(FileSystem),
	.new = file_system_new,
	.delete = file_system_delete,
	.copy = file_system_copy,
};

/* Create a new File System object */
static void
file_system_new(Object *obj)
{
	FileSystem *fs = (void *) obj;
	fs->cwdPath = create_list(&dirEntryType, LIST_NORMAL);
}

/* Destory a File System object */
static void
file_system_delete(Object *obj)
{
	FileSystem *fs = (void *) obj;
	put(fs->cwd);
	destroy_list(fs->cwdPath);
	put(fs->root);
}

/* Copy a File System object */
static void
file_system_copy(Object *a, Object *b)
{
	FileSystem *parent = (void *) a, *child = (void *) b;
	child->cwd = get(parent->cwd);
	child->cwdPath = copy_list(parent->cwdPath);
	child->root = get(parent->root);
}