File: genutils.h

package info (click to toggle)
afbackup 3.3.6pl4-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 3,872 kB
  • ctags: 3,143
  • sloc: ansic: 44,316; tcl: 4,189; sh: 2,263; csh: 2,077; makefile: 566; sed: 93; perl: 80
file content (375 lines) | stat: -rw-r--r-- 13,257 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
/****************** Start of $RCSfile: genutils.h,v $  ****************
*
* $Source: /home/alb/afbackup/afbackup-3.3.6/RCS/genutils.h,v $
* $Id: genutils.h,v 1.2 2002/02/27 10:17:12 alb Exp alb $
* $Date: 2002/02/27 10:17:12 $
* $Author: alb $
*
*
******* description ***********************************************
*
*
*
*******************************************************************/

#ifndef	__GENUTILS_H
#define	__GENUTILS_H __GENUTILS_H

#include <lconf.h>

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <math.h>
#include <x_types.h>

#define	NO_ERROR	0

#define RET_ON_ERROR(function) \
	{	Int32 errfl; \
		errfl = (Int32)(function); \
		if(errfl != NO_ERROR) \
			return(errfl); \
	}

#define	ISSPACE(chr)	((chr) == '\0' || isspace(chr))
#define ishnchr(c)	(isalnum(c) || (c) == '-')
#define	isfqhnchr(c)	(ishnchr(c) || (c) == '.')

#define	NEWP(type, num)		(type *) malloc_forced((num) * sizeof(type))
#define	RENEWP(old, type, num)	(type *) realloc_forced((old), (num) * sizeof(type))
#define	SNEWP(type, num)	(type *) seg_malloc((num) * sizeof(type))
#define	SRENEWP(old, type, num, onum)	(type *) seg_realloc(old,	\
						sizeof(type) * (num),	\
						sizeof(type) * (onum))

#define	ZRENEWP(old, type, num)	\
		((old) ? RENEWP(old, type, num) : NEWP(type, num))
#define	ZSRENEWP(old, type, num, onum)	\
		((old) ? SRENEWP(old, type, num, onum) : SNEWP(type, num))
#define	ZFREE(ptr)	{ if(ptr) { free(ptr); ptr = NULL; } }

#define	forever	for(;;)
#define	SETZERO(var)	memset(&(var), 0, sizeof(var))
#define	COPYVAL(dest, src)	memcpy(&(dest), &(src), sizeof(src))

#ifndef XOR
#define XOR(a,b)	(((a) & ~(b)) | (~(a) & (b)))
#endif


