summaryrefslogtreecommitdiff
path: root/include/libc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libc.h')
-rw-r--r--include/libc.h382
1 files changed, 0 insertions, 382 deletions
diff --git a/include/libc.h b/include/libc.h
deleted file mode 100644
index a91039dbf..000000000
--- a/include/libc.h
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
-Derived from Inferno include/kern.h and
-Plan 9 from User Space include/libc.h
-
-http://code.google.com/p/inferno-os/source/browse/include/kern.h
-http://code.swtch.com/plan9port/src/tip/include/libc.h
-
- Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
- Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com). All rights reserved.
- Portions Copyright © 2001-2007 Russ Cox. All rights reserved.
- Portions Copyright © 2009 The Go Authors. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-/*
- * Lib9 is miscellany from the Plan 9 C library that doesn't
- * fit into libutf or into libfmt, but is still missing from traditional
- * Unix C libraries.
- */
-#ifndef _LIBC_H_
-#define _LIBC_H_ 1
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
-#include <utf.h>
-#include <fmt.h>
-
-/*
- * Begin trimmed down usual libc.h
- */
-
-#ifndef nil
-#define nil ((void*)0)
-#endif
-#define nelem(x) (sizeof(x)/sizeof((x)[0]))
-
-#ifndef offsetof
-#define offsetof(s, m) (ulong)(&(((s*)0)->m))
-#endif
-
-extern char* strecpy(char*, char*, char*);
-extern int tokenize(char*, char**, int);
-
-extern double p9cputime(void);
-#ifndef NOPLAN9DEFINES
-#define cputime p9cputime
-#endif
-/*
- * one-of-a-kind
- */
-enum
-{
- PNPROC = 1,
- PNGROUP = 2
-};
-int isInf(double, int);
-
-extern int p9atoi(char*);
-extern long p9atol(char*);
-extern vlong p9atoll(char*);
-extern double fmtcharstod(int(*)(void*), void*);
-extern char* cleanname(char*);
-extern int exitcode(char*);
-extern void exits(char*);
-extern double frexp(double, int*);
-extern char* p9getenv(char*);
-extern int p9putenv(char*, char*);
-extern int getfields(char*, char**, int, int, char*);
-extern int gettokens(char *, char **, int, char *);
-extern char* getuser(void);
-extern char* p9getwd(char*, int);
-extern void p9longjmp(p9jmp_buf, int);
-extern char* mktemp(char*);
-extern int opentemp(char*);
-extern void p9notejmp(void*, p9jmp_buf, int);
-extern void perror(const char*);
-extern int postnote(int, int, char *);
-extern double p9pow10(int);
-extern char* searchpath(char*);
-#define p9setjmp(b) sigsetjmp((void*)(b), 1)
-
-extern void sysfatal(char*, ...);
-
-#ifndef NOPLAN9DEFINES
-#define atoi p9atoi
-#define atol p9atol
-#define atoll p9atoll
-#define getenv p9getenv
-#define getwd p9getwd
-#define longjmp p9longjmp
-#undef setjmp
-#define setjmp p9setjmp
-#define putenv p9putenv
-#define notejmp p9notejmp
-#define jmp_buf p9jmp_buf
-#define pow10 p9pow10
-#define strtod fmtstrtod
-#define charstod fmtcharstod
-#endif
-
-/*
- * system calls
- *
- */
-#define STATMAX 65535U /* max length of machine-independent stat structure */
-#define DIRMAX (sizeof(Dir)+STATMAX) /* max length of Dir structure */
-#define ERRMAX 128 /* max length of error string */
-
-#define MORDER 0x0003 /* mask for bits defining order of mounting */
-#define MREPL 0x0000 /* mount replaces object */
-#define MBEFORE 0x0001 /* mount goes before others in union directory */
-#define MAFTER 0x0002 /* mount goes after others in union directory */
-#define MCREATE 0x0004 /* permit creation in mounted directory */
-#define MCACHE 0x0010 /* cache some data */
-#define MMASK 0x0017 /* all bits on */
-
-#define OREAD 0 /* open for read */
-#define OWRITE 1 /* write */
-#define ORDWR 2 /* read and write */
-#define OEXEC 3 /* execute, == read but check execute permission */
-#define OTRUNC 16 /* or'ed in (except for exec), truncate file first */
-#define ORCLOSE 64 /* or'ed in, remove on close */
-#define ODIRECT 128 /* or'ed in, direct access */
-#define OEXCL 0x1000 /* or'ed in, exclusive use (create only) */
-#define OAPPEND 0x4000 /* or'ed in, append only */
-
-#define AEXIST 0 /* accessible: exists */
-#define AEXEC 1 /* execute access */
-#define AWRITE 2 /* write access */
-#define AREAD 4 /* read access */
-
-/* Segattch */
-#define SG_RONLY 0040 /* read only */
-#define SG_CEXEC 0100 /* detach on exec */
-
-#define NCONT 0 /* continue after note */
-#define NDFLT 1 /* terminate after note */
-#define NSAVE 2 /* clear note but hold state */
-#define NRSTR 3 /* restore saved state */
-
-/* bits in Qid.type */
-#define QTDIR 0x80 /* type bit for directories */
-#define QTAPPEND 0x40 /* type bit for append only files */
-#define QTEXCL 0x20 /* type bit for exclusive use files */
-#define QTMOUNT 0x10 /* type bit for mounted channel */
-#define QTAUTH 0x08 /* type bit for authentication file */
-#define QTTMP 0x04 /* type bit for non-backed-up file */
-#define QTSYMLINK 0x02 /* type bit for symbolic link */
-#define QTFILE 0x00 /* type bits for plain file */
-
-/* bits in Dir.mode */
-#define DMDIR 0x80000000 /* mode bit for directories */
-#define DMAPPEND 0x40000000 /* mode bit for append only files */
-#define DMEXCL 0x20000000 /* mode bit for exclusive use files */
-#define DMMOUNT 0x10000000 /* mode bit for mounted channel */
-#define DMAUTH 0x08000000 /* mode bit for authentication file */
-#define DMTMP 0x04000000 /* mode bit for non-backed-up file */
-#define DMSYMLINK 0x02000000 /* mode bit for symbolic link (Unix, 9P2000.u) */
-#define DMDEVICE 0x00800000 /* mode bit for device file (Unix, 9P2000.u) */
-#define DMNAMEDPIPE 0x00200000 /* mode bit for named pipe (Unix, 9P2000.u) */
-#define DMSOCKET 0x00100000 /* mode bit for socket (Unix, 9P2000.u) */
-#define DMSETUID 0x00080000 /* mode bit for setuid (Unix, 9P2000.u) */
-#define DMSETGID 0x00040000 /* mode bit for setgid (Unix, 9P2000.u) */
-
-#define DMREAD 0x4 /* mode bit for read permission */
-#define DMWRITE 0x2 /* mode bit for write permission */
-#define DMEXEC 0x1 /* mode bit for execute permission */
-
-#ifdef RFMEM /* FreeBSD, OpenBSD */
-#undef RFFDG
-#undef RFNOTEG
-#undef RFPROC
-#undef RFMEM
-#undef RFNOWAIT
-#undef RFCFDG
-#undef RFNAMEG
-#undef RFENVG
-#undef RFCENVG
-#undef RFCFDG
-#undef RFCNAMEG
-#endif
-
-enum
-{
- RFNAMEG = (1<<0),
- RFENVG = (1<<1),
- RFFDG = (1<<2),
- RFNOTEG = (1<<3),
- RFPROC = (1<<4),
- RFMEM = (1<<5),
- RFNOWAIT = (1<<6),
- RFCNAMEG = (1<<10),
- RFCENVG = (1<<11),
- RFCFDG = (1<<12)
-/* RFREND = (1<<13), */
-/* RFNOMNT = (1<<14) */
-};
-
-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 */
- char *name; /* last element of path */
- char *uid; /* owner name */
- char *gid; /* group name */
- char *muid; /* last modifier name */
-
- /* 9P2000.u extensions */
- uint uidnum; /* numeric uid */
- uint gidnum; /* numeric gid */
- uint muidnum; /* numeric muid */
- char *ext; /* extended info */
-} Dir;
-
-typedef
-struct Waitmsg
-{
- int pid; /* of loved one */
- ulong time[3]; /* of loved one & descendants */
- char *msg;
-} Waitmsg;
-
-extern void _exits(char*);
-
-extern void abort(void);
-extern long p9alarm(ulong);
-extern int await(char*, int);
-extern int awaitfor(int, char*, int);
-extern int awaitnohang(char*, int);
-extern int p9chdir(char*);
-extern int close(int);
-extern int p9create(char*, int, ulong);
-extern int p9dup(int, int);
-extern int errstr(char*, uint);
-extern int p9exec(char*, char*[]);
-extern int p9execl(char*, ...);
-extern int p9rfork(int);
-extern int noted(int);
-extern int notify(void(*)(void*, char*));
-extern int noteenable(char*);
-extern int notedisable(char*);
-extern int notifyon(char*);
-extern int notifyoff(char*);
-extern int p9open(char*, int);
-extern int fd2path(int, char*, int);
-extern long readn(int, void*, long);
-extern int remove(const char*);
-extern vlong p9seek(int, vlong, int);
-extern int p9sleep(long);
-extern Waitmsg* p9wait(void);
-extern Waitmsg* p9waitfor(int);
-extern Waitmsg* waitnohang(void);
-extern int p9waitpid(void);
-extern ulong rendezvous(ulong, ulong);
-
-extern char* getgoos(void);
-extern char* getgoarch(void);
-extern char* getgoroot(void);
-extern char* getgoversion(void);
-
-#ifdef _WIN32
-struct timespec {
- int tv_sec;
- long tv_nsec;
-};
-extern int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);
-extern int fork(void);
-extern int pread(int fd, void *buf, int n, int off);
-extern int pwrite(int fd, void *buf, int n, int off);
-#define execv(prog, argv) execv(prog, (const char* const*)(argv))
-#define execvp(prog, argv) execvp(prog, (const char**)(argv))
-#define lseek(fd, n, base) _lseeki64(fd, n, base)
-#define mkdir(path, perm) mkdir(path)
-#define pipe(fd) _pipe(fd, 512, O_BINARY)
-#else
-#define O_BINARY 0
-#endif
-
-#ifndef NOPLAN9DEFINES
-#define alarm p9alarm
-#define dup p9dup
-#define exec p9exec
-#define execl p9execl
-#define seek p9seek
-#define sleep p9sleep
-#define wait p9wait
-#define waitpid p9waitpid
-#define rfork p9rfork
-#define create p9create
-#undef open
-#define open p9open
-#define waitfor p9waitfor
-#endif
-
-extern Dir* dirstat(char*);
-extern Dir* dirfstat(int);
-extern int dirwstat(char*, Dir*);
-extern int dirfwstat(int, Dir*);
-extern void nulldir(Dir*);
-extern long dirreadall(int, Dir**);
-extern void rerrstr(char*, uint);
-extern char* sysname(void);
-extern void werrstr(char*, ...);
-extern char* getns(void);
-extern char* get9root(void);
-extern char* unsharp(char*);
-
-/* external names that we don't want to step on */
-#ifndef NOPLAN9DEFINES
-#define main p9main
-#endif
-
-/* compiler directives on plan 9 */
-#define SET(x) ((x)=0)
-#define USED(x) if(x){}else{}
-#ifdef __GNUC__
-# if __GNUC__ >= 3
-# undef USED
-# define USED(x) ((void)(x))
-# endif
-#endif
-
-/* command line */
-extern char *argv0;
-extern void __fixargv0(void);
-#define ARGBEGIN for((argv0?0:(argv0=(__fixargv0(),*argv))),argv++,argc--;\
- argv[0] && argv[0][0]=='-' && argv[0][1];\
- argc--, argv++) {\
- char *_args, *_argt;\
- Rune _argc;\
- _args = &argv[0][1];\
- if(_args[0]=='-' && _args[1]==0){\
- argc--; argv++; break;\
- }\
- _argc = 0;\
- while(*_args && (_args += chartorune(&_argc, _args)))\
- switch(_argc)
-#define ARGEND SET(_argt);USED(_argt);USED(_argc);USED(_args);}USED(argv);USED(argc);
-#define ARGF() (_argt=_args, _args="",\
- (*_argt? _argt: argv[1]? (argc--, *++argv): 0))
-#define EARGF(x) (_argt=_args, _args="",\
- (*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0)))
-
-#define ARGC() _argc
-
-#if defined(__cplusplus)
-}
-#endif
-#endif /* _LIB9_H_ */