From ce05175372a9ddca1a225db0765ace1127a39293 Mon Sep 17 00:00:00 2001 From: Nicholas Date: Fri, 12 Nov 2021 09:22:01 -0800 Subject: chore: simplified organizational structure --- sys/base/fs/internal.h | 18 -------- sys/base/fs/rules.mk | 3 -- sys/base/fs/walk.c | 119 ------------------------------------------------- sys/base/fs/walker.c | 39 ---------------- 4 files changed, 179 deletions(-) delete mode 100644 sys/base/fs/internal.h delete mode 100644 sys/base/fs/rules.mk delete mode 100644 sys/base/fs/walk.c delete mode 100644 sys/base/fs/walker.c (limited to 'sys/base/fs') 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 -#include -#include -#include - -/* - * 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); - } -} -- cgit v1.2.1