add from libc - sysfatal, tokenize (Rune version; cf libv), truerand, u(16|32|64), crypt new file - nsec (simplified from libc, use internal versions like _READ) Reference: /n/atom/patch/applied2013/ape9nsec Date: Tue May 28 03:11:07 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/ape/lib/9/nsec.c Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/9/nsec.c Tue May 28 03:11:07 2013 @@ -0,0 +1,32 @@ +#include +#include "libc.h" + +static uvlong border = 0x0001020304050607ull; + +static uvlong +getbe(uchar *t, int w) +{ + uint i; + uvlong r; + + r = 0; + for(i = 0; i < w; i++) + r = r<<8 | t[i]; + return r; +} + +vlong +nsec(void) +{ + uchar b[8]; + int fd; + vlong v; + + fd = _OPEN("/dev/bintime", OREAD); + if(fd != -1 && _PREAD(fd, b, 8, 0) == 8) + v = getbe(b, 8); + else + v = 0; + _CLOSE(fd); + return v; +} --- /sys/src/ape/lib/9/libc.h Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/9/libc.h Tue May 28 03:11:08 2013 @@ -0,0 +1,175 @@ +#define _LOCK_EXTENSION +#define _QLOCK_EXTENSION +#define _BSD_EXTENSION +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) + +extern int tokenize(char*, char**, int); + +typedef +struct Qid +{ + uvlong path; + ulong vers; + uchar type; +} Qid; + +typedef +struct Dir { + /* system-modified data */ + ushort type; /* server type */ + uint dev; /* server subtype */ + /* file data */ + Qid qid; /* unique id from server */ + ulong mode; /* permissions */ + ulong atime; /* last read time */ + ulong mtime; /* last write time */ + vlong length; /* file length: see */ + char *name; /* last element of path */ + char *uid; /* owner name */ + char *gid; /* group name */ + char *muid; /* last modifier name */ +} Dir; + +uint _convM2D(uchar*, uint, Dir*, char*); +uint _convD2M(Dir*, uchar*, uint); +Dir *_dirstat(char*); +int _dirwstat(char*, Dir*); +Dir *_dirfstat(int); +int _dirfwstat(int, Dir*); +long _dirread(int, Dir**); +long _dirreadall(int, Dir**); +void _nulldir(Dir*); +uint _sizeD2M(Dir*); + +typedef +struct Waitmsg +{ + int pid; /* of loved one */ + unsigned long time[3]; /* of loved one & descendants */ + char *msg; +} Waitmsg; + + +extern int _AWAIT(char*, int); +extern int _ALARM(unsigned long); +extern int _BIND(const char*, const char*, int); +extern int _CHDIR(const char*); +extern int _CLOSE(int); +extern int _CREATE(char*, int, unsigned long); +extern int _DUP(int, int); +extern int _ERRSTR(char*, unsigned int); +extern int _EXEC(char*, char*[]); +extern void _EXITS(char *); +extern int _FD2PATH(int, char*, int); +extern int _FAUTH(int, char*); +extern int _FSESSION(int, char*, int); +extern int _FSTAT(int, unsigned char*, int); +extern int _FWSTAT(int, unsigned char*, int); +extern int _MOUNT(int, int, const char*, int, const char*); +extern int _NOTED(int); +extern int _NOTIFY(int(*)(void*, char*)); +extern int _OPEN(const char*, int); +extern int _PIPE(int*); +extern long _PREAD(int, void*, long, long long); +extern long _PWRITE(int, void*, long, long long); +extern long _READ(int, void*, long); +extern int _REMOVE(const char*); +extern void* _RENDEZVOUS(void*, void*); +extern int _RFORK(int); +extern void* _SEGATTACH(int, char*, void*, unsigned long); +extern void* _SEGBRK(void*, void*); +extern int _SEGDETACH(void*); +extern int _SEGFLUSH(void*, unsigned long); +extern int _SEGFREE(void*, unsigned long); +extern long long _SEEK(int, long long, int); +extern int _SLEEP(long); +extern int _STAT(const char*, unsigned char*, int); +extern Waitmsg* _WAIT(void); +extern long _WRITE(int, const void*, long); +extern int _WSTAT(const char*, unsigned char*, int); +extern long _READN(int, void*, long); +extern int _IOUNIT(int); + +extern void *_MALLOCZ(int, int); /* not a syscall */ + +#define dirstat _dirstat +#define dirfstat _dirfstat + +#define OREAD 0 +#define OWRITE 1 +#define ORDWR 2 +#define OEXEC 3 /* execute, == read but check execute permission */ +#define OTRUNC 16 /* or'ed in (except for exec), truncate file first */ +#define OCEXEC 32 /* or'ed in, close on exec */ +#define ORCLOSE 64 /* or'ed in, remove on close */ +#define OEXCL 0x1000 /* or'ed in, exclusive use (create only) */ + +#define AREAD 4 +#define AWRITE 2 +#define AEXEC 1 +#define AEXIST 0 + +#ifdef thisisallgoingtoendintears +#define open _OPEN +#define close _CLOSE +#define read _READ +#define write _WRITE +#define create _CREATE +#define pread _PREAD +#define seek _SEEK +#endif + +/* we don't have fauth(), so let this slide */ +#define fauth _FAUTH +/* neither iounit */ +#define iounit _IOUNIT +#define wait _WAIT + +#define create(file, omode, perm) open(file, (omode) |O_CREAT | O_TRUNC, perm) +#define readn _READN +#define mallocz _MALLOCZ + +#define _exits(s) _exit(s && *(char*)s ? 1 : 0) +#define exits(s) exit(s && *(char*)s ? 1 : 0) +/* assume being called as in event.c */ +#define postnote(x, pid, msg) kill(pid, SIGTERM) +#define atnotify(x, y) signal(SIGTERM, NULL) + +#define ERRMAX 128 + +extern void setmalloctag(void*, ulong); +extern ulong getcallerpc(void*); + +/* Used in libsec.h and not picked up in earlier type definitions */ +typedef unsigned int u32int; +typedef unsigned long long u64int; + +int dec16(uchar *, int, char *, int); +int enc16(char *, int, uchar *, int); +int dec32(uchar *, int, char *, int); +int enc32(char *, int, uchar *, int); +int dec64(uchar *, int, char *, int); +int enc64(char *, int, uchar *, int); +int decrypt(void*, void*, int); +int encrypt(void*, void*, int); + +extern vlong nsec(void); + +extern void sysfatal(char*, ...); + +extern ulong truerand(void); /* uses /dev/random */ --- /sys/src/ape/lib/9/mkfile Thu Jan 1 00:00:00 1970 +++ /sys/src/ape/lib/9/mkfile Tue May 28 03:11:08 2013 @@ -0,0 +1,56 @@ +APE=/sys/src/ape +<$APE/config + +LIB=/$objtype/lib/ape/lib9.a +OFILES=errstr.$O\ + bind.$O\ + crypt.$O\ + getcallerpc.$O\ + getfcr.$O\ + mount.$O\ + nsec.$O\ + rendezvous.$O\ + rfork.$O\ + segattach.$O\ + segdetach.$O\ + segflush.$O\ + segfree.$O\ + setmalloctag.$O\ + sysfatal.$O\ + tokenize.$O\ + truerand.$O\ + u16.$O\ + u32.$O\ + u64.$O\ + unmount.$O\ + +