Subversion Repositories Kolibri OS

Rev

Rev 5191 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5191 serge 1
/* Function declarations for libiberty.
2
 
6324 serge 3
   Copyright (C) 1997-2015 Free Software Foundation, Inc.
4
 
5191 serge 5
   Note - certain prototypes declared in this header file are for
6
   functions whoes implementation copyright does not belong to the
7
   FSF.  Those prototypes are present in this file for reference
8
   purposes only and their presence in this file should not construed
9
   as an indication of ownership by the FSF of the implementation of
10
   those functions in any way or form whatsoever.
11
 
12
   This program is free software; you can redistribute it and/or modify
13
   it under the terms of the GNU General Public License as published by
14
   the Free Software Foundation; either version 2, or (at your option)
15
   any later version.
16
 
17
   This program is distributed in the hope that it will be useful,
18
   but WITHOUT ANY WARRANTY; without even the implied warranty of
19
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20
   GNU General Public License for more details.
21
 
22
   You should have received a copy of the GNU General Public License
23
   along with this program; if not, write to the Free Software
24
   Foundation, Inc., 51 Franklin Street - Fifth Floor,
25
   Boston, MA 02110-1301, USA.
6324 serge 26
 
5191 serge 27
   Written by Cygnus Support, 1994.
28
 
29
   The libiberty library provides a number of functions which are
30
   missing on some operating systems.  We do not declare those here,
31
   to avoid conflicts with the system header files on operating
32
   systems that do support those functions.  In this file we only
33
   declare those functions which are specific to libiberty.  */
34
 
35
#ifndef LIBIBERTY_H
36
#define LIBIBERTY_H
37
 
38
#ifdef __cplusplus
39
extern "C" {
40
#endif
41
 
42
#include "ansidecl.h"
43
 
44
/* Get a definition for size_t.  */
45
#include 
46
/* Get a definition for va_list.  */
47
#include 
6324 serge 48
#include 
5191 serge 49
 
50
#include 
51
 
52
/* If the OS supports it, ensure that the supplied stream is setup to
53
   avoid any multi-threaded locking.  Otherwise leave the FILE pointer
54
   unchanged.  If the stream is NULL do nothing.  */
55
 
56
extern void unlock_stream (FILE *);
57
 
58
/* If the OS supports it, ensure that the standard I/O streams, stdin,
59
   stdout and stderr are setup to avoid any multi-threaded locking.
60
   Otherwise do nothing.  */
61
 
62
extern void unlock_std_streams (void);
63
 
64
/* Open and return a FILE pointer.  If the OS supports it, ensure that
65
   the stream is setup to avoid any multi-threaded locking.  Otherwise
66
   return the FILE pointer unchanged.  */
67
 
68
extern FILE *fopen_unlocked (const char *, const char *);
69
extern FILE *fdopen_unlocked (int, const char *);
70
extern FILE *freopen_unlocked (const char *, const char *, FILE *);
71
 
72
/* Build an argument vector from a string.  Allocates memory using
73
   malloc.  Use freeargv to free the vector.  */
74
 
75
extern char **buildargv (const char *) ATTRIBUTE_MALLOC;
76
 
77
/* Free a vector returned by buildargv.  */
78
 
79
extern void freeargv (char **);
80
 
81
/* Duplicate an argument vector. Allocates memory using malloc.  Use
82
   freeargv to free the vector.  */
83
 
84
extern char **dupargv (char **) ATTRIBUTE_MALLOC;
85
 
86
/* Expand "@file" arguments in argv.  */
87
 
6324 serge 88
extern void expandargv (int *, char ***);
5191 serge 89
 
90
/* Write argv to an @-file, inserting necessary quoting.  */
91
 
6324 serge 92
extern int writeargv (char **, FILE *);
5191 serge 93
 
94
/* Return the number of elements in argv.  */
95
 
96
extern int countargv (char**);
97
 
98
/* Return the last component of a path name.  Note that we can't use a
99
   prototype here because the parameter is declared inconsistently
100
   across different systems, sometimes as "char *" and sometimes as
101
   "const char *" */
102
 
103
/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
104
   undefined, we haven't run the autoconf check so provide the
105
   declaration without arguments.  If it is 0, we checked and failed
106
   to find the declaration so provide a fully prototyped one.  If it
107
   is 1, we found it so don't provide any declaration at all.  */
6324 serge 108
 
5191 serge 109
#if !HAVE_DECL_BASENAME
6324 serge 110
#if defined (__GNU_LIBRARY__ ) || defined (__linux__) \
111
 || defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__NetBSD__) \
