diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/libn.h | 56 | ||||
-rw-r--r-- | include/u.h | 5 |
2 files changed, 47 insertions, 14 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); diff --git a/include/u.h b/include/u.h index 617e41b..3cf3c7b 100644 --- a/include/u.h +++ b/include/u.h @@ -59,5 +59,6 @@ typedef int error; #define arrlen(Array) (sizeof(Array) / sizeof((Array)[0]))
#define arrend(Array) ((Array) + arrlen(Array))
-#define MAX(x, y) ((x) >= (y) ? (x) : (y))
-#define MIN(x, y) ((x) < (y) ? (x) : (y))
+#define MAX(x, y) (((x) > (y)) ? (x) : (y))
+#define MIN(x, y) (((x) < (y)) ? (x) : (y))
+#define CLAMP(x, lo, hi) (((x) < (lo)) ? (lo) : (((x) > (hi)) ? (hi) : (x)))
|