[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v2 2/6] lib/ramfs: tabify imported ramfs code
Reviewed-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> > On 8. Feb 2019, at 15:31, Yuri Volchkov <yuri.volchkov@xxxxxxxxx> wrote: > > To comply with Unikraft coding style, indents must be tabs, not > spaces. Imported code was a mixture of both. > > Signed-off-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx> > --- > lib/ramfs/ramfs.h | 26 +- > lib/ramfs/ramfs_vfsops.c | 32 +- > lib/ramfs/ramfs_vnops.c | 916 +++++++++++++++++++-------------------- > 3 files changed, 487 insertions(+), 487 deletions(-) > > diff --git a/lib/ramfs/ramfs.h b/lib/ramfs/ramfs.h > index 88ccbe72..e4eeb65f 100644 > --- a/lib/ramfs/ramfs.h > +++ b/lib/ramfs/ramfs.h > @@ -46,19 +46,19 @@ > * File/directory node for RAMFS > */ > struct ramfs_node { > - struct ramfs_node *rn_next; /* next node in the same directory */ > - struct ramfs_node *rn_child; /* first child node */ > - int rn_type; /* file or directory */ > - char *rn_name; /* name (null-terminated) */ > - size_t rn_namelen; /* length of name not including terminator */ > - size_t rn_size; /* file size */ > - char *rn_buf; /* buffer to the file data */ > - size_t rn_bufsize; /* allocated buffer size */ > - struct timespec rn_ctime; > - struct timespec rn_atime; > - struct timespec rn_mtime; > - int rn_mode; > - bool rn_owns_buf; > + struct ramfs_node *rn_next; /* next node in the same directory */ > + struct ramfs_node *rn_child; /* first child node */ > + int rn_type; /* file or directory */ > + char *rn_name; /* name (null-terminated) */ > + size_t rn_namelen; /* length of name not including terminator */ > + size_t rn_size; /* file size */ > + char *rn_buf; /* buffer to the file data */ > + size_t rn_bufsize; /* allocated buffer size */ > + struct timespec rn_ctime; > + struct timespec rn_atime; > + struct timespec rn_mtime; > + int rn_mode; > + bool rn_owns_buf; > }; > > struct ramfs_node *ramfs_allocate_node(const char *name, int type); > diff --git a/lib/ramfs/ramfs_vfsops.c b/lib/ramfs/ramfs_vfsops.c > index 72fe7edb..53ae758a 100644 > --- a/lib/ramfs/ramfs_vfsops.c > +++ b/lib/ramfs/ramfs_vfsops.c > @@ -49,12 +49,12 @@ static int ramfs_unmount(struct mount *mp, int flags); > * File system operations > */ > struct vfsops ramfs_vfsops = { > - ramfs_mount, /* mount */ > - ramfs_unmount, /* unmount */ > - ramfs_sync, /* sync */ > - ramfs_vget, /* vget */ > - ramfs_statfs, /* statfs */ > - &ramfs_vnops, /* vnops */ > + ramfs_mount, /* mount */ > + ramfs_unmount, /* unmount */ > + ramfs_sync, /* sync */ > + ramfs_vget, /* vget */ > + ramfs_statfs, /* statfs */ > + &ramfs_vnops, /* vnops */ > }; > > /* > @@ -63,16 +63,16 @@ struct vfsops ramfs_vfsops = { > static int > ramfs_mount(struct mount *mp, const char *dev, int flags, const void *data) > { > - struct ramfs_node *np; > + struct ramfs_node *np; > > - DPRINTF(("ramfs_mount: dev=%s\n", dev)); > + DPRINTF(("ramfs_mount: dev=%s\n", dev)); > > - /* Create a root node */ > - np = ramfs_allocate_node("/", VDIR); > - if (np == NULL) > - return ENOMEM; > - mp->m_root->d_vnode->v_data = np; > - return 0; > + /* Create a root node */ > + np = ramfs_allocate_node("/", VDIR); > + if (np == NULL) > + return ENOMEM; > + mp->m_root->d_vnode->v_data = np; > + return 0; > } > > /* > @@ -85,6 +85,6 @@ ramfs_mount(struct mount *mp, const char *dev, int flags, > const void *data) > static int > ramfs_unmount(struct mount *mp, int flags) > { > - release_mp_dentries(mp); > - return 0; > + release_mp_dentries(mp); > + return 0; > } > diff --git a/lib/ramfs/ramfs_vnops.c b/lib/ramfs/ramfs_vnops.c > index 9291a4ec..8b586f88 100644 > --- a/lib/ramfs/ramfs_vnops.c > +++ b/lib/ramfs/ramfs_vnops.c > @@ -54,313 +54,313 @@ static uint64_t inode_count = 1; /* inode 0 is reserved > to root */ > static void > set_times_to_now(struct timespec *time1, struct timespec *time2 = nullptr, > struct timespec *time3 = nullptr) > { > - struct timespec now; > - clock_gettime(CLOCK_REALTIME, &now); > - if (time1) { > - memcpy(time1, &now, sizeof(struct timespec)); > - } > - if (time2) { > - memcpy(time2, &now, sizeof(struct timespec)); > - } > - if (time3) { > - memcpy(time3, &now, sizeof(struct timespec)); > - } > + struct timespec now; > + clock_gettime(CLOCK_REALTIME, &now); > + if (time1) { > + memcpy(time1, &now, sizeof(struct timespec)); > + } > + if (time2) { > + memcpy(time2, &now, sizeof(struct timespec)); > + } > + if (time3) { > + memcpy(time3, &now, sizeof(struct timespec)); > + } > } > > struct ramfs_node * > ramfs_allocate_node(const char *name, int type) > { > - struct ramfs_node *np; > - > - np = (ramfs_node *) malloc(sizeof(struct ramfs_node)); > - if (np == NULL) > - return NULL; > - memset(np, 0, sizeof(struct ramfs_node)); > - > - np->rn_namelen = strlen(name); > - np->rn_name = (char *) malloc(np->rn_namelen + 1); > - if (np->rn_name == NULL) { > - free(np); > - return NULL; > - } > - strlcpy(np->rn_name, name, np->rn_namelen + 1); > - np->rn_type = type; > - > - if (type == VDIR) > - np->rn_mode = S_IFDIR|0777; > - else if (type == VLNK) > - np->rn_mode = S_IFLNK|0777; > - else > - np->rn_mode = S_IFREG|0777; > - > - set_times_to_now(&(np->rn_ctime), &(np->rn_atime), &(np->rn_mtime)); > - np->rn_owns_buf = true; > - > - return np; > + struct ramfs_node *np; > + > + np = (ramfs_node *) malloc(sizeof(struct ramfs_node)); > + if (np == NULL) > + return NULL; > + memset(np, 0, sizeof(struct ramfs_node)); > + > + np->rn_namelen = strlen(name); > + np->rn_name = (char *) malloc(np->rn_namelen + 1); > + if (np->rn_name == NULL) { > + free(np); > + return NULL; > + } > + strlcpy(np->rn_name, name, np->rn_namelen + 1); > + np->rn_type = type; > + > + if (type == VDIR) > + np->rn_mode = S_IFDIR|0777; > + else if (type == VLNK) > + np->rn_mode = S_IFLNK|0777; > + else > + np->rn_mode = S_IFREG|0777; > + > + set_times_to_now(&(np->rn_ctime), &(np->rn_atime), &(np->rn_mtime)); > + np->rn_owns_buf = true; > + > + return np; > } > > void > ramfs_free_node(struct ramfs_node *np) > { > - if (np->rn_buf != NULL && np->rn_owns_buf) > - free(np->rn_buf); > + if (np->rn_buf != NULL && np->rn_owns_buf) > + free(np->rn_buf); > > - free(np->rn_name); > - free(np); > + free(np->rn_name); > + free(np); > } > > static struct ramfs_node * > ramfs_add_node(struct ramfs_node *dnp, char *name, int type) > { > - struct ramfs_node *np, *prev; > + struct ramfs_node *np, *prev; > > - np = ramfs_allocate_node(name, type); > - if (np == NULL) > - return NULL; > + np = ramfs_allocate_node(name, type); > + if (np == NULL) > + return NULL; > > - mutex_lock(&ramfs_lock); > + mutex_lock(&ramfs_lock); > > - /* Link to the directory list */ > - if (dnp->rn_child == NULL) { > - dnp->rn_child = np; > - } else { > - prev = dnp->rn_child; > - while (prev->rn_next != NULL) > - prev = prev->rn_next; > - prev->rn_next = np; > - } > + /* Link to the directory list */ > + if (dnp->rn_child == NULL) { > + dnp->rn_child = np; > + } else { > + prev = dnp->rn_child; > + while (prev->rn_next != NULL) > + prev = prev->rn_next; > + prev->rn_next = np; > + } > > - set_times_to_now(&(dnp->rn_mtime), &(dnp->rn_ctime)); > + set_times_to_now(&(dnp->rn_mtime), &(dnp->rn_ctime)); > > - mutex_unlock(&ramfs_lock); > - return np; > + mutex_unlock(&ramfs_lock); > + return np; > } > > static int > ramfs_remove_node(struct ramfs_node *dnp, struct ramfs_node *np) > { > - struct ramfs_node *prev; > - > - if (dnp->rn_child == NULL) > - return EBUSY; > - > - mutex_lock(&ramfs_lock); > - > - /* Unlink from the directory list */ > - if (dnp->rn_child == np) { > - dnp->rn_child = np->rn_next; > - } else { > - for (prev = dnp->rn_child; prev->rn_next != np; > - prev = prev->rn_next) { > - if (prev->rn_next == NULL) { > - mutex_unlock(&ramfs_lock); > - return ENOENT; > - } > - } > - prev->rn_next = np->rn_next; > - } > - ramfs_free_node(np); > - > - set_times_to_now(&(dnp->rn_mtime), &(dnp->rn_ctime)); > - > - mutex_unlock(&ramfs_lock); > - return 0; > + struct ramfs_node *prev; > + > + if (dnp->rn_child == NULL) > + return EBUSY; > + > + mutex_lock(&ramfs_lock); > + > + /* Unlink from the directory list */ > + if (dnp->rn_child == np) { > + dnp->rn_child = np->rn_next; > + } else { > + for (prev = dnp->rn_child; prev->rn_next != np; > + prev = prev->rn_next) { > + if (prev->rn_next == NULL) { > + mutex_unlock(&ramfs_lock); > + return ENOENT; > + } > + } > + prev->rn_next = np->rn_next; > + } > + ramfs_free_node(np); > + > + set_times_to_now(&(dnp->rn_mtime), &(dnp->rn_ctime)); > + > + mutex_unlock(&ramfs_lock); > + return 0; > } > > static int > ramfs_rename_node(struct ramfs_node *np, char *name) > { > - size_t len; > - char *tmp; > - > - len = strlen(name); > - if (len > NAME_MAX) { > - return ENAMETOOLONG; > - } > - if (len <= np->rn_namelen) { > - /* Reuse current name buffer */ > - strlcpy(np->rn_name, name, np->rn_namelen + 1); > - } else { > - /* Expand name buffer */ > - tmp = (char *) malloc(len + 1); > - if (tmp == NULL) > - return ENOMEM; > - strlcpy(tmp, name, len + 1); > - free(np->rn_name); > - np->rn_name = tmp; > - } > - np->rn_namelen = len; > - set_times_to_now(&(np->rn_ctime)); > - return 0; > + size_t len; > + char *tmp; > + > + len = strlen(name); > + if (len > NAME_MAX) { > + return ENAMETOOLONG; > + } > + if (len <= np->rn_namelen) { > + /* Reuse current name buffer */ > + strlcpy(np->rn_name, name, np->rn_namelen + 1); > + } else { > + /* Expand name buffer */ > + tmp = (char *) malloc(len + 1); > + if (tmp == NULL) > + return ENOMEM; > + strlcpy(tmp, name, len + 1); > + free(np->rn_name); > + np->rn_name = tmp; > + } > + np->rn_namelen = len; > + set_times_to_now(&(np->rn_ctime)); > + return 0; > } > > static int > ramfs_lookup(struct vnode *dvp, char *name, struct vnode **vpp) > { > - struct ramfs_node *np, *dnp; > - struct vnode *vp; > - size_t len; > - int found; > - > - *vpp = NULL; > - > - if (*name == '\0') > - return ENOENT; > - > - mutex_lock(&ramfs_lock); > - > - len = strlen(name); > - dnp = (ramfs_node *) dvp->v_data; > - found = 0; > - for (np = dnp->rn_child; np != NULL; np = np->rn_next) { > - if (np->rn_namelen == len && > - memcmp(name, np->rn_name, len) == 0) { > - found = 1; > - break; > - } > - } > - if (found == 0) { > - mutex_unlock(&ramfs_lock); > - return ENOENT; > - } > - if (vget(dvp->v_mount, inode_count++, &vp)) { > - /* found in cache */ > - *vpp = vp; > - mutex_unlock(&ramfs_lock); > - return 0; > - } > - if (!vp) { > - mutex_unlock(&ramfs_lock); > - return ENOMEM; > - } > - vp->v_data = np; > - vp->v_mode = ALLPERMS; > - vp->v_type = np->rn_type; > - vp->v_size = np->rn_size; > - > - mutex_unlock(&ramfs_lock); > - > - *vpp = vp; > - > - return 0; > + struct ramfs_node *np, *dnp; > + struct vnode *vp; > + size_t len; > + int found; > + > + *vpp = NULL; > + > + if (*name == '\0') > + return ENOENT; > + > + mutex_lock(&ramfs_lock); > + > + len = strlen(name); > + dnp = (ramfs_node *) dvp->v_data; > + found = 0; > + for (np = dnp->rn_child; np != NULL; np = np->rn_next) { > + if (np->rn_namelen == len && > + memcmp(name, np->rn_name, len) == 0) { > + found = 1; > + break; > + } > + } > + if (found == 0) { > + mutex_unlock(&ramfs_lock); > + return ENOENT; > + } > + if (vget(dvp->v_mount, inode_count++, &vp)) { > + /* found in cache */ > + *vpp = vp; > + mutex_unlock(&ramfs_lock); > + return 0; > + } > + if (!vp) { > + mutex_unlock(&ramfs_lock); > + return ENOMEM; > + } > + vp->v_data = np; > + vp->v_mode = ALLPERMS; > + vp->v_type = np->rn_type; > + vp->v_size = np->rn_size; > + > + mutex_unlock(&ramfs_lock); > + > + *vpp = vp; > + > + return 0; > } > > static int > ramfs_mkdir(struct vnode *dvp, char *name, mode_t mode) > { > - struct ramfs_node *np; > + struct ramfs_node *np; > > - DPRINTF(("mkdir %s\n", name)); > - if (strlen(name) > NAME_MAX) { > - return ENAMETOOLONG; > - } > + DPRINTF(("mkdir %s\n", name)); > + if (strlen(name) > NAME_MAX) { > + return ENAMETOOLONG; > + } > > - if (!S_ISDIR(mode)) > - return EINVAL; > + if (!S_ISDIR(mode)) > + return EINVAL; > > - np = (ramfs_node *) ramfs_add_node((ramfs_node *) dvp->v_data, name, > VDIR); > - if (np == NULL) > - return ENOMEM; > - np->rn_size = 0; > + np = (ramfs_node *) ramfs_add_node((ramfs_node *) dvp->v_data, name, > VDIR); > + if (np == NULL) > + return ENOMEM; > + np->rn_size = 0; > > - return 0; > + return 0; > } > > static int > ramfs_symlink(struct vnode *dvp, char *name, char *link) > { > - if (strlen(name) > NAME_MAX) { > - return ENAMETOOLONG; > - } > - auto np = ramfs_add_node((ramfs_node *) dvp->v_data, name, VLNK); > - if (np == NULL) > - return ENOMEM; > - // Save the link target without the final null, as readlink() wants it. > - size_t len = strlen(link); > - np->rn_buf = strndup(link, len); > - np->rn_bufsize = np->rn_size = len; > - > - return 0; > + if (strlen(name) > NAME_MAX) { > + return ENAMETOOLONG; > + } > + auto np = ramfs_add_node((ramfs_node *) dvp->v_data, name, VLNK); > + if (np == NULL) > + return ENOMEM; > + // Save the link target without the final null, as readlink() wants it. > + size_t len = strlen(link); > + np->rn_buf = strndup(link, len); > + np->rn_bufsize = np->rn_size = len; > + > + return 0; > } > > static int > ramfs_readlink(struct vnode *vp, struct uio *uio) > { > - struct ramfs_node *np = (ramfs_node *) vp->v_data; > - size_t len; > - > - if (vp->v_type != VLNK) { > - return EINVAL; > - } > - if (uio->uio_offset < 0) { > - return EINVAL; > - } > - if (uio->uio_resid == 0) { > - return 0; > - } > - if (uio->uio_offset >= (off_t) vp->v_size) > - return 0; > - if (vp->v_size - uio->uio_offset < uio->uio_resid) > - len = vp->v_size - uio->uio_offset; > - else > - len = uio->uio_resid; > - > - set_times_to_now( &(np->rn_atime)); > - return uiomove(np->rn_buf + uio->uio_offset, len, uio); > + struct ramfs_node *np = (ramfs_node *) vp->v_data; > + size_t len; > + > + if (vp->v_type != VLNK) { > + return EINVAL; > + } > + if (uio->uio_offset < 0) { > + return EINVAL; > + } > + if (uio->uio_resid == 0) { > + return 0; > + } > + if (uio->uio_offset >= (off_t) vp->v_size) > + return 0; > + if (vp->v_size - uio->uio_offset < uio->uio_resid) > + len = vp->v_size - uio->uio_offset; > + else > + len = uio->uio_resid; > + > + set_times_to_now( &(np->rn_atime)); > + return uiomove(np->rn_buf + uio->uio_offset, len, uio); > } > > /* Remove a directory */ > static int > ramfs_rmdir(struct vnode *dvp, struct vnode *vp, char *name) > { > - return ramfs_remove_node((ramfs_node *) dvp->v_data, (ramfs_node *) > vp->v_data); > + return ramfs_remove_node((ramfs_node *) dvp->v_data, (ramfs_node *) > vp->v_data); > } > > /* Remove a file */ > static int > ramfs_remove(struct vnode *dvp, struct vnode *vp, char *name) > { > - DPRINTF(("remove %s in %s\n", name, dvp->v_path)); > - return ramfs_remove_node((ramfs_node *) dvp->v_data, (ramfs_node *) > vp->v_data); > + DPRINTF(("remove %s in %s\n", name, dvp->v_path)); > + return ramfs_remove_node((ramfs_node *) dvp->v_data, (ramfs_node *) > vp->v_data); > } > > /* Truncate file */ > static int > ramfs_truncate(struct vnode *vp, off_t length) > { > - struct ramfs_node *np; > - void *new_buf; > - size_t new_size; > - > - DPRINTF(("truncate %s length=%d\n", vp->v_path, length)); > - np = (ramfs_node *) vp->v_data; > - > - if (length == 0) { > - if (np->rn_buf != NULL) { > - if(np->rn_owns_buf) > - free(np->rn_buf); > - np->rn_buf = NULL; > - np->rn_bufsize = 0; > - } > - } else if (size_t(length) > np->rn_bufsize) { > - // XXX: this could use a page level allocator > - new_size = round_page(length); > - new_buf = malloc(new_size); > - if (!new_buf) > - return EIO; > - if (np->rn_size != 0) { > - memcpy(new_buf, np->rn_buf, vp->v_size); > - if(np->rn_owns_buf) > - free(np->rn_buf); > - } > - np->rn_buf = (char *) new_buf; > - np->rn_bufsize = new_size; > - np->rn_owns_buf = true; > - } > - np->rn_size = length; > - vp->v_size = length; > - set_times_to_now(&(np->rn_mtime), &(np->rn_ctime)); > - return 0; > + struct ramfs_node *np; > + void *new_buf; > + size_t new_size; > + > + DPRINTF(("truncate %s length=%d\n", vp->v_path, length)); > + np = (ramfs_node *) vp->v_data; > + > + if (length == 0) { > + if (np->rn_buf != NULL) { > + if(np->rn_owns_buf) > + free(np->rn_buf); > + np->rn_buf = NULL; > + np->rn_bufsize = 0; > + } > + } else if (size_t(length) > np->rn_bufsize) { > + // XXX: this could use a page level allocator > + new_size = round_page(length); > + new_buf = malloc(new_size); > + if (!new_buf) > + return EIO; > + if (np->rn_size != 0) { > + memcpy(new_buf, np->rn_buf, vp->v_size); > + if(np->rn_owns_buf) > + free(np->rn_buf); > + } > + np->rn_buf = (char *) new_buf; > + np->rn_bufsize = new_size; > + np->rn_owns_buf = true; > + } > + np->rn_size = length; > + vp->v_size = length; > + set_times_to_now(&(np->rn_mtime), &(np->rn_ctime)); > + return 0; > } > > /* > @@ -369,165 +369,165 @@ ramfs_truncate(struct vnode *vp, off_t length) > static int > ramfs_create(struct vnode *dvp, char *name, mode_t mode) > { > - struct ramfs_node *np; > + struct ramfs_node *np; > > - if (strlen(name) > NAME_MAX) { > - return ENAMETOOLONG; > - } > + if (strlen(name) > NAME_MAX) { > + return ENAMETOOLONG; > + } > > - DPRINTF(("create %s in %s\n", name, dvp->v_path)); > - if (!S_ISREG(mode)) > - return EINVAL; > + DPRINTF(("create %s in %s\n", name, dvp->v_path)); > + if (!S_ISREG(mode)) > + return EINVAL; > > - np = ramfs_add_node((ramfs_node *) dvp->v_data, name, VREG); > - if (np == NULL) > - return ENOMEM; > - return 0; > + np = ramfs_add_node((ramfs_node *) dvp->v_data, name, VREG); > + if (np == NULL) > + return ENOMEM; > + return 0; > } > > static int > ramfs_read(struct vnode *vp, struct file *fp, struct uio *uio, int ioflag) > { > - struct ramfs_node *np = (ramfs_node *) vp->v_data; > - size_t len; > - > - if (vp->v_type == VDIR) { > - return EISDIR; > - } > - if (vp->v_type != VREG) { > - return EINVAL; > - } > - if (uio->uio_offset < 0) { > - return EINVAL; > - } > - if (uio->uio_resid == 0) { > - return 0; > - } > - > - if (uio->uio_offset >= (off_t) vp->v_size) > - return 0; > - > - if (vp->v_size - uio->uio_offset < uio->uio_resid) > - len = vp->v_size - uio->uio_offset; > - else > - len = uio->uio_resid; > - > - set_times_to_now(&(np->rn_atime)); > - > - return uiomove(np->rn_buf + uio->uio_offset, len, uio); > + struct ramfs_node *np = (ramfs_node *) vp->v_data; > + size_t len; > + > + if (vp->v_type == VDIR) { > + return EISDIR; > + } > + if (vp->v_type != VREG) { > + return EINVAL; > + } > + if (uio->uio_offset < 0) { > + return EINVAL; > + } > + if (uio->uio_resid == 0) { > + return 0; > + } > + > + if (uio->uio_offset >= (off_t) vp->v_size) > + return 0; > + > + if (vp->v_size - uio->uio_offset < uio->uio_resid) > + len = vp->v_size - uio->uio_offset; > + else > + len = uio->uio_resid; > + > + set_times_to_now(&(np->rn_atime)); > + > + return uiomove(np->rn_buf + uio->uio_offset, len, uio); > } > > int > ramfs_set_file_data(struct vnode *vp, const void *data, size_t size) > { > - struct ramfs_node *np = (ramfs_node *) vp->v_data; > - > - if (vp->v_type == VDIR) { > - return EISDIR; > - } > - if (vp->v_type != VREG) { > - return EINVAL; > - } > - if (np->rn_buf) { > - return EINVAL; > - } > - > - np->rn_buf = (char *) data; > - np->rn_bufsize = size; > - np->rn_size = size; > - vp->v_size = size; > - np->rn_owns_buf = false; > - > - return 0; > + struct ramfs_node *np = (ramfs_node *) vp->v_data; > + > + if (vp->v_type == VDIR) { > + return EISDIR; > + } > + if (vp->v_type != VREG) { > + return EINVAL; > + } > + if (np->rn_buf) { > + return EINVAL; > + } > + > + np->rn_buf = (char *) data; > + np->rn_bufsize = size; > + np->rn_size = size; > + vp->v_size = size; > + np->rn_owns_buf = false; > + > + return 0; > } > > static int > ramfs_write(struct vnode *vp, struct uio *uio, int ioflag) > { > - struct ramfs_node *np = (ramfs_node *) vp->v_data; > - > - if (vp->v_type == VDIR) { > - return EISDIR; > - } > - if (vp->v_type != VREG) { > - return EINVAL; > - } > - if (uio->uio_offset < 0) { > - return EINVAL; > - } > - if (uio->uio_offset >= LONG_MAX) { > - return EFBIG; > - } > - if (uio->uio_resid == 0) { > - return 0; > - } > - > - if (ioflag & IO_APPEND) > - uio->uio_offset = np->rn_size; > - > - if (size_t(uio->uio_offset + uio->uio_resid) > (size_t) vp->v_size) { > - /* Expand the file size before writing to it */ > - off_t end_pos = uio->uio_offset + uio->uio_resid; > - if (end_pos > (off_t) np->rn_bufsize) { > - // XXX: this could use a page level allocator > - size_t new_size = round_page(end_pos); > - void *new_buf = malloc(new_size); > - if (!new_buf) > - return EIO; > - if (np->rn_size != 0) { > - memcpy(new_buf, np->rn_buf, vp->v_size); > - if(np->rn_owns_buf) > - free(np->rn_buf); > - } > - np->rn_buf = (char *) new_buf; > - np->rn_bufsize = new_size; > - } > - np->rn_size = end_pos; > - vp->v_size = end_pos; > - np->rn_owns_buf = true; > - } > - > - set_times_to_now(&(np->rn_mtime), &(np->rn_ctime)); > - return uiomove(np->rn_buf + uio->uio_offset, uio->uio_resid, uio); > + struct ramfs_node *np = (ramfs_node *) vp->v_data; > + > + if (vp->v_type == VDIR) { > + return EISDIR; > + } > + if (vp->v_type != VREG) { > + return EINVAL; > + } > + if (uio->uio_offset < 0) { > + return EINVAL; > + } > + if (uio->uio_offset >= LONG_MAX) { > + return EFBIG; > + } > + if (uio->uio_resid == 0) { > + return 0; > + } > + > + if (ioflag & IO_APPEND) > + uio->uio_offset = np->rn_size; > + > + if (size_t(uio->uio_offset + uio->uio_resid) > (size_t) vp->v_size) { > + /* Expand the file size before writing to it */ > + off_t end_pos = uio->uio_offset + uio->uio_resid; > + if (end_pos > (off_t) np->rn_bufsize) { > + // XXX: this could use a page level allocator > + size_t new_size = round_page(end_pos); > + void *new_buf = malloc(new_size); > + if (!new_buf) > + return EIO; > + if (np->rn_size != 0) { > + memcpy(new_buf, np->rn_buf, vp->v_size); > + if(np->rn_owns_buf) > + free(np->rn_buf); > + } > + np->rn_buf = (char *) new_buf; > + np->rn_bufsize = new_size; > + } > + np->rn_size = end_pos; > + vp->v_size = end_pos; > + np->rn_owns_buf = true; > + } > + > + set_times_to_now(&(np->rn_mtime), &(np->rn_ctime)); > + return uiomove(np->rn_buf + uio->uio_offset, uio->uio_resid, uio); > } > > static int > ramfs_rename(struct vnode *dvp1, struct vnode *vp1, char *name1, > - struct vnode *dvp2, struct vnode *vp2, char *name2) > + struct vnode *dvp2, struct vnode *vp2, char *name2) > { > - struct ramfs_node *np, *old_np; > - int error; > - > - if (vp2) { > - /* Remove destination file, first */ > - error = ramfs_remove_node((ramfs_node *) dvp2->v_data, (ramfs_node > *) vp2->v_data); > - if (error) > - return error; > - } > - /* Same directory ? */ > - if (dvp1 == dvp2) { > - /* Change the name of existing file */ > - error = ramfs_rename_node((ramfs_node *) vp1->v_data, name2); > - if (error) > - return error; > - } else { > - /* Create new file or directory */ > - old_np = (ramfs_node *) vp1->v_data; > - np = ramfs_add_node((ramfs_node *) dvp2->v_data, name2, > old_np->rn_type); > - if (np == NULL) > - return ENOMEM; > - > - if (old_np->rn_buf) { > - /* Copy file data */ > - np->rn_buf = old_np->rn_buf; > - np->rn_size = old_np->rn_size; > - np->rn_bufsize = old_np->rn_bufsize; > - old_np->rn_buf = NULL; > - } > - /* Remove source file */ > - ramfs_remove_node((ramfs_node *) dvp1->v_data, (ramfs_node *) > vp1->v_data); > - } > - return 0; > + struct ramfs_node *np, *old_np; > + int error; > + > + if (vp2) { > + /* Remove destination file, first */ > + error = ramfs_remove_node((ramfs_node *) dvp2->v_data, > (ramfs_node *) vp2->v_data); > + if (error) > + return error; > + } > + /* Same directory ? */ > + if (dvp1 == dvp2) { > + /* Change the name of existing file */ > + error = ramfs_rename_node((ramfs_node *) vp1->v_data, name2); > + if (error) > + return error; > + } else { > + /* Create new file or directory */ > + old_np = (ramfs_node *) vp1->v_data; > + np = ramfs_add_node((ramfs_node *) dvp2->v_data, name2, > old_np->rn_type); > + if (np == NULL) > + return ENOMEM; > + > + if (old_np->rn_buf) { > + /* Copy file data */ > + np->rn_buf = old_np->rn_buf; > + np->rn_size = old_np->rn_size; > + np->rn_bufsize = old_np->rn_bufsize; > + old_np->rn_buf = NULL; > + } > + /* Remove source file */ > + ramfs_remove_node((ramfs_node *) dvp1->v_data, (ramfs_node *) > vp1->v_data); > + } > + return 0; > } > > /* > @@ -536,97 +536,97 @@ ramfs_rename(struct vnode *dvp1, struct vnode *vp1, > char *name1, > static int > ramfs_readdir(struct vnode *vp, struct file *fp, struct dirent *dir) > { > - struct ramfs_node *np, *dnp; > - int i; > - > - mutex_lock(&ramfs_lock); > - > - set_times_to_now(&(((ramfs_node *) vp->v_data)->rn_atime)); > - > - if (fp->f_offset == 0) { > - dir->d_type = DT_DIR; > - strlcpy((char *) &dir->d_name, ".", sizeof(dir->d_name)); > - } else if (fp->f_offset == 1) { > - dir->d_type = DT_DIR; > - strlcpy((char *) &dir->d_name, "..", sizeof(dir->d_name)); > - } else { > - dnp = (ramfs_node *) vp->v_data; > - np = dnp->rn_child; > - if (np == NULL) { > - mutex_unlock(&ramfs_lock); > - return ENOENT; > - } > - > - for (i = 0; i != (fp->f_offset - 2); i++) { > - np = np->rn_next; > - if (np == NULL) { > - mutex_unlock(&ramfs_lock); > - return ENOENT; > - } > - } > - if (np->rn_type == VDIR) > - dir->d_type = DT_DIR; > - else if (np->rn_type == VLNK) > - dir->d_type = DT_LNK; > - else > - dir->d_type = DT_REG; > - strlcpy((char *) &dir->d_name, np->rn_name, > - sizeof(dir->d_name)); > - } > - dir->d_fileno = fp->f_offset; > + struct ramfs_node *np, *dnp; > + int i; > + > + mutex_lock(&ramfs_lock); > + > + set_times_to_now(&(((ramfs_node *) vp->v_data)->rn_atime)); > + > + if (fp->f_offset == 0) { > + dir->d_type = DT_DIR; > + strlcpy((char *) &dir->d_name, ".", sizeof(dir->d_name)); > + } else if (fp->f_offset == 1) { > + dir->d_type = DT_DIR; > + strlcpy((char *) &dir->d_name, "..", sizeof(dir->d_name)); > + } else { > + dnp = (ramfs_node *) vp->v_data; > + np = dnp->rn_child; > + if (np == NULL) { > + mutex_unlock(&ramfs_lock); > + return ENOENT; > + } > + > + for (i = 0; i != (fp->f_offset - 2); i++) { > + np = np->rn_next; > + if (np == NULL) { > + mutex_unlock(&ramfs_lock); > + return ENOENT; > + } > + } > + if (np->rn_type == VDIR) > + dir->d_type = DT_DIR; > + else if (np->rn_type == VLNK) > + dir->d_type = DT_LNK; > + else > + dir->d_type = DT_REG; > + strlcpy((char *) &dir->d_name, np->rn_name, > + sizeof(dir->d_name)); > + } > + dir->d_fileno = fp->f_offset; > // dir->d_namelen = strlen(dir->d_name); > > - fp->f_offset++; > + fp->f_offset++; > > - mutex_unlock(&ramfs_lock); > - return 0; > + mutex_unlock(&ramfs_lock); > + return 0; > } > > int > ramfs_init(void) > { > - return 0; > + return 0; > } > > static int > ramfs_getattr(struct vnode *vnode, struct vattr *attr) > { > - attr->va_nodeid = vnode->v_ino; > - attr->va_size = vnode->v_size; > + attr->va_nodeid = vnode->v_ino; > + attr->va_size = vnode->v_size; > > - struct ramfs_node *np = (ramfs_node *) vnode->v_data; > - attr->va_type = (vtype) np->rn_type; > + struct ramfs_node *np = (ramfs_node *) vnode->v_data; > + attr->va_type = (vtype) np->rn_type; > > - memcpy(&(attr->va_atime), &(np->rn_atime), sizeof(struct timespec)); > - memcpy(&(attr->va_ctime), &(np->rn_ctime), sizeof(struct timespec)); > - memcpy(&(attr->va_mtime), &(np->rn_mtime), sizeof(struct timespec)); > + memcpy(&(attr->va_atime), &(np->rn_atime), sizeof(struct timespec)); > + memcpy(&(attr->va_ctime), &(np->rn_ctime), sizeof(struct timespec)); > + memcpy(&(attr->va_mtime), &(np->rn_mtime), sizeof(struct timespec)); > > - attr->va_mode = np->rn_mode; > + attr->va_mode = np->rn_mode; > > - return 0; > + return 0; > } > > static int > ramfs_setattr(struct vnode *vnode, struct vattr *attr) { > - struct ramfs_node *np = (ramfs_node *) vnode->v_data; > + struct ramfs_node *np = (ramfs_node *) vnode->v_data; > > - if (attr->va_mask & AT_ATIME) { > - memcpy(&(np->rn_atime), &(attr->va_atime), sizeof(struct timespec)); > - } > + if (attr->va_mask & AT_ATIME) { > + memcpy(&(np->rn_atime), &(attr->va_atime), sizeof(struct > timespec)); > + } > > - if (attr->va_mask & AT_CTIME) { > - memcpy(&(np->rn_ctime), &(attr->va_ctime), sizeof(struct timespec)); > - } > + if (attr->va_mask & AT_CTIME) { > + memcpy(&(np->rn_ctime), &(attr->va_ctime), sizeof(struct > timespec)); > + } > > - if (attr->va_mask & AT_MTIME) { > - memcpy(&(np->rn_mtime), &(attr->va_mtime), sizeof(struct timespec)); > - } > + if (attr->va_mask & AT_MTIME) { > + memcpy(&(np->rn_mtime), &(attr->va_mtime), sizeof(struct > timespec)); > + } > > - if (attr->va_mask & AT_MODE) { > - np->rn_mode = attr->va_mode; > - } > + if (attr->va_mask & AT_MODE) { > + np->rn_mode = attr->va_mode; > + } > > - return 0; > + return 0; > } > > #define ramfs_open ((vnop_open_t)vop_nullop) > @@ -642,28 +642,28 @@ ramfs_setattr(struct vnode *vnode, struct vattr *attr) { > * vnode operations > */ > struct vnops ramfs_vnops = { > - ramfs_open, /* open */ > - ramfs_close, /* close */ > - ramfs_read, /* read */ > - ramfs_write, /* write */ > - ramfs_seek, /* seek */ > - ramfs_ioctl, /* ioctl */ > - ramfs_fsync, /* fsync */ > - ramfs_readdir, /* readdir */ > - ramfs_lookup, /* lookup */ > - ramfs_create, /* create */ > - ramfs_remove, /* remove */ > - ramfs_rename, /* remame */ > - ramfs_mkdir, /* mkdir */ > - ramfs_rmdir, /* rmdir */ > - ramfs_getattr, /* getattr */ > - ramfs_setattr, /* setattr */ > - ramfs_inactive, /* inactive */ > - ramfs_truncate, /* truncate */ > - ramfs_link, /* link */ > - (vnop_cache_t) nullptr, /* arc */ > - ramfs_fallocate, /* fallocate */ > - ramfs_readlink, /* read link */ > - ramfs_symlink, /* symbolic link */ > + ramfs_open, /* open */ > + ramfs_close, /* close */ > + ramfs_read, /* read */ > + ramfs_write, /* write */ > + ramfs_seek, /* seek */ > + ramfs_ioctl, /* ioctl */ > + ramfs_fsync, /* fsync */ > + ramfs_readdir, /* readdir */ > + ramfs_lookup, /* lookup */ > + ramfs_create, /* create */ > + ramfs_remove, /* remove */ > + ramfs_rename, /* remame */ > + ramfs_mkdir, /* mkdir */ > + ramfs_rmdir, /* rmdir */ > + ramfs_getattr, /* getattr */ > + ramfs_setattr, /* setattr */ > + ramfs_inactive, /* inactive */ > + ramfs_truncate, /* truncate */ > + ramfs_link, /* link */ > + (vnop_cache_t) nullptr, /* arc */ > + ramfs_fallocate, /* fallocate */ > + ramfs_readlink, /* read link */ > + ramfs_symlink, /* symbolic link */ > }; > > -- > 2.19.2 > > > _______________________________________________ > Minios-devel mailing list > Minios-devel@xxxxxxxxxxxxxxxxxxxx > https://lists.xenproject.org/mailman/listinfo/minios-devel _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |