aboutsummaryrefslogtreecommitdiff
path: root/include/libn.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libn.h')
-rw-r--r--include/libn.h56
1 files changed, 44 insertions, 12 deletions
diff --git a/include/libn.h b/include/libn.h
index f30a761..81ddc9f 100644
--- a/include/libn.h
+++ b/include/libn.h
@@ -100,7 +100,7 @@ uintptr coro·yield(Coro *c, uintptr arg);
error coro·free(Coro *c);
// -----------------------------------------------------------------------------
-// Strings
+// strings
typedef byte* string;
@@ -161,7 +161,7 @@ int utf8·isspace(rune r);
int utf8·istitle(rune r);
// -----------------------------------------------------------------------------
-// I/O
+// i/o
typedef FILE Stream;
typedef struct stat io·Stat;
@@ -300,6 +300,37 @@ mmap·Reader mmap·open(byte *name);
error mmap·close(mmap·Reader rdr);
// -----------------------------------------------------------------------------
+// filesystem
+
+#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;
+
+struct fs·Walker
+{
+ int fd, lev, max, err;
+ uchar flags : 4;
+ fs·History *hist;
+ struct {
+ void *data;
+ void (*func)(void *data, char *relp, char *absp, io·Stat* info);
+ };
+ char *base, *end, path[4096];
+};
+
+int fs·init(fs·Walker *, char *path);
+void fs·fini(fs·Walker *);
+void fs·walk(fs·Walker *);
+
+// -----------------------------------------------------------------------------
// libflate
// NOTE: Experimental!
@@ -339,6 +370,7 @@ vlong gz·seek(gz·Stream *s, long off, enum SeekPos whence);
// -----------------------------------------------------------------------------
// error handling functions
+void exits(char *s);
void errorf(byte* fmt, ...);
void verrorf(byte* fmt, va_list args);
void panicf(byte *fmt, ...);
@@ -389,16 +421,16 @@ uint64 rng·randi(int max);
#endif
extern char *argv0;
-#define ARGBEGIN for((argv0?0:(argv0=*argv)),argv++,argc--;\
- argv[0] && argv[0][0]=='-' && argv[0][1];\
- argc--, argv++) {\
- byte *_args, *_argt;\
- rune _argc;\
- _args = &argv[0][1];\
- if(_args[0]=='-' && _args[1]==0){\
- argc--; argv++; break;\
- }\
- _argc = 0;\
+#define ARGBEGIN for((argv0?0:(argv0=*argv)),argv++,argc--; \
+ argv[0] && argv[0][0]=='-' && argv[0][1]; \
+ argc--, argv++) { \
+ byte *_args, *_argt; \
+ rune _argc; \
+ _args = &argv[0][1]; \
+ if(_args[0]=='-' && _args[1]==0){ \
+ argc--; argv++; break; \
+ } \
+ _argc = 0; \
while(*_args && (_args += utf8·bytetorune(&_argc, _args)))\
switch(_argc)
#define ARGEND SET(_argt);USED(_argt);USED(_argc);USED(_args);}USED(argv);USED(argc);