OSDN Git Service

gcc/
[pf3gnuchains/gcc-fork.git] / include / libiberty.h
index 27291c9..4e69734 100644 (file)
@@ -86,6 +86,10 @@ extern char **dupargv (char **) ATTRIBUTE_MALLOC;
 
 extern void expandargv PARAMS ((int *, char ***));
 
+/* Write argv to an @-file, inserting necessary quoting.  */
+
+extern int writeargv PARAMS ((char **, FILE *));
+
 /* Return the last component of a path name.  Note that we can't use a
    prototype here because the parameter is declared inconsistently
    across different systems, sometimes as "char *" and sometimes as
@@ -400,6 +404,19 @@ extern struct pex_obj *pex_init (int flags, const char *pname,
    PEX_BINARY_INPUT.  */
 #define PEX_BINARY_OUTPUT      0x20
 
+/* Capture stderr to a pipe.  The output can be read by
+   calling pex_read_err and reading from the returned
+   FILE object.  This flag may be specified only for
+   the last program in a pipeline.  
+
+   This flag is supported only on Unix and Windows.  */
+#define PEX_STDERR_TO_PIPE     0x40
+
+/* Capture stderr in binary mode.  This flag is ignored
+   on Unix.  */
+#define PEX_BINARY_ERROR       0x80
+
+
 /* Execute one program.  Returns NULL on success.  On error returns an
    error string (typically just the name of a system call); the error
    string is statically allocated.
@@ -472,33 +489,6 @@ extern const char *pex_run_in_environment (struct pex_obj *obj, int flags,
                                           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.  */
@@ -521,6 +511,14 @@ extern FILE *pex_input_pipe (struct pex_obj *obj, int binary);
 
 extern FILE *pex_read_output (struct pex_obj *, int binary);
 
+/* Read the standard error 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.
+   Returns NULL on error.  Don't call fclose on the returned FILE; it
+   will be closed by pex_free.  */
+
+extern FILE *pex_read_err (struct pex_obj *, int binary);
+
 /* Return exit status of all programs in VECTOR.  COUNT indicates the
    size of VECTOR.  The status codes in the vector are in the order of
    the calls to pex_run.  Returns 0 on error, 1 on success.  */