aboutsummaryrefslogtreecommitdiff
path: root/sys/base/fs
diff options
context:
space:
mode:
authorNicholas <nbnoll@eml.cc>2021-11-12 09:22:01 -0800
committerNicholas <nbnoll@eml.cc>2021-11-12 09:22:01 -0800
commitce05175372a9ddca1a225db0765ace1127a39293 (patch)
tree5988b4d4f6b402e4953945886fc90aae11203df6 /sys/base/fs
parentb375f3cdedb5b0e08745d100b40e38d2f8396a58 (diff)
chore: simplified organizational structurelaptop
Diffstat (limited to 'sys/base/fs')
-rw-r--r--sys/base/fs/internal.h18
-rw-r--r--sys/base/fs/rules.mk3
-rw-r--r--sys/base/fs/walk.c119
-rw-r--r--sys/base/fs/walker.c39
4 files changed, 0 insertions, 179 deletions
diff --git a/sys/base/fs/internal.h b/sys/base/fs/internal.h
deleted file mode 100644
index 7fde093..0000000
--- a/sys/base/fs/internal.h
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <u.h>
-#include <base.h>
-#include <base/macro/map.h>
-#include <dirent.h>
-
-/*
- * path history
- */
-struct Key
-{
- ino_t ino;
- dev_t dev;
-};
-
-struct fs·History
-{
- SET_STRUCT_BODY(struct Key);
-};
diff --git a/sys/base/fs/rules.mk b/sys/base/fs/rules.mk
deleted file mode 100644
index 3927ae3..0000000
--- a/sys/base/fs/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-SRCS_$(d)+=\
- $(d)/fs/walk.c\
- $(d)/fs/walker.c\
diff --git a/sys/base/fs/walk.c b/sys/base/fs/walk.c
deleted file mode 100644
index d528896..0000000
--- a/sys/base/fs/walk.c
+++ /dev/null
@@ -1,119 +0,0 @@
-#include "internal.h"
-
-#define hash(k) ((int32)k.ino ^ (int32)k.dev)
-#define equal(k1, k2) (k1.ino == k2.ino && k1.dev == k2.dev)
-
-static
-int
-morehistory(fs·History *h, int n)
-{
- SET_GROW(h, struct Key, n, hash, sys·Memory, nil);
-}
-
-static
-int
-addentry(fs·History *h, struct Key key, int *err)
-{
- SET_PUT(h, key, hash, equal, morehistory, err);
-}
-
-static
-void
-forget(fs·History *h)
-{
- if (!h)
- return;
-
- SET_RESET(h);
-}
-
-void
-fs·walk(fs·Walker *fs)
-{
- char *e, *b;
- DIR *dir;
- int new, fd, ofd, flags;
- fs·History *h;
- struct dirent *d;
- io·Stat cwd;
- struct fs·Entry *it;
-
- flags = 0;
- if(fs->flags & fs·nolinks)
- flags |= AT_SYMLINK_NOFOLLOW;
-
- /* get info for base relative to current fd */
- if(fstatat(fs->fd, fs->base, &cwd, flags) < 0){
- if(fs->flags & fs·verbose)
- errorf("stat: %s", fs->path);
- return;
- }
-
- /* if we hit a file, finish! */
- if(!S_ISDIR(cwd.st_mode)) {
- fs->func(fs->data, fs->base, fs->path, &cwd);
- return;
- }
-
- /* have we been here before? (cycle detection) */
- /* if not, add to our path history */
- if (!(fs->flags & fs·nolinks)) {
- addentry(fs->hist, (struct Key){.dev=cwd.st_dev, .ino=cwd.st_ino}, &new);
- if (!new)
- return;
- }
-
- /*
- * operate on directory first if preorder traversal
- * truncate recursion if callback returns an error code
- */
- if (fs->flags & fs·preorder) {
- if (fs->func(fs->data, fs->base, fs->path, &cwd))
- return;
- }
-
- /* open directory */
- if(!fs->max || fs->lev + 1 < fs->max) {
- fd = openat(fs->fd, fs->base, O_RDONLY | O_CLOEXEC | O_DIRECTORY);
- if (fd < 0)
- errorf("open %s:", fs->path);
-
- if (!(dir=fdopendir(fd))) {
- if(fs->flags & fs·verbose)
- errorf("fdopendir: %s", fs->path);
- return;
- }
-
- ofd = fs->fd, fs->fd = fd;
-
- /* traverse children */
- e = fs->end, b = fs->base;
- if (fs->end[-1] != '/')
- *fs->end++ = '/';
-
- fs->base = fs->end;
- while((d = readdir(dir))) {
- if(*d->d_name == '.')
- if(d->d_name[1] == 0 || /* . */
- (d->d_name[1] == '.' && d->d_name[2] == 0)) /* .. */
- continue;
-
- fs->end = str·copyn(fs->base, d->d_name, arrend(fs->path) - fs->base);
-
- fs->lev++;
- fs·walk(fs);
- fs->lev--;
- }
- *e = 0;
- fs->fd = ofd;
- fs->end = e, fs->base = b;
- closedir(dir);
- }
-
- /* operate on directory if postorder (default) traversal */
- if (!(fs->flags & fs·preorder))
- fs->func(fs->data, fs->base, fs->path, &cwd);
-
- if (!fs->lev)
- forget(fs->hist);
-}
diff --git a/sys/base/fs/walker.c b/sys/base/fs/walker.c
deleted file mode 100644
index 65ff391..0000000
--- a/sys/base/fs/walker.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "internal.h"
-
-static
-void
-delete(fs·History *h)
-{
- SET_FREE(h, sys·Memory, nil);
-}
-
-int
-fs·init(fs·Walker *fs, char *path)
-{
- fs->base = fs->end = fs->path;
-
- if(!path || !path[0]){
- path = getcwd(fs->path, arrlen(fs->path));
- if (!path)
- return 1;
- fs->end += strlen(path);
- }else
- fs->end = str·copyn(fs->base, path, arrlen(fs->path));
-
- if(fs->path[0] != '/')
- fs->fd = AT_FDCWD;
-
- if(!fs->hist && !(fs->flags & fs·nolinks))
- fs->hist = calloc(1, sizeof(*fs->hist));
-
- return 0;
-}
-
-void
-fs·fini(fs·Walker *fs)
-{
- if(fs->hist){
- delete(fs->hist);
- free(fs->hist);
- }
-}