X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=include%2Flibiberty.h;h=1328d3eb14c0340cb3641d73828b1b529a928e99;hb=db2ad24965116a95f6e4a932cdfec09ee8e328d5;hp=75cbedc23dd468ed4b47e3e8d2429b200fe1c7a7;hpb=71f27b28ea4c12ab7af9b49492f3a1afeca325f1;p=pf3gnuchains%2Fgcc-fork.git diff --git a/include/libiberty.h b/include/libiberty.h index 75cbedc23dd..1328d3eb14c 100644 --- a/include/libiberty.h +++ b/include/libiberty.h @@ -82,6 +82,9 @@ extern void freeargv (char **); extern char **dupargv (char **) ATTRIBUTE_MALLOC; +/* Expand "@file" arguments in argv. */ + +extern void expandargv PARAMS ((int *, char ***)); /* Return the last component of a path name. Note that we can't use a prototype here because the parameter is declared inconsistently @@ -326,7 +329,7 @@ extern double physmem_available (void); /* Type-safe obstack allocator. */ #define XOBNEW(O, T) ((T *) obstack_alloc ((O), sizeof (T))) - +#define XOBFINISH(O, T) ((T) obstack_finish ((O))) /* hex character manipulation routines */ @@ -445,6 +448,64 @@ extern const char *pex_run (struct pex_obj *obj, int flags, const char *outname, const char *errname, int *err); +/* As for pex_run (), but takes an extra parameter to enable the + environment for the child process to be specified. + + ENV The environment for the child process, specified as + an array of character pointers. Each element of the + array should point to a string of the form VAR=VALUE, + with the exception of the last element which must be + a null pointer. +*/ + +extern const char *pex_run_in_environment (struct pex_obj *obj, int flags, + const char *executable, + char * const *argv, + char * const *env, + const char *outname, + const char *errname, int *err); + +/* Return a `FILE' pointer FP for the standard input of the first + program in the pipeline; FP is opened for writing. You must have + passed `PEX_USE_PIPES' to the `pex_init' call that returned OBJ. + You must close FP yourself with `fclose' to indicate that the + pipeline's input is complete. + + The file descriptor underlying FP is marked not to be inherited by + child processes. + + This call is not supported on systems which do not support pipes; + it returns with an error. (We could implement it by writing a + temporary file, but then you would need to write all your data and + close FP before your first call to `pex_run' -- and that wouldn't + work on systems that do support pipes: the pipe would fill up, and + you would block. So there isn't any easy way to conceal the + differences between the two types of systems.) + + If you call both `pex_write_input' and `pex_read_output', be + careful to avoid deadlock. If the output pipe fills up, so that + each program in the pipeline is waiting for the next to read more + data, and you fill the input pipe by writing more data to FP, then + there is no way to make progress: the only process that could read + data from the output pipe is you, but you are blocked on the input + pipe. */ + +extern FILE *pex_write_input (struct pex_obj *obj, int binary); + +/* Return a stream for a temporary file to pass to the first program + in the pipeline as input. The file name is chosen as for pex_run. + pex_run closes the file automatically; don't close it yourself. */ + +extern FILE *pex_input_file (struct pex_obj *obj, int flags, + const char *in_name); + +/* Return a stream for a pipe connected to the standard input of the + first program in the pipeline. You must have passed + `PEX_USE_PIPES' to `pex_init'. Close the returned stream + yourself. */ + +extern FILE *pex_input_pipe (struct pex_obj *obj, int binary); + /* Read the standard output of the last program to be executed. pex_run can not be called after this. BINARY should be non-zero if the file should be opened in binary mode; this is ignored on Unix. @@ -527,8 +588,7 @@ extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; /* Like vsprintf but provides a pointer to malloc'd storage, which must be freed by the caller. */ -extern int vasprintf (char **, const char *, va_list) - ATTRIBUTE_PRINTF(2,0); +extern int vasprintf (char **, const char *, va_list) ATTRIBUTE_PRINTF(2,0); #endif #if defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF @@ -538,7 +598,12 @@ extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3; #if defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF /* Like vsprintf but prints at most N characters. */ -extern int vsnprintf (char *, size_t, const char *, va_list); +extern int vsnprintf (char *, size_t, const char *, va_list) ATTRIBUTE_PRINTF(3,0); +#endif + +#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP +/* Compare version strings. */ +extern int strverscmp (const char *, const char *); #endif #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))