1 /*
2  * This file has been modified for the cdrkit suite.
3  *
4  * The behaviour and appearence of the program code below can differ to a major
5  * extent from the version distributed by the original author(s).
6  *
7  * For details, see Changelog file distributed with the cdrkit package. If you
8  * received this file from another source then ask the distributing person for
9  * a log of modifications.
10  *
11  */
12 
13 /* @(#)schily.h	1.54 06/01/12 Copyright 1985-2006 J. Schilling */
14 /*
15  *	Definitions for libschily
16  *
17  *	This file should be included past:
18  *
19  *	mconfig.h / config.h
20  *	standard.h
21  *	stdio.h
22  *	stdlib.h	(better use stdxlib.h)
23  *	unistd.h	(better use unixstd.h) needed LARGEFILE support
24  *	string.h
25  *	sys/types.h
26  *
27  *	If you need stdio.h, you must include it before schily.h
28  *
29  *	NOTE: If you need ctype.h and did not include stdio.h you need to
30  *	include ctype.h past schily.h as OpenBSD does not follow POSIX and
31  *	defines EOF in ctype.h
32  *
33  *	Copyright (c) 1985-2006 J. Schilling
34  */
35 /*
36  * This program is free software; you can redistribute it and/or modify
37  * it under the terms of the GNU General Public License version 2
38  * as published by the Free Software Foundation.
39  *
40  * This program is distributed in the hope that it will be useful,
41  * but WITHOUT ANY WARRANTY; without even the implied warranty of
42  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
43  * GNU General Public License for more details.
44  *
45  * You should have received a copy of the GNU General Public License along with
46  * this program; see the file COPYING.  If not, write to the Free Software
47  * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
48  */
49 
50 #ifndef _SCHILY_H
51 #define	_SCHILY_H
52 
53 #ifndef _STANDARD_H
54 #include <standard.h>
55 #endif
56 #ifndef _CCOMDEFS_H
57 #include <ccomdefs.h>
58 #endif
59 
60 #ifdef	__cplusplus
61 extern "C" {
62 #endif
63 
64 #if	defined(_INCL_SYS_TYPES_H) || defined(off_t)
65 #	ifndef	FOUND_OFF_T
66 #	define	FOUND_OFF_T
67 #	endif
68 #endif
69 #if	defined(_INCL_SYS_TYPES_H) || defined(size_t)
70 #	ifndef	FOUND_SIZE_T
71 #	define	FOUND_SIZE_T
72 #	endif
73 #endif
74 
75 #ifdef	__never_def__
76 /*
77  * It turns out that we cannot use the folloginw definition because there are
78  * some platforms that do not behave application friendly. These are mainly
79  * BSD-4.4 based systems (which #undef a definition when size_t is available.
80  * We actually removed this code because of a problem with QNX Neutrino.
81  * For this reason, it is important not to include <sys/types.h> directly but
82  * via the Schily SING include files so we know whether it has been included
83  * before we come here.
84  */
85 #if	defined(_SIZE_T)	|| defined(_T_SIZE_)	|| defined(_T_SIZE) || \
86 	defined(__SIZE_T)	|| defined(_SIZE_T_)	|| \
87 	defined(_GCC_SIZE_T)	|| defined(_SIZET_)	|| \
88 	defined(__sys_stdtypes_h) || defined(___int_size_t_h) || defined(size_t)
89 
90 #ifndef	FOUND_SIZE_T
91 #	define	FOUND_SIZE_T	/* We already included a size_t definition */
92 #endif
93 #endif
94 #endif	/* __never_def__ */
95 
96 #if	defined(HAVE_LARGEFILES)
97 #	define	_fcons		_fcons64
98 #	define	fdup		fdup64
99 #	define	fileluopen	fileluopen64
100 #	define	fileopen	fileopen64
101 #	define	filemopen	filemopen64
102 #	define	filepos		filepos64
103 #	define	filereopen	filereopen64
104 #	define	fileseek	fileseek64
105 #	define	filesize	filesize64
106 #	define	filestat	filestat64
107 #	define	_openfd		_openfd64
108 #endif
109 
110 #ifdef	EOF	/* stdio.h has been included */
111 extern	int	_cvmod(const char *, int *, int *);
112 extern	FILE	*_fcons(FILE *, int, int);
113 extern	FILE	*fdup(FILE *);
114 extern	int	fdown(FILE *);
115 extern	int	rols_fexecl(const char *, FILE *, FILE *, FILE *, const char *, ...);
116 extern	int	rols_fexecle(const char *, FILE *, FILE *, FILE *, const char *, ...);
117 		/* 6th arg not const, fexecv forces av[ac] = NULL */
118 extern	int	rols_fexecv(const char *, FILE *, FILE *, FILE *, int, char **);
119 extern	int	rols_librols_fexecve(const char *, FILE *, FILE *, FILE *, char * const *,
120 							  char * const *);
121 extern	int	fspawnv(FILE *, FILE *, FILE *, int, char * const *);
122 extern	int	fspawnl(FILE *, FILE *, FILE *, const char *, const char *, ...);
123 extern	int	fspawnv_nowait(FILE *, FILE *, FILE *, const char *, int,
124 										char *const*);
125 extern	int	rols_fgetline(FILE *, char *, int);
126 extern	int	fgetstr(FILE *, char *, int);
127 extern	void	file_raise(FILE *, int);
128 extern	int	fileclose(FILE *);
129 extern	FILE	*fileluopen(int, const char *);
130 extern	FILE	*fileopen(const char *, const char *);
131 #ifdef	_INCL_SYS_TYPES_H
132 extern	FILE	*filemopen(const char *, const char *, mode_t);
133 #endif
134 #ifdef	FOUND_OFF_T
135 extern	off_t	filepos(FILE *);
136 #endif
137 extern	int	fileread(FILE *, void *, int);
138 extern	int	ffileread(FILE *, void *, int);
139 extern	FILE	*filereopen(const char *, const char *, FILE *);
140 #ifdef	FOUND_OFF_T
141 extern	int	fileseek(FILE *, off_t);
142 extern	off_t	filesize(FILE *);
143 #endif
144 #ifdef	S_IFMT
145 extern	int	filestat(FILE *, struct stat *);
146 #endif
147 extern	int	filewrite(FILE *, void *, int);
148 extern	int	ffilewrite(FILE *, void *, int);
149 extern	int	flush(void);
150 extern	int	fpipe(FILE **);
151 extern	int	getbroken(FILE *, char *, char, char **, int);
152 extern	int	ofindline(FILE *, char, const char *, int, char **, int);
153 extern	int	peekc(FILE *);
154 
155 #ifdef	__never_def__
156 /*
157  * We cannot define this or we may get into problems with DOS based systems.
158  */
159 extern	int	spawnv(FILE *, FILE *, FILE *, int, char * const *);
160 extern	int	spawnl(FILE *, FILE *, FILE *, const char *, const char *, ...);
161 extern	int	spawnv_nowait(FILE *, FILE *, FILE *, const char *, int,
162 									  char *const*);
163 #endif	/* __never_def__m */
164 #endif	/* EOF */
165 
166 extern	int	_niread(int, void *, int);
167 extern	int	_niwrite(int, void *, int);
168 extern	int	_nixread(int, void *, int);
169 extern	int	_nixwrite(int, void *, int);
170 extern	int	_openfd(const char *, int);
171 extern	int	on_comerr(void (*fun)(int, void *), void *arg);
172 /*PRINTFLIKE1*/
173 extern	void	comerr(const char *, ...) __printflike__(1, 2);
174 /*PRINTFLIKE2*/
175 extern	void	comerrno(int, const char *, ...) __printflike__(2, 3);
176 /*PRINTFLIKE1*/
177 extern	int	errmsg(const char *, ...) __printflike__(1, 2);
178 /*PRINTFLIKE2*/
179 extern	int	errmsgno(int, const char *, ...) __printflike__(2, 3);
180 #ifdef	FOUND_SIZE_T
181 /*PRINTFLIKE3*/
182 extern	int	serrmsg(char *, size_t, const char *, ...) __printflike__(3, 4);
183 /*PRINTFLIKE4*/
184 extern	int	serrmsgno(int, char *, size_t, const char *, ...) __printflike__(4, 5);
185 #endif
186 extern	void	comexit(int);
187 extern	char	*errmsgstr(int);
188 /*PRINTFLIKE1*/
189 extern	int	schily_error(const char *, ...) __printflike__(1, 2);
190 extern	char	*fillbytes(void *, int, char);
191 extern	char	*findbytes(const void *, int, char);
192 extern	int	findline(const char *, char, const char *, int, char **, int);
193 extern	int	rols_getline(char *, int);
194 extern	int	getstr(char *, int);
195 extern	int	breakline(char *, char, char **, int);
196 extern	int	getallargs(int *, char * const**, const char *, ...);
197 extern	int	getargs(int *, char * const**, const char *, ...);
198 extern	int	getfiles(int *, char * const**, const char *);
199 extern	char	*astoi(const char *, int *);
200 extern	char	*astol(const char *, long *);
201 extern	char	*astolb(const char *, long *, int base);
202 #ifdef	_UTYPES_H
203 extern	char	*astoll(const char *, Llong *);
204 extern	char	*astollb(const char *, Llong *, int);
205 extern	char	*astoull(const char *, Ullong *);
206 extern	char	*astoullb(const char *, Ullong *, int);
207 #endif
208 
209 /*extern	void	handlecond __PR((const char *, SIGBLK *, int(*)(const char *, long, long), long));*/
210 /*extern	void	unhandlecond __PR((SIGBLK *));*/
211 
212 extern	int		patcompile(const unsigned char *, int, int *);
213 extern	unsigned char	*patmatch(const unsigned char *, const int *,
214 											 const unsigned char *, int, int, int, int[]);
215 extern	unsigned char	*patlmatch(const unsigned char *, const int *,
216 											  const unsigned char *, int, int, int, int[]);
217 
218 extern	char	*movebytes(const void *, void *, int);
219 
220 extern	void	save_args(int, char **);
221 extern	int	saved_ac(void);
222 extern	char	**saved_av(void);
223 extern	char	*saved_av0(void);
224 #ifndef	seterrno
225 extern	int	seterrno(int);
226 #endif
227 extern	void	set_progname(const char *);
228 extern	char	*get_progname(void);
229 
230 extern	void	setfp(void * const *);
231 extern	int	wait_chld(int);		/* for fspawnv_nowait() */
232 extern	int	geterrno(void);
233 extern	void	raisecond(const char *, long);
234 extern	char	*strcatl(char *, ...);
235 extern	int	streql(const char *, const char *);
236 #ifdef	va_arg
237 extern	int	format(void (*)(char, long), long, const char *, va_list);
238 #else
239 extern	int	format(void (*)(char, long), long, const char *, void *);
240 #endif
241 
242 extern	int	ftoes(char *, double, int, int);
243 extern	int	ftofs(char *, double, int, int);
244 
245 extern	void	swabbytes(void *, int);
246 extern	char	**getmainfp(void);
247 extern	char	**getavp(void);
248 extern	char	*getav0(void);
249 extern	void	**getfp(void);
250 extern	int	flush_reg_windows(int);
251 extern	int	cmpbytes(const void *, const void *, int);
252 extern	int	cmpnullbytes(const void *, int);
253 
254 #ifdef	nonono
255 #if	defined(HAVE_LARGEFILES)
256 /*
257  * To allow this, we need to figure out how to do autoconfiguration for off64_t
258  */
259 extern	FILE	*_fcons64(FILE *, int, int);
260 extern	FILE	*fdup64(FILE *);
261 extern	FILE	*fileluopen64(int, const char *);
262 extern	FILE	*fileopen64(const char *, const char *);
263 #ifdef	FOUND_OFF_T
264 extern	off64_t	filepos64(FILE *);
265 #endif
266 extern	FILE	*filereopen64(const char *, const char *, FILE *);
267 #ifdef	FOUND_OFF_T
268 extern	int	fileseek64(FILE *, off64_t);
269 extern	off64_t	filesize64(FILE *);
270 #endif
271 #ifdef	S_IFMT
272 extern	int	filestat64(FILE *, struct stat *);
273 #endif
274 extern	int	_openfd64(const char *, int);
275 #endif
276 #endif
277 
278 #ifdef	__cplusplus
279 }
280 #endif
281 
282 #if defined(_JOS) || defined(JOS)
283 #	ifndef	_JOS_IO_H
284 #	include <jos_io.h>
285 #	endif
286 #endif
287 
288 #endif	/* _SCHILY_H */
289