#ifdef	__cplusplus
extern	"C" {
#endif

extern	void *	MALLOC_SAFE(Int32);
extern	void *	REALLOC_SAFE(void  *, Int32);
extern	UChar *	STRDUP_SAFE(UChar *);
extern	Int32	FSEEK_SAFE(FILE *, Int32, Int32);
extern	FILE *	FOPEN_SAFE(UChar *, UChar *);
extern	void	nomemmsgexit(void *, FILE *);
extern	UChar *	strapp(UChar *, UChar *);
extern	UChar *	strchain(UChar *, ...);
#ifdef	DEF_STRRSTR
extern	UChar *	strrstr(UChar *, UChar *);
#endif
#ifdef	DEF_STRCASESTR
extern	UChar *	strcasestr(UChar *, UChar *);
#endif
extern	UChar *	strword(UChar *, Int32);
extern	UChar *	strwordq(UChar *, Int32);
extern	Int32	strint(UChar *, Int32 *);
extern	int	trailingint(UChar *);
extern	Flag	chop(UChar *);
extern	UChar *	word_skip(UChar *, Int32, Int32);
#define	word_start(str, num)	word_skip((str), (num), 1)
#define	word_end(str, num)	word_skip((str), (num), -1)
extern	Int32	str2words(UChar ***, UChar *);
extern	Int32	str2wordsq(UChar ***, UChar *);
extern	Int32	cmd2argv(char ***, char *);
extern	Int32	cmd2argvq(char ***, char *);
extern	Int32	cmd2argvf(char ***, char *);
extern	Int32	cmd2argvqf(char ***, char *);
extern	void	repl_esc_seq(UChar *, UChar);
extern	Int32	rm_backspace(UChar *);
extern	UChar * mk_esc_seq(UChar *, UChar, UChar *);
extern	UChar *	repl_substring(UChar *, UChar *, UChar *);
extern	Int32	repl_substrings(UChar **, ReplSpec *, Int32);
extern	Int32	existfile(UChar *);
extern	Int32	memswap(void *, void *, Int32);
extern	UChar *	memfind(UChar *, Int32, UChar *, Int32);
extern	Int32	memrepl(UChar *, Int32,
				UChar *, Int32, UChar *, Int32);
extern	void *	mem_move(void *, void *, size_t);
extern	void *	mem_move2(void *, void *, size_t);
extern	void *	mem_move3(void *, void *, size_t);
extern	void *	mem_move4(void *, void *, size_t);
extern	Int32	fscanword(FILE *, UChar *);
extern	Int32	fscanwordq(FILE *, UChar *);
extern	UChar *	sscanword(UChar *, UChar *);
extern	UChar *	sscanwordq(UChar *, UChar *);
extern	Int32	fprintwordq(FILE *, UChar *);
extern	Int32	sprintwordq(UChar *, UChar *);
extern	Int32	ffindword(FILE *, UChar *);
extern	Int32	ffindwordb(FILE *, UChar *);
extern	Int8	escaped(UChar *, UChar *, UChar);
extern	Uns8	parity_byte(UChar *, Int32);
extern	Int32	ishn(UChar *);
extern	Int32	isfqhn(UChar *);
extern	Int32	minmax(Real64 *, Int32, Real64 *, Real64 *);
extern	Int32	ffindchr(FILE *, UChar);
extern	Int32	getinchr(UChar *, Uns32);
extern 	Int32	word_count(UChar *);
extern 	Int32	word_countq(UChar *);
extern	Int32	empty_string(UChar *);
extern	UChar *	first_space(UChar *);
extern	UChar *	first_nospace(UChar *);
extern	UChar *	sscancstr(UChar *, UChar *);
extern	void	sscancchars(UChar *, UChar *);
extern	void	massage_string(UChar *);
extern	UChar **read_asc_file(UChar *, Int32 *);
extern	UChar **empty_asc_file();
extern	void	free_asc_file(UChar **, Int32);
extern	Int32	write_asc_file(UChar *, UChar **, Int32);
extern	Int32	write_asc_file_safe(UChar *, UChar **, Int32);
#define	free_array	free_asc_file
extern	Uns32Range	*empty_Uns32Ranges();
extern	Flag	in_Uns32Ranges(Uns32Range *, Int32);
extern	Flag	overlap_Uns32Ranges(Uns32Range *, Uns32Range *);
extern	Int32	next_in_Uns32Ranges(Uns32Range *, Int32, Flag);
extern	Int32	prev_in_Uns32Ranges(Uns32Range *, Int32, Flag);
extern	Uns32Range	*sscan_Uns32Ranges(UChar *, Int32, Int32, Int32 *, UChar **);
extern	Uns32Range	*sscan_Uns32Ranges_(UChar *, Int32, Int32, Int32 *, UChar **);
extern	Uns32Range	*sscan_Uns32Ranges__(UChar *, Int32, Int32, Int32 *, UChar **);
extern	Int32	fprint_Uns32Ranges(FILE *, Uns32Range *, Int32);
extern	Int32	pack_Uns32Ranges(Uns32Range *, Int32 *);
extern	Int32	len_Uns32Ranges(Uns32Range *);
extern	Int32	num_Uns32Ranges(Uns32Range *);
extern	Uns32Range	*add_to_Uns32Ranges(Uns32Range *, Int32, Int32);
extern	Int32	merge_Uns32Ranges(Uns32Range **, Uns32Range *);
extern	UChar	*str_Uns32Ranges(Uns32Range *, Int32);
extern	Uns32Range	*del_one_from_Uns32Ranges(Uns32Range *, Int32);
extern	Uns32Range	*del_range_from_Uns32Ranges(Uns32Range *, Uns32Range *);
extern	Uns32Range	*dup_Uns32Ranges(Uns32Range *);
extern	void	q_sort(void *, Uns32, Uns32, Int32 (*)(void *, void *));
extern	void	*b_search(void *, void *, Uns32, Uns32,
					Int32 (*)(void *, void *));
extern	void	*b_locate(void *, void *, Uns32, Uns32,
					Int32 (*)(void *, void *));
extern	void	*ba_search(void *, void *, Uns32, Uns32,
					Int32 (*)(void *, void *));
extern	void	*l_search(void *, void *, Uns32 *, Uns32,
					Int32 (*)(void *, void *));
extern	void	*l_find(void *, void *, Uns32 *, Uns32,
					Int32 (*)(void *, void *));
extern	UChar	char64(Int32);
extern	Int32	cmp_Int32(void *, void *);
extern	Int32	cmp_Int16(void *, void *);
extern	Int32	cmp_Int8(void *, void *);
extern	Int32	cmp_SChar(void *, void *);
extern	Int32	cmp_Uns32(void *, void *);
extern	Int32	cmp_Uns16(void *, void *);
extern	Int32	cmp_Uns8(void *, void *);
extern	Int32	cmp_UChar(void *, void *);
extern	Int32	cmp_UCharPTR(void *, void *);
#define	cmp_SCharPTR	cmp_UCharPTR
extern	Int32	cmp_Uns32Ranges(void *, void *);
extern	Int32	compare_version_strings(UChar *, UChar *);
extern	void	*seg_malloc(Int32);
extern	void	*seg_realloc(void *, Int32, Int32);
extern	Int32	__internal_sm_import(void ***, Int8 **, Int32 *,
					Int8, void *);
extern	void	*__internal_sm_malloc(void ***, Int8 **, Int32 *,
					Int8, size_t);
extern	void	*__internal_sm_realloc(void ***, Int8 **, Int32 *,
					void *, Int8, size_t);
extern	void	__internal_sm_freeall(void **, Int8 *, Int32, Int8);
extern	void	__internal_sm_free(void **, Int8 *, Int32 *, void *);
extern	UChar	*__internal_sm_strdup(void ***, Int8 **, Int32 *,
					Int8, UChar *);
extern	UChar	*__internal_sm_strapp(void ***, Int8 **, Int32 *,
					Int8, UChar *, UChar *);
extern	UChar	*__internal_sm_strchain(void ***, Int8 **, Int32 *,
					Int8, ...);
extern	UChar	*fget_alloc_str(FILE *);
extern	Int32	fget_realloc_str(FILE *, UChar **, Int32 *);
extern	Int32	wait_for_input(int, Int32);
extern	Int32	read_with_timeout(int, UChar *, Int32, Int32);
extern	Int32	find_zero(Real64 (*)(Real64), Real64, Real64, Real64,
					Real64, Real64 *);
extern	Real64	num_integ(Real64 (*)(Real64), Real64, Real64, Real64);
extern	Real64	Real64_precision();

extern	Real64	drandom();

extern	int	permutate(void *, size_t, size_t,
			int (*)(void *, int, void *), void *);

extern	Int32	goptions(Int32, UChar **, UChar *, ...);

extern	double	r_int(double);
extern	int	is_nan(float);
extern	Int32	align_n(Int32, Int32);

extern	void	clr_timer();
extern	UChar	*actimestr();
extern	time_t	time_from_datestr(UChar *);
extern	time_t	strint2time(UChar *);

extern	int	fork_forced();
extern	void *	malloc_forced(size_t);
extern	void *	realloc_forced(void *, size_t);

extern	Int32	write_forced(int, UChar *, Int32);
extern	Int32	read_forced(int, UChar *, Int32);
extern	Int32	fscanwordq_forced(FILE *, UChar *);

extern	pid_t	waitpid_forced(pid_t, int *, int);
extern	int	set_wlock(UChar *);
extern	int	set_wlock_forced(UChar *);
extern	int	set_wlock_timeout(UChar *, Int32);

extern	UChar	*Real64_to_intstr(Real64, UChar *);
extern	UChar	*time_t_to_intstr(time_t, UChar *);
extern	UChar	*size_t_to_intstr(size_t, UChar *);
extern	UChar	*off_t_to_intstr(off_t, UChar *);
extern	UChar	*ino_t_to_intstr(ino_t, UChar *);

#ifdef	__cplusplus
}
#endif

