#pragma once #define iota(x) 1 << (x) enum { fs·preorder = iota(0), fs·nolinks = iota(1), fs·verbose = iota(2), }; #undef iota typedef struct fs·Walker fs·Walker; typedef struct fs·History fs·History; typedef sys·DirEntry fs·DirEntry; typedef sys·Directory fs·Directory; /* node in filesystem */ // XXX: simplify with our newer code /* walk a filesystem hierarchy */ struct fs·Walker { int fd, lev, max, err; uchar flags : 4; fs·History *hist; struct { void *data; int (*func)(void *data, char *relp, char *absp, struct stat *info); }; char *base, *end, path[4096]; }; int fs·init(fs·Walker *, char *path); void fs·fini(fs·Walker *); void fs·walk(fs·Walker *); /* small utilities */ int fs·exists(byte *path, int flag); byte *fs·dirname(byte *path); byte *fs·basename(byte *path);