112
 || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) \
113
 || defined (__DragonFly__) || defined (HAVE_DECL_BASENAME)
114
extern char *basename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
5191 serge 115
#else
116
/* Do not allow basename to be used if there is no prototype seen.  We
117
   either need to use the above prototype or have one from
118
   autoconf which would result in HAVE_DECL_BASENAME being set.  */
119
#define basename basename_cannot_be_used_without_a_prototype
120
#endif
121
#endif
122
 
123
/* A well-defined basename () that is always compiled in.  */
124
 
6324 serge 125
extern const char *lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
5191 serge 126
 
127
/* Same, but assumes DOS semantics (drive name, backslash is also a
128
   dir separator) regardless of host.  */
129
 
6324 serge 130
extern const char *dos_lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
5191 serge 131
 
132
/* Same, but assumes Unix semantics (absolute paths always start with
133
   a slash, only forward slash is accepted as dir separator)
134
   regardless of host.  */
135
 
6324 serge 136
extern const char *unix_lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
5191 serge 137
 
138
/* A well-defined realpath () that is always compiled in.  */
139
 
140
extern char *lrealpath (const char *);
141
 
142
/* Concatenate an arbitrary number of strings.  You must pass NULL as
143
   the last argument of this function, to terminate the list of
144
   strings.  Allocates memory using xmalloc.  */
145
 
6324 serge 146
extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL;
5191 serge 147
 
148
/* Concatenate an arbitrary number of strings.  You must pass NULL as
149
   the last argument of this function, to terminate the list of
150
   strings.  Allocates memory using xmalloc.  The first argument is
151
   not one of the strings to be concatenated, but if not NULL is a
152
   pointer to be freed after the new string is created, similar to the
153
   way xrealloc works.  */
154
 
6324 serge 155
extern char *reconcat (char *, const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL;
5191 serge 156
 
157
/* Determine the length of concatenating an arbitrary number of
158
   strings.  You must pass NULL as the last argument of this function,
159
   to terminate the list of strings.  */
160
 
161
extern unsigned long concat_length (const char *, ...) ATTRIBUTE_SENTINEL;
162
 
163
/* Concatenate an arbitrary number of strings into a SUPPLIED area of
164
   memory.  You must pass NULL as the last argument of this function,
165
   to terminate the list of strings.  The supplied memory is assumed
166
   to be large enough.  */
167
 
6324 serge 168
extern char *concat_copy (char *, const char *, ...) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1) ATTRIBUTE_SENTINEL;
5191 serge 169
 
170
/* Concatenate an arbitrary number of strings into a GLOBAL area of
171
   memory.  You must pass NULL as the last argument of this function,
172
   to terminate the list of strings.  The supplied memory is assumed
173
   to be large enough.  */
174
 
6324 serge 175
extern char *concat_copy2 (const char *, ...) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL;
5191 serge 176
 
177
/* This is the global area used by concat_copy2.  */
178
 
179
extern char *libiberty_concat_ptr;
180
 
181
/* Concatenate an arbitrary number of strings.  You must pass NULL as
182
   the last argument of this function, to terminate the list of
183
   strings.  Allocates memory using alloca.  The arguments are
184
   evaluated twice!  */
185
#define ACONCAT(ACONCAT_PARAMS) \
186
  (libiberty_concat_ptr = (char *) alloca (concat_length ACONCAT_PARAMS + 1), \
187
   concat_copy2 ACONCAT_PARAMS)
