2011-03-30 12:46:40 +00:00
|
|
|
#define _LOCK_EXTENSION
|
|
|
|
#define _QLOCK_EXTENSION
|
|
|
|
#define _BSD_EXTENSION
|
2016-04-11 18:23:34 +00:00
|
|
|
|
|
|
|
#ifdef _NET_EXTENSION
|
|
|
|
#include <libnet.h>
|
|
|
|
#endif
|
|
|
|
|
2016-04-10 01:01:37 +00:00
|
|
|
#include <stdint.h>
|
2011-03-30 12:46:40 +00:00
|
|
|
#include <sys/types.h>
|
|
|
|
#include <lock.h>
|
|
|
|
#include <qlock.h>
|
|
|
|
#include <lib9.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <bsd.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <assert.h>
|
|
|
|
#include <utf.h>
|
|
|
|
#include <fmt.h>
|
|
|
|
#include <signal.h>
|
2016-04-11 18:23:34 +00:00
|
|
|
#include <time.h>
|
2011-03-30 12:46:40 +00:00
|
|
|
|
2016-04-10 01:01:37 +00:00
|
|
|
#define nelem(x) (sizeof(x)/sizeof((x)[0]))
|
|
|
|
|
2011-03-30 12:46:40 +00:00
|
|
|
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 <u.h> */
|
|
|
|
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*);
|
|
|
|
|
2016-04-11 18:23:34 +00:00
|
|
|
#define convM2D _convM2D
|
|
|
|
#define convD2M _convD2M
|
|
|
|
#define dirstat _dirstat
|
|
|
|
#define dirwstat _dirwstat
|
|
|
|
#define dirfstat _dirfstat
|
|
|
|
#define dirfwstat _dirfwstat
|
|
|
|
#define dirread _dirread
|
|
|
|
#define dirreadall _dirreadall
|
|
|
|
#define nulldir _nulldir
|
|
|
|
#define sizeD2M _sizeD2M
|
|
|
|
|
2011-03-30 12:46:40 +00:00
|
|
|
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*);
|
2013-05-11 16:34:40 +00:00
|
|
|
extern void* _RENDEZVOUS(void*, void*);
|
2011-03-30 12:46:40 +00:00
|
|
|
extern int _RFORK(int);
|
2013-05-11 16:34:40 +00:00
|
|
|
extern void* _SEGATTACH(int, char*, void*, unsigned long);
|
|
|
|
extern void* _SEGBRK(void*, void*);
|
2011-03-30 12:46:40 +00:00
|
|
|
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);
|
2016-04-10 01:01:37 +00:00
|
|
|
extern void* _MALLOCZ(int, int);
|
2011-03-30 12:46:40 +00:00
|
|
|
extern int _WERRSTR(char*, ...);
|
|
|
|
extern long _READN(int, void*, long);
|
|
|
|
extern int _IOUNIT(int);
|
2016-04-10 01:01:37 +00:00
|
|
|
extern vlong _NSEC(void);
|
2011-03-30 12:46:40 +00:00
|
|
|
|
|
|
|
#define OREAD 0
|
|
|
|
#define OWRITE 1
|
|
|
|
#define ORDWR 2
|
2016-04-11 18:23:34 +00:00
|
|
|
#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) */
|
2011-03-30 12:46:40 +00:00
|
|
|
|
|
|
|
#define AREAD 4
|
|
|
|
#define AWRITE 2
|
|
|
|
#define AEXEC 1
|
|
|
|
#define AEXIST 0
|
|
|
|
|
|
|
|
#define _exits(s) _exit(s && *(char*)s ? 1 : 0)
|
|
|
|
#define exits(s) exit(s && *(char*)s ? 1 : 0)
|
2016-04-10 01:01:37 +00:00
|
|
|
|
|
|
|
#define create(file, omode, perm) open(file, (omode) |O_CREAT | O_TRUNC, perm)
|
|
|
|
#define seek(fd, off, dir) lseek(fd, off, dir)
|
|
|
|
|
2016-04-11 18:23:34 +00:00
|
|
|
#define fauth _FAUTH
|
|
|
|
#define wait _WAIT
|
2011-03-30 12:46:40 +00:00
|
|
|
#define readn _READN
|
2016-04-10 01:01:37 +00:00
|
|
|
#define pread _PREAD
|
|
|
|
#define pwrite _PWRITE
|
2011-03-30 12:46:40 +00:00
|
|
|
#define mallocz _MALLOCZ
|
2016-04-10 01:01:37 +00:00
|
|
|
#define nsec _NSEC
|
2011-03-30 12:46:40 +00:00
|
|
|
#define iounit _IOUNIT
|
2020-05-12 22:17:07 +00:00
|
|
|
#define sleep _SLEEP
|
2011-03-30 12:46:40 +00:00
|
|
|
|
2016-04-11 18:23:34 +00:00
|
|
|
#define getwd(buf,len) getcwd(buf,len)
|
2016-04-10 01:01:37 +00:00
|
|
|
#define postnote(who,pid,note) kill(pid,SIGTERM)
|
|
|
|
#define atnotify(func,in)
|
2011-03-30 12:46:40 +00:00
|
|
|
|
|
|
|
#define ERRMAX 128
|
|
|
|
|
2016-04-11 18:23:34 +00:00
|
|
|
int errstr(char*, unsigned int);
|
2020-06-05 18:28:47 +00:00
|
|
|
void rerrstr(char*, unsigned int);
|
2016-04-11 18:23:34 +00:00
|
|
|
extern void sysfatal(char*, ...);
|
|
|
|
|
2016-04-10 01:01:37 +00:00
|
|
|
extern void setmalloctag(void*, uintptr_t);
|
|
|
|
extern void setrealloctag(void*, uintptr_t);
|
|
|
|
extern uintptr_t getcallerpc(void*);
|
|
|
|
|
|
|
|
extern int dec16(uchar *, int, char *, int);
|
|
|
|
extern int enc16(char *, int, uchar *, int);
|
|
|
|
extern int dec32(uchar *, int, char *, int);
|
|
|
|
extern int enc32(char *, int, uchar *, int);
|
|
|
|
extern int dec64(uchar *, int, char *, int);
|
|
|
|
extern int enc64(char *, int, uchar *, int);
|
|
|
|
|
2017-12-31 09:53:50 +00:00
|
|
|
extern int dec64chr(int);
|
|
|
|
extern int enc64chr(int);
|
|
|
|
extern int dec32chr(int);
|
|
|
|
extern int enc32chr(int);
|
|
|
|
extern int dec16chr(int);
|
|
|
|
extern int enc16chr(int);
|
|
|
|
|
2021-10-31 04:42:34 +00:00
|
|
|
extern int idn2utf(char *, char *, int);
|
|
|
|
extern int utf2idn(char *, char *, int);
|
|
|
|
|
2016-04-11 18:23:34 +00:00
|
|
|
extern int tokenize(char*, char**, int);
|
|
|
|
extern int getfields(char*, char**, int, int, char*);
|
|
|
|
extern int gettokens(char*, char**, int, char*);
|
|
|
|
|
|
|
|
extern ulong truerand(void); /* uses /dev/random */
|
|
|
|
|
|
|
|
extern int encrypt(void*, void*, int len);
|
|
|
|
extern int decrypt(void*, void*, int len);
|
|
|
|
|
|
|
|
typedef
|
|
|
|
struct Tm
|
|
|
|
{
|
|
|
|
int sec;
|
|
|
|
int min;
|
|
|
|
int hour;
|
|
|
|
int mday;
|
|
|
|
int mon;
|
|
|
|
int year;
|
|
|
|
int wday;
|
|
|
|
int yday;
|
|
|
|
char zone[4];
|
|
|
|
int tzoff;
|
|
|
|
} Tm;
|
|
|
|
|
|
|
|
Tm* _gmtime(time_t);
|
|
|
|
#define gmtime _gmtime
|