#ifdef	DEF_MEMMOVE
#define	memmove	mem_move
#endif
#ifdef	DEF_QSORT
#define	qsort	q_sort
#endif
#ifdef	DEF_BSEARCH
#define	bsearch	b_search
#endif
#ifdef	DEF_LSEARCH
#define	lsearch	l_search
#endif
#ifdef	DEF_LFIND
#define	lfind	l_find
#endif
#if	defined(DEF_ISNAN) && !defined(isnan)
#define	isnan	is_nan
#endif
#ifdef	DEF_RINT
#define	rint	r_int
#endif
#ifdef	DEF_ISATTY
#define	isatty	is_a_tty
#endif

#define	sm_list	void ** __local_memlist = NULL; 		\
				Int8 * __local_smflags = NULL;	\
				Int32 __num_memptrs = 0
#define	sm_import(ptr)	__internal_sm_import(& __local_memlist,		\
		& __local_smflags, & __num_memptrs, 0, ptr)
#define	sm_import_tmp(ptr)	__internal_sm_import(& __local_memlist,	\
		& __local_smflags, & __num_memptrs, 1, ptr)
#define	sm_malloc(size)	__internal_sm_malloc(& __local_memlist,		\
		& __local_smflags, & __num_memptrs, 0, (size))
#define	sm_malloc_tmp(size)	__internal_sm_malloc(& __local_memlist,	\
		& __local_smflags, & __num_memptrs, 1, (size))
#define	sm_realloc(ptr, size)	__internal_sm_realloc(			\
		& __local_memlist,& __local_smflags, & __num_memptrs, 	\
		(ptr), 0, (size))