188
 
189
/* Check whether two file descriptors refer to the same file.  */
190
 
191
extern int fdmatch (int fd1, int fd2);
192
 
193
/* Return the position of the first bit set in the argument.  */
194
/* Prototypes vary from system to system, so we only provide a
195
   prototype on systems where we know that we need it.  */
196
#if defined (HAVE_DECL_FFS) && !HAVE_DECL_FFS
197
extern int ffs(int);
198
#endif
199
 
200
/* Get the working directory.  The result is cached, so don't call
201
   chdir() between calls to getpwd().  */
202
 
203
extern char * getpwd (void);
204
 
205
/* Get the current time.  */
206
/* Prototypes vary from system to system, so we only provide a
207
   prototype on systems where we know that we need it.  */
208
#ifdef __MINGW32__
209
/* Forward declaration to avoid #include .   */
210
struct timeval;
211
extern int gettimeofday (struct timeval *, void *);
212
#endif
213
 
214
/* Get the amount of time the process has run, in microseconds.  */
215
 
216
extern long get_run_time (void);
217
 
218
/* Generate a relocated path to some installation directory.  Allocates
219
   return value using malloc.  */
220
 
221
extern char *make_relative_prefix (const char *, const char *,
222
                                   const char *) ATTRIBUTE_MALLOC;
223
 
224
/* Generate a relocated path to some installation directory without
225
   attempting to follow any soft links.  Allocates
226
   return value using malloc.  */
227
 
228
extern char *make_relative_prefix_ignore_links (const char *, const char *,
229
						const char *) ATTRIBUTE_MALLOC;
230
 
6324 serge 231
/* Returns a pointer to a directory path suitable for creating temporary
232
   files in.  */
233
 
234
extern const char *choose_tmpdir (void) ATTRIBUTE_RETURNS_NONNULL;
235
 
5191 serge 236
/* Choose a temporary directory to use for scratch files.  */
237
 
6324 serge 238
extern char *choose_temp_base (void) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
5191 serge 239
 
240
/* Return a temporary file name or NULL if unable to create one.  */
241
 
242
extern char *make_temp_file (const char *) ATTRIBUTE_MALLOC;
243
 
244
/* Remove a link to a file unless it is special. */
245
 
246
extern int unlink_if_ordinary (const char *);
247
 
248
/* Allocate memory filled with spaces.  Allocates using malloc.  */
249
 
250
extern const char *spaces (int count);
251
 
252
/* Return the maximum error number for which strerror will return a
253
   string.  */
254
 
255
extern int errno_max (void);
256
 
257
/* Return the name of an errno value (e.g., strerrno (EINVAL) returns
258
   "EINVAL").  */
259
 
260
extern const char *strerrno (int);
261
 
262
/* Given the name of an errno value, return the value.  */
263
 
264
extern int strtoerrno (const char *);
265
 
266
/* ANSI's strerror(), but more robust.  */
267
 
6324 serge 268
extern char *xstrerror (int) ATTRIBUTE_RETURNS_NONNULL;
5191 serge 269
 
270
/* Return the maximum signal number for which strsignal will return a
271
   string.  */
272
 
273
extern int signo_max (void);
274
 
275
/* Return a signal message string for a signal number
276
   (e.g., strsignal (SIGHUP) returns something like "Hangup").  */
277
/* This is commented out as it can conflict with one in system headers.
278
   We still document its existence though.  */
279
 
280
/*extern const char *strsignal (int);*/
281
 
282
/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns
283
   "SIGHUP").  */
284
 
285
extern const char *strsigno (int);
286
 
287
/* Given the name of a signal, return its number.  */
288
 
289
extern int strtosigno (const char *);
290
 
291
/* Register a function to be run by xexit.  Returns 0 on success.  */
292
 
293
extern int xatexit (void (*fn) (void));
294
 
