Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* magic to get SUSV2 standard, including pread, pwrite*/
2
#define _XOPEN_SOURCE 500
3
/* magic to get 64-bit pread/pwrite */
4
#define _LARGEFILE64_SOURCE
5
/* magic to get 64-bit stat on Linux, maybe others */
6
#define _FILE_OFFSET_BITS 64
7
 
8
#ifdef sgi
9
#define _BSD_TYPES	1	/* for struct timeval */
10
#include <sys/select.h>
11
#define _BSD_SOURCE	1	/* for ruserok */
12
/*
13
 * SGI IRIX 5.x doesn't allow inclusion of both inttypes.h and
14
 * sys/types.h.  These definitions are the ones we need from
15
 * inttypes.h that aren't in sys/types.h.
16
 *
17
 * Unlike most of our #ifdef's, IRIX5X must be set in the makefile.
18
 */
19
#ifdef IRIX5X
20
#define __inttypes_INCLUDED
21
typedef unsigned int            uint32_t;
22
typedef signed long long int    int64_t;
23
typedef unsigned long long int  uint64_t;
24
#endif /* IRIX5X */
25
#endif /* sgi */
26
 
27
 
28
#ifdef sun	/* sparc and __svr4__ are also defined on the offending machine */
29
#define __EXTENSIONS__	1	/* for struct timeval */
30
#endif
31
 
32
#include <inttypes.h>		/* for int64_t et al. */
33
#include <stdlib.h>
34
#include <stdarg.h>		/* for va_list, vararg macros */
35
#ifndef va_copy
36
#ifdef __va_copy
37
#define va_copy	__va_copy
38
#else
39
#define va_copy(d, s)	memmove(&(d), &(s), sizeof(va_list))
40
#endif /* __va_copy */
41
#endif /* va_copy */
42
#include <sys/types.h>
43
#include <string.h>		/* for memmove */
44
#include <unistd.h>		/* for write */
45
#include <fcntl.h>
46
 
47
#define ulong p9ulong		/* because sys/types.h has some of these sometimes */
48
#define ushort p9ushort
49
#define uchar p9uchar
50
#define uint p9uint
51
#define vlong p9vlong
52
#define uvlong p9uvlong
53
#define u32int p9u32int
54
 
55
typedef unsigned char uchar;
56
typedef unsigned short ushort;
57
typedef unsigned long ulong;
58
typedef unsigned int uint;
59
typedef int64_t vlong;
60
typedef uint64_t uvlong;
61
typedef uint32_t u32int;
62
typedef uint64_t u64int;
63
typedef ushort Rune;
64
 
65
#define nil ((void*)0)
66
#define	nelem(x)	(sizeof(x)/sizeof((x)[0]))
67
#ifndef offsetof
68
#define	offsetof(s, m)	(ulong)(&(((s*)0)->m))
69
#endif
70
#define	assert(x)	if(x);else _assert("x")
71
 
72
extern char *argv0;
73
#define	ARGBEGIN	for((void)(argv0||(argv0=*argv)),argv++,argc--;\
74
			    argv[0] && argv[0][0]=='-' && argv[0][1];\
75
			    argc--, argv++) {\
76
				char *_args, *_argt;\
77
				Rune _argc;\
78
				_args = &argv[0][1];\
79
				if(_args[0]=='-' && _args[1]==0){\
80
					argc--; argv++; break;\
81
				}\
82
				_argc = 0;\
83
				while(*_args && (_args += chartorune(&_argc, _args)))\
84
				switch(_argc)
85
#define	ARGEND		SET(_argt);USED(_argt);USED(_argc);USED(_args);}\
86
					USED(argv);USED(argc);
87
#define	ARGF()		(_argt=_args, _args="",\
88
				(*_argt? _argt: argv[1]? (argc--, *++argv): 0))
89
#define	EARGF(x)		(_argt=_args, _args="",\
90
				(*_argt? _argt: argv[1]? (argc--, *++argv): ((x), abort(), (char*)0)))
91
 
92
#define	ARGC()		_argc
93
 
94
#define	SET(x)	(x) = 0
95
#define	USED(x)	(void)(x)
96
 
97
enum
98
{
99
	UTFmax		= 3,		/* maximum bytes per rune */
100
	Runesync	= 0x80,		/* cannot represent part of a UTF sequence (<) */
101
	Runeself	= 0x80,		/* rune and UTF sequences are the same (<) */
102
	Runeerror	= 0x80		/* decoding error in UTF */
103
};
104
 
105
extern	int	runetochar(char*, Rune*);
106
extern	int	chartorune(Rune*, char*);
107
extern	int	runelen(long);
108
extern	int	utflen(char*);
109
extern	char*	strecpy(char*, char*, char*);
110
extern	int	tokenize(char*, char**, int);
111
extern	int	getfields(char*, char**, int, int, char*);
112
 
113
/*
114
 * print routines
115
 */
116
typedef	struct	Fconv	Fconv;
117
struct	Fconv
118
{
119
	char*	out;		/* pointer to next output */
120
	char*	eout;		/* pointer to end */
121
	int	f1;
122
	int	f2;
123
	int	f3;
124
	int	chr;
125
};
126
extern	char*	doprint(char*, char*, char*, va_list *argp);
127
extern	int	print(char*, ...);
128
extern	char*	seprint(char*, char*, char*, ...);
129
extern	int	snprint(char*, int, char*, ...);
130
extern	int	sprint(char*, char*, ...);
131
extern	int	fprint(int, char*, ...);
132
 
133
extern	int	fmtinstall(int, int (*)(va_list*, Fconv*));
134
extern	int	numbconv(va_list*, Fconv*);
135
extern	void	strconv(char*, Fconv*);
136
extern	int	fltconv(va_list*, Fconv*);
137
 
138
#define	OREAD	0	/* open for read */
139
#define	OWRITE	1	/* write */
140
#define	ORDWR	2	/* read and write */
141
#define	OEXEC	3	/* execute, == read but check execute permission */
142
#define	OTRUNC	16	/* or'ed in (except for exec), truncate file first */
143
#define	OCEXEC	32	/* or'ed in, close on exec */
144
#define	ORCLOSE	64	/* or'ed in, remove on close */
145
#define	OEXCL	0x1000	/* or'ed in, exclusive use */
146
 
147
/* bits in Qid.type */
148
#define QTDIR		0x80		/* type bit for directories */
149
#define QTAPPEND	0x40		/* type bit for append only files */
150
#define QTEXCL		0x20		/* type bit for exclusive use files */
151
#define QTMOUNT		0x10		/* type bit for mounted channel */
152
#define QTAUTH		0x08
153
#define QTFILE		0x00		/* plain file */
154
 
155
/* bits in Dir.mode */
156
#define DMDIR		0x80000000	/* mode bit for directories */
157
#define DMAPPEND	0x40000000	/* mode bit for append only files */
158
#define DMEXCL		0x20000000	/* mode bit for exclusive use files */
159
#define DMMOUNT		0x10000000	/* mode bit for mounted channel */
160
#define DMREAD		0x4		/* mode bit for read permission */
161
#define DMWRITE		0x2		/* mode bit for write permission */
162
#define DMEXEC		0x1		/* mode bit for execute permission */
163
 
164
typedef
165
struct Qid
166
{
167
	vlong	path;
168
	ulong	vers;
169
	uchar	type;
170
} Qid;
171
 
172
typedef
173
struct Dir {
174
	/* system-modified data */
175
	ushort	type;	/* server type */
176
	uint	dev;	/* server subtype */
177
	/* file data */
178
	Qid	qid;	/* unique id from server */
179
	ulong	mode;	/* permissions */
180
	ulong	atime;	/* last read time */
181
	ulong	mtime;	/* last write time */
182
	vlong	length;	/* file length: see <u.h> */
183
	char	*name;	/* last element of path */
184
	char	*uid;	/* owner name */
185
	char	*gid;	/* group name */
186
	char	*muid;	/* last modifier name */
187
} Dir;
188
 
189
long readn(int, void*, long);
190
void remotehost(char*, int);
191
 
192
enum {
193
	NAMELEN = 28,
194
	ERRLEN = 64
195
};
196
 
197
/* DES */
198
#define DESKEYLEN 7
199
void	key_setup(char key[DESKEYLEN], char expandedkey[128]);
200
void	block_cipher(char expandedkey[128], char buf[8], int decrypting);