#define	sm_realloc_tmp(ptr, size)	__internal_sm_realloc(	\
		& __local_memlist, & __local_smflags, & __num_memptrs, 	\
		(ptr), 1, (size))
#define	sm_return(arg)	{ __internal_sm_freeall(__local_memlist,	\
		__local_smflags, __num_memptrs, 1); return(arg); }
#define	sm_return_err(arg)	{ __internal_sm_freeall(__local_memlist, \
		__local_smflags, __num_memptrs, 0); return(arg); }
#define	sm_return_void	{ __internal_sm_freeall(__local_memlist,	\
		__local_smflags, __num_memptrs, 1); return; }
#define	sm_return_err_void	{ __internal_sm_freeall(__local_memlist, \
		__local_smflags, __num_memptrs, 0); return; }
#define	sm_free(ptr)	__internal_sm_free(__local_memlist,	\
		__local_smflags, & __num_memptrs, ptr)
#define	sm_strdup(str)	__internal_sm_strdup(& __local_memlist,		\
		& __local_smflags, & __num_memptrs, 0, (str))
#define	sm_strdup_tmp(str)	__internal_sm_strdup(& __local_memlist,	\
		& __local_smflags, & __num_memptrs, 1, (str))
#define	sm_strapp(s1, s2)	__internal_sm_strapp(& __local_memlist,	\
		& __local_smflags, & __num_memptrs, 0, (s1), (s2))
#define	sm_strapp_tmp(s1, s2)	__internal_sm_strapp(& __local_memlist,	\
		& __local_smflags, & __num_memptrs, 1, (s1), (s2))

#define	NEWSP(type, num)	(type *) sm_malloc((num) * sizeof(type))
#define	NEWSTP(type, num)	(type *) sm_malloc_tmp((num) * sizeof(type))
#define	RENEWSP(old, type, num)	(type *) sm_realloc(old, (num) * sizeof(type))
#define	RENEWSTP(old, type, num)	(type *)		\
				sm_realloc_tmp(old, (num) * sizeof(type))
#define	ZRENEWSP(old, type, num)	\
		((old) ? RENEWSP(old, type, num) : NEWSP(type, num))
#define	ZRENEWSTP(old, type, num)	\
		((old) ? RENEWSTP(old, type, num) : NEWSTP(type, num))

#define	free_string_array	free_asc_file

#ifndef	bzero
#define	bzero(mem, size)	memset((mem), 0, (size))
#endif
#ifndef	bcopy
#define	bcopy(mem1, mem2, size)	memcpy((mem2), (mem1), (size))
#endif
#ifndef	bcmp
#define	bcmp(mem1, mem2, size)	memcmp((mem1), (mem2), (size))
#endif
#define	bswap(mem1, mem2, size)	memswap((mem1), (mem2), (size))
#ifndef	MAX
#define	MAX(a, b)	((a) > (b) ? (a) : (b))
#endif
#ifndef	MIN
#define	MIN(a, b)	((a) < (b) ? (a) : (b))
#endif
#ifndef	ABS
#define	ABS(a)		((a) < 0 ? - (a) : (a))
#endif
#ifdef	YES
#undef	YES
#endif
#ifdef	NO
#undef	NO
#endif
#ifdef	TRUE
#undef	TRUE
#endif
#ifdef	FALSE
#undef	FALSE
#endif
#define	TRUE		1
#define	FALSE		0
#define	YES		TRUE
#define	NO		FALSE
#define	DONT_KNOW	127

#define	endof(staticarr)	((staticarr) + sizeof(staticarr))

#define	UnsN_to_xref(p, v, n)	{ Uns32 va_; UChar *buf_;	\
				buf_ = (p) + (((n) - 1) >> 3);	\
				va_ = (v); while(buf_ >= (p)){		\
				*(buf_--) = (va_ & 0xff); va_ >>= 8;}}
#define	xref_to_UnsN(v, p, n)	{ UChar *endb_, *buf_; buf_ = (p);	\
				endb_ = buf_ + (((n) - 1) >> 3) + 1;	\
				*(v) = 0; while(buf_ < endb_)	\
				*(v) = (*(v) << 8) | *(buf_++); }
#define	Uns32_to_xref(p, v)	UnsN_to_xref(p, v, 32)
#define	xref_to_Uns32(v, p)	xref_to_UnsN(v, p, 32)

#define	str_to_intN(type, result, str)	{		\
		type	r = 0; char * cp;		\
		cp = (str);				\
		while(*cp && isspace(*cp)) cp++;	\
		while(isdigit(*cp))			\
			r = r * 10 + (*(cp++)) - '0';	\
		*(result) = r; }

#endif	/* !__GENUTILS_H */