295
/* Exit, calling all the functions registered with xatexit.  */
296
 
297
extern void xexit (int status) ATTRIBUTE_NORETURN;
298
 
299
/* Set the program name used by xmalloc.  */
300
 
301
extern void xmalloc_set_program_name (const char *);
302
 
303
/* Report an allocation failure.  */
304
extern void xmalloc_failed (size_t) ATTRIBUTE_NORETURN;
305
 
306
/* Allocate memory without fail.  If malloc fails, this will print a
307
   message to stderr (using the name set by xmalloc_set_program_name,
308
   if any) and then call xexit.  */
309
 
6324 serge 310
extern void *xmalloc (size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
5191 serge 311
 
312
/* Reallocate memory without fail.  This works like xmalloc.  Note,
313
   realloc type functions are not suitable for attribute malloc since
314
   they may return the same address across multiple calls. */
315
 
6324 serge 316
extern void *xrealloc (void *, size_t) ATTRIBUTE_RETURNS_NONNULL;
5191 serge 317
 
318
/* Allocate memory without fail and set it to zero.  This works like
319
   xmalloc.  */
320
 
6324 serge 321
extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
5191 serge 322
 
323
/* Copy a string into a memory buffer without fail.  */
324
 
6324 serge 325
extern char *xstrdup (const char *) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
5191 serge 326
 
327
/* Copy at most N characters from string into a buffer without fail.  */
328
 
6324 serge 329
extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
5191 serge 330
 
331
/* Copy an existing memory buffer to a new memory buffer without fail.  */
332
 
6324 serge 333
extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
5191 serge 334
 
335
/* Physical memory routines.  Return values are in BYTES.  */
336
extern double physmem_total (void);
337
extern double physmem_available (void);
338
 
339
/* Compute the 32-bit CRC of a block of memory.  */
340
extern unsigned int xcrc32 (const unsigned char *, int, unsigned int);
341
 
342
/* These macros provide a K&R/C89/C++-friendly way of allocating structures
343
   with nice encapsulation.  The XDELETE*() macros are technically
344
   superfluous, but provided here for symmetry.  Using them consistently
345
   makes it easier to update client code to use different allocators such
346
   as new/delete and new[]/delete[].  */
347
 
348
/* Scalar allocators.  */
349
 
350
#define XALLOCA(T)		((T *) alloca (sizeof (T)))
351
#define XNEW(T)			((T *) xmalloc (sizeof (T)))
352
#define XCNEW(T)		((T *) xcalloc (1, sizeof (T)))
353
#define XDUP(T, P)		((T *) xmemdup ((P), sizeof (T), sizeof (T)))
354
#define XDELETE(P)		free ((void*) (P))
355
 
356
/* Array allocators.  */
357
 
358
#define XALLOCAVEC(T, N)	((T *) alloca (sizeof (T) * (N)))
359
#define XNEWVEC(T, N)		((T *) xmalloc (sizeof (T) * (N)))
360
#define XCNEWVEC(T, N)		((T *) xcalloc ((N), sizeof (T)))
361
#define XDUPVEC(T, P, N)	((T *) xmemdup ((P), sizeof (T) * (N), sizeof (T) * (N)))
362
#define XRESIZEVEC(T, P, N)	((T *) xrealloc ((void *) (P), sizeof (T) * (N)))
363
#define XDELETEVEC(P)		free ((void*) (P))
364
 
365
/* Allocators for variable-sized structures and raw buffers.  */
366
 
367
#define XALLOCAVAR(T, S)	((T *) alloca ((S)))
368
#define XNEWVAR(T, S)		((T *) xmalloc ((S)))
369
#define XCNEWVAR(T, S)		((T *) xcalloc (1, (S)))
370
#define XDUPVAR(T, P, S1, S2)	((T *) xmemdup ((P), (S1), (S2)))
371
#define XRESIZEVAR(T, P, S)	((T *) xrealloc ((P), (S)))
372
 
373
/* Type-safe obstack allocator.  */
374
 
375
#define XOBNEW(O, T)		((T *) obstack_alloc ((O), sizeof (T)))
376
#define XOBNEWVEC(O, T, N)	((T *) obstack_alloc ((O), sizeof (T) * (N)))
377
#define XOBNEWVAR(O, T, S)	((T *) obstack_alloc ((O), (S)))
378
#define XOBFINISH(O, T)         ((T) obstack_finish ((O)))
379
 
380
/* hex character manipulation routines */
381
 
382
#define _hex_array_size 256
383
#define _hex_bad	99
384
extern const unsigned char _hex_value[_hex_array_size];
385
extern void hex_init (void);
386
#define hex_p(c)	(hex_value (c) != _hex_bad)
387
/* If you change this, note well: Some code relies on side effects in
388
   the argument being performed exactly once.  */
389
#define hex_value(c)	((unsigned int) _hex_value[(unsigned char) (c)])
390
 
391
/* Flags for pex_init.  These are bits to be or'ed together.  */
392
 
393
/* Record subprocess times, if possible.  */
394
#define PEX_RECORD_TIMES	0x1
395
 
396
/* Use pipes for communication between processes, if possible.  */
397
#define PEX_USE_PIPES		0x2
398
 
399
/* Save files used for communication between processes.  */
400
#define PEX_SAVE_TEMPS		0x4
401
 
402
/* Prepare to execute one or more programs, with standard output of
403
   each program fed to standard input of the next.
404
   FLAGS	As above.
405
   PNAME	The name of the program to report in error messages.
406
   TEMPBASE	A base name to use for temporary files; may be NULL to
407
   		use a random name.
408
   Returns NULL on error.  */
409
 
410
extern struct pex_obj *pex_init (int flags, const char *pname,
6324 serge 411
				 const char *tempbase) ATTRIBUTE_RETURNS_NONNULL;
5191 serge 412
 
413
/* Flags for pex_run.  These are bits to be or'ed together.  */
414
 
415
/* Last program in pipeline.  Standard output of program goes to
416
   OUTNAME, or, if OUTNAME is NULL, to standard output of caller.  Do
417
   not set this if you want to call pex_read_output.  After this is
418
   set, pex_run may no longer be called with the same struct
419
   pex_obj.  */
420
#define PEX_LAST		0x1
421
 
422
/* Search for program in executable search path.  */
423
#define PEX_SEARCH		0x2
424
 
425
/* OUTNAME is a suffix.  */
426
#define PEX_SUFFIX		0x4
427
 
428
/* Send program's standard error to standard output.  */
429
#define PEX_STDERR_TO_STDOUT	0x8
430
 
431
/* Input file should be opened in binary mode.  This flag is ignored
432
   on Unix.  */
433
#define PEX_BINARY_INPUT	0x10
434
 
435
/* Output file should be opened in binary mode.  This flag is ignored
436
   on Unix.  For proper behaviour PEX_BINARY_INPUT and
437
   PEX_BINARY_OUTPUT have to match appropriately--i.e., a call using
438
   PEX_BINARY_OUTPUT should be followed by a call using
439
   PEX_BINARY_INPUT.  */
440
#define PEX_BINARY_OUTPUT	0x20
441
 
442
/* Capture stderr to a pipe.  The output can be read by
443
   calling pex_read_err and reading from the returned
444
   FILE object.  This flag may be specified only for
445
   the last program in a pipeline.
446
 
447
   This flag is supported only on Unix and Windows.  */
448
#define PEX_STDERR_TO_PIPE	0x40
449
 
450
/* Capture stderr in binary mode.  This flag is ignored
451
   on Unix.  */
452
#define PEX_BINARY_ERROR	0x80
453
 
6324 serge 454
/* Append stdout to existing file instead of truncating it.  */
455
#define PEX_STDOUT_APPEND	0x100
5191 serge 456
 
6324 serge 457
/* Thes same as PEX_STDOUT_APPEND, but for STDERR.  */
458
#define PEX_STDERR_APPEND	0x200
459
 
5191 serge 460
/* Execute one program.  Returns NULL on success.  On error returns an
461
   error string (typically just the name of a system call); the error
462
   string is statically allocated.
463
 
464
   OBJ		Returned by pex_init.
465
 
466
   FLAGS	As above.
467
 
468
   EXECUTABLE	The program to execute.
469
 
470
   ARGV		NULL terminated array of arguments to pass to the program.
471
 
472
   OUTNAME	Sets the output file name as follows:
473
 
474
		PEX_SUFFIX set (OUTNAME may not be NULL):
475
		  TEMPBASE parameter to pex_init not NULL:
476
		    Output file name is the concatenation of TEMPBASE
477
		    and OUTNAME.
478
		  TEMPBASE is NULL:
479
		    Output file name is a random file name ending in
480
		    OUTNAME.
481
		PEX_SUFFIX not set:
482
		  OUTNAME not NULL:
483
		    Output file name is OUTNAME.
484
		  OUTNAME NULL, TEMPBASE not NULL:
485
		    Output file name is randomly chosen using
486
		    TEMPBASE.
487
		  OUTNAME NULL, TEMPBASE NULL:
488
		    Output file name is randomly chosen.
489
 
490
		If PEX_LAST is not set, the output file name is the
491
   		name to use for a temporary file holding stdout, if
492
   		any (there will not be a file if PEX_USE_PIPES is set
493
   		and the system supports pipes).  If a file is used, it
494
   		will be removed when no longer needed unless
495
   		PEX_SAVE_TEMPS is set.
496
 
497
		If PEX_LAST is set, and OUTNAME is not NULL, standard
498
   		output is written to the output file name.  The file
499
   		will not be removed.  If PEX_LAST and PEX_SUFFIX are
500
   		both set, TEMPBASE may not be NULL.
501
 
502
   ERRNAME	If not NULL, this is the name of a file to which
503
		standard error is written.  If NULL, standard error of
504
		the program is standard error of the caller.
505
 
506
   ERR		On an error return, *ERR is set to an errno value, or
507
   		to 0 if there is no relevant errno.
508
*/
509
 
510
extern const char *pex_run (struct pex_obj *obj, int flags,
511
			    const char *executable, char * const *argv,
512
			    const char *outname, const char *errname,
513
			    int *err);
514
 
515
/* As for pex_run (), but takes an extra parameter to enable the
516
   environment for the child process to be specified.
517
 
518
   ENV		The environment for the child process, specified as
519
		an array of character pointers.  Each element of the
520
		array should point to a string of the form VAR=VALUE,
521
                with the exception of the last element which must be
522
                a null pointer.
523
*/
524
 
525
extern const char *pex_run_in_environment (struct pex_obj *obj, int flags,
526
			                   const char *executable,
527
                                           char * const *argv,
528
                                           char * const *env,
529
              	          		   const char *outname,
530
					   const char *errname, int *err);
531
 
532
/* Return a stream for a temporary file to pass to the first program
533
   in the pipeline as input.  The file name is chosen as for pex_run.
534
   pex_run closes the file automatically; don't close it yourself.  */
535
 
536
extern FILE *pex_input_file (struct pex_obj *obj, int flags,
537
                             const char *in_name);
538
 
539
/* Return a stream for a pipe connected to the standard input of the
540
   first program in the pipeline.  You must have passed
541
   `PEX_USE_PIPES' to `pex_init'.  Close the returned stream
542
   yourself.  */
543
 
544
extern FILE *pex_input_pipe (struct pex_obj *obj, int binary);
545
 
546
/* Read the standard output of the last program to be executed.
547
   pex_run can not be called after this.  BINARY should be non-zero if
548
   the file should be opened in binary mode; this is ignored on Unix.
549
   Returns NULL on error.  Don't call fclose on the returned FILE; it
550
   will be closed by pex_free.  */
551
 
552
extern FILE *pex_read_output (struct pex_obj *, int binary);
553
 
554
/* Read the standard error of the last program to be executed.
555
   pex_run can not be called after this.  BINARY should be non-zero if
556
   the file should be opened in binary mode; this is ignored on Unix.
557
   Returns NULL on error.  Don't call fclose on the returned FILE; it
558
   will be closed by pex_free.  */
559
 
560
extern FILE *pex_read_err (struct pex_obj *, int binary);
561
 
562
/* Return exit status of all programs in VECTOR.  COUNT indicates the
563
   size of VECTOR.  The status codes in the vector are in the order of
564
   the calls to pex_run.  Returns 0 on error, 1 on success.  */
565
 
566
extern int pex_get_status (struct pex_obj *, int count, int *vector);
567
 
568
/* Return times of all programs in VECTOR.  COUNT indicates the size
569
   of VECTOR.  struct pex_time is really just struct timeval, but that
570
   is not portable to all systems.  Returns 0 on error, 1 on
571
   success.  */
572
 
573
struct pex_time
574
{
575
  unsigned long user_seconds;
576
  unsigned long user_microseconds;
577
  unsigned long system_seconds;
578
  unsigned long system_microseconds;
579
};
580
 
581
extern int pex_get_times (struct pex_obj *, int count,
582
			  struct pex_time *vector);
583
 
584
/* Clean up a pex_obj.  If you have not called pex_get_times or
585
   pex_get_status, this will try to kill the subprocesses.  */
586
 
587
extern void pex_free (struct pex_obj *);
588
 
589
/* Just execute one program.  Return value is as for pex_run.
590
   FLAGS	Combination of PEX_SEARCH and PEX_STDERR_TO_STDOUT.
591
   EXECUTABLE	As for pex_run.
592
   ARGV		As for pex_run.
593
   PNAME	As for pex_init.
594
   OUTNAME	As for pex_run when PEX_LAST is set.
595
   ERRNAME	As for pex_run.
596
   STATUS	Set to exit status on success.
597
   ERR		As for pex_run.
598
*/
599
 
600
extern const char *pex_one (int flags, const char *executable,
601
			    char * const *argv, const char *pname,
602
			    const char *outname, const char *errname,
603
			    int *status, int *err);
604
 
605
/* pexecute and pwait are the old pexecute interface, still here for
606
   backward compatibility.  Don't use these for new code.  Instead,
607
   use pex_init/pex_run/pex_get_status/pex_free, or pex_one.  */
608
 
609
/* Definitions used by the pexecute routine.  */
610
 
611
#define PEXECUTE_FIRST   1
612
#define PEXECUTE_LAST    2
613
#define PEXECUTE_ONE     (PEXECUTE_FIRST + PEXECUTE_LAST)
614
#define PEXECUTE_SEARCH  4
615
#define PEXECUTE_VERBOSE 8
616
 
617
/* Execute a program.  */
618
 
619
extern int pexecute (const char *, char * const *, const char *,
620
                     const char *, char **, char **, int);
621
 
622
/* Wait for pexecute to finish.  */
623
 
624
extern int pwait (int, int *, int);
625
 
6324 serge 626
#if defined(HAVE_DECL_ASPRINTF) && !HAVE_DECL_ASPRINTF
5191 serge 627
/* Like sprintf but provides a pointer to malloc'd storage, which must
628
   be freed by the caller.  */
629
 
630
extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
631
#endif
632
 
6324 serge 633
/* Like asprintf but allocates memory without fail. This works like
634
   xmalloc.  */
635
 
636
extern char *xasprintf (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_PRINTF_1;
637
 
5191 serge 638
#if !HAVE_DECL_VASPRINTF
639
/* Like vsprintf but provides a pointer to malloc'd storage, which
640
   must be freed by the caller.  */
641
 
642
extern int vasprintf (char **, const char *, va_list) ATTRIBUTE_PRINTF(2,0);
643
#endif
644
 
6324 serge 645
/* Like vasprintf but allocates memory without fail. This works like
646
   xmalloc.  */
647
 
648
extern char *xvasprintf (const char *, va_list) ATTRIBUTE_MALLOC ATTRIBUTE_PRINTF(1,0);
649
 
5191 serge 650
#if defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF
651
/* Like sprintf but prints at most N characters.  */
652
extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3;
653
#endif
654
 
655
#if defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
656
/* Like vsprintf but prints at most N characters.  */
657
extern int vsnprintf (char *, size_t, const char *, va_list) ATTRIBUTE_PRINTF(3,0);
658
#endif
659
 
6324 serge 660
#if defined (HAVE_DECL_STRNLEN) && !HAVE_DECL_STRNLEN
661
extern size_t strnlen (const char *, size_t);
662
#endif
663
 
5191 serge 664
#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP
665
/* Compare version strings.  */
666
extern int strverscmp (const char *, const char *);
667
#endif
668
 
6324 serge 669
#if defined(HAVE_DECL_STRTOL) && !HAVE_DECL_STRTOL
670
extern long int strtol (const char *nptr,
671
                        char **endptr, int base);
672
#endif
673
 
674
#if defined(HAVE_DECL_STRTOUL) && !HAVE_DECL_STRTOUL
675
extern unsigned long int strtoul (const char *nptr,
676
                                  char **endptr, int base);
677
#endif
678
 
679
#if defined(HAVE_LONG_LONG) && defined(HAVE_DECL_STRTOLL) && !HAVE_DECL_STRTOLL
680
__extension__
681
extern long long int strtoll (const char *nptr,
682
                              char **endptr, int base);
683
#endif
684
 
685
#if defined(HAVE_LONG_LONG) && defined(HAVE_DECL_STRTOULL) && !HAVE_DECL_STRTOULL
686
__extension__
687
extern unsigned long long int strtoull (const char *nptr,
688
                                        char **endptr, int base);
689
#endif
690
 
691
#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP
692
/* Compare version strings.  */
693
extern int strverscmp (const char *, const char *);
694
#endif
695
 
5191 serge 696
/* Set the title of a process */
697
extern void setproctitle (const char *name, ...);
698
 
699
/* Increase stack limit if possible.  */
700
extern void stack_limit_increase (unsigned long);
701
 
702
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
703
 
704
/* Drastically simplified alloca configurator.  If we're using GCC,
705
   we use __builtin_alloca; otherwise we use the C alloca.  The C
706
   alloca is always available.  You can override GCC by defining
707
   USE_C_ALLOCA yourself.  The canonical autoconf macro C_ALLOCA is
708
   also set/unset as it is often used to indicate whether code needs
709
   to call alloca(0).  */
710
extern void *C_alloca (size_t) ATTRIBUTE_MALLOC;
711
#undef alloca
712
#if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA
713
# define alloca(x) __builtin_alloca(x)
714
# undef C_ALLOCA
715
# define ASTRDUP(X) \
716
  (__extension__ ({ const char *const libiberty_optr = (X); \
717
   const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \
718
   char *const libiberty_nptr = (char *const) alloca (libiberty_len); \
719
   (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); }))
720
#else
721
# define alloca(x) C_alloca(x)
722
# undef USE_C_ALLOCA
723
# define USE_C_ALLOCA 1
724
# undef C_ALLOCA
725
# define C_ALLOCA 1
726
extern const char *libiberty_optr;
727
extern char *libiberty_nptr;
728
extern unsigned long libiberty_len;
729
# define ASTRDUP(X) \
730
  (libiberty_optr = (X), \
731
   libiberty_len = strlen (libiberty_optr) + 1, \
732
   libiberty_nptr = (char *) alloca (libiberty_len), \
733
   (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len))
734
#endif
735
 
736
#ifdef __cplusplus
737
}
738
#endif
739
 
740
 
741
#endif /* ! defined (LIBIBERTY_H) */