X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fui-file.h;h=ba0a9083e0205f61ddcaa9a43bebf54284895571;hb=22f25c9dd6e118ecb695e6d8500b90d572644386;hp=c805335bc5f90e66c56d30fc8a490e30e5e197c4;hpb=d9fcf2fb1c12d48f657c974dc5b6898022bf9ccf;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ui-file.h b/gdb/ui-file.h index c805335bc5..ba0a9083e0 100644 --- a/gdb/ui-file.h +++ b/gdb/ui-file.h @@ -1,11 +1,11 @@ /* UI_FILE - a generic STDIO like output stream. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999-2013 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -14,45 +14,75 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ #ifndef UI_FILE_H #define UI_FILE_H +struct obstack; struct ui_file; -/* Create a generic ui_file object with null methods. */ +/* Create a generic ui_file object with null methods. */ extern struct ui_file *ui_file_new (void); /* Override methods used by specific implementations of a UI_FILE - object. */ - -typedef void (ui_file_flush_ftype) (struct ui_file * stream); -extern void set_ui_file_flush (struct ui_file *stream, ui_file_flush_ftype * flush); - -/* NOTE: Both fputs and write methods are available. Default - implementations that mapping one onto the other are included. */ -typedef void (ui_file_write_ftype) (struct ui_file * stream, const char *buf, long length_buf); -extern void set_ui_file_write (struct ui_file *stream, ui_file_write_ftype *fputs); - -typedef void (ui_file_fputs_ftype) (const char *, struct ui_file * stream); -extern void set_ui_file_fputs (struct ui_file *stream, ui_file_fputs_ftype * fputs); - -typedef int (ui_file_isatty_ftype) (struct ui_file * stream); -extern void set_ui_file_isatty (struct ui_file *stream, ui_file_isatty_ftype * isatty); - -typedef void (ui_file_rewind_ftype) (struct ui_file * stream); -extern void set_ui_file_rewind (struct ui_file *stream, ui_file_rewind_ftype * rewind); - -typedef void (ui_file_put_method_ftype) (void *object, const char *buffer, long length_buffer); -typedef void (ui_file_put_ftype) (struct ui_file *stream, ui_file_put_method_ftype * method, void *context); -extern void set_ui_file_put (struct ui_file *stream, ui_file_put_ftype * put); + object. */ + +typedef void (ui_file_flush_ftype) (struct ui_file *stream); +extern void set_ui_file_flush (struct ui_file *stream, + ui_file_flush_ftype *flush); + +/* NOTE: Both fputs and write methods are available. Default + implementations that mapping one onto the other are included. */ +typedef void (ui_file_write_ftype) (struct ui_file *stream, + const char *buf, long length_buf); +extern void set_ui_file_write (struct ui_file *stream, + ui_file_write_ftype *fputs); + +typedef void (ui_file_fputs_ftype) (const char *, struct ui_file *stream); +extern void set_ui_file_fputs (struct ui_file *stream, + ui_file_fputs_ftype *fputs); + +/* This version of "write" is safe for use in signal handlers. + It's not guaranteed that all existing output will have been + flushed first. + Implementations are also free to ignore some or all of the request. + fputs_async is not provided as the async versions are rarely used, + no point in having both for a rarely used interface. */ +typedef void (ui_file_write_async_safe_ftype) + (struct ui_file *stream, const char *buf, long length_buf); +extern void set_ui_file_write_async_safe + (struct ui_file *stream, ui_file_write_async_safe_ftype *write_async_safe); + +typedef long (ui_file_read_ftype) (struct ui_file *stream, + char *buf, long length_buf); +extern void set_ui_file_read (struct ui_file *stream, + ui_file_read_ftype *fread); + +typedef int (ui_file_isatty_ftype) (struct ui_file *stream); +extern void set_ui_file_isatty (struct ui_file *stream, + ui_file_isatty_ftype *isatty); + +typedef void (ui_file_rewind_ftype) (struct ui_file *stream); +extern void set_ui_file_rewind (struct ui_file *stream, + ui_file_rewind_ftype *rewind); + +typedef void (ui_file_put_method_ftype) (void *object, const char *buffer, + long length_buffer); +typedef void (ui_file_put_ftype) (struct ui_file *stream, + ui_file_put_method_ftype *method, + void *context); +extern void set_ui_file_put (struct ui_file *stream, ui_file_put_ftype *put); typedef void (ui_file_delete_ftype) (struct ui_file * stream); -extern void set_ui_file_data (struct ui_file *stream, void *data, ui_file_delete_ftype * delete); +extern void set_ui_file_data (struct ui_file *stream, void *data, + ui_file_delete_ftype *delete); + +typedef int (ui_file_fseek_ftype) (struct ui_file *stream, long offset, + int whence); +extern void set_ui_file_fseek (struct ui_file *stream, + ui_file_fseek_ftype *fseek_ptr); extern void *ui_file_data (struct ui_file *file); @@ -65,29 +95,52 @@ extern void ui_file_rewind (struct ui_file *stream); extern int ui_file_isatty (struct ui_file *); -extern void ui_file_write (struct ui_file *file, const char *buf, long length_buf); +extern void ui_file_write (struct ui_file *file, const char *buf, + long length_buf); + +extern void ui_file_write_async_safe (struct ui_file *file, const char *buf, + long length_buf); -/* NOTE: copies left to right */ -extern void ui_file_put (struct ui_file *src, ui_file_put_method_ftype *write, void *dest); +/* NOTE: copies left to right. */ +extern void ui_file_put (struct ui_file *src, + ui_file_put_method_ftype *write, void *dest); /* Returns a freshly allocated buffer containing the entire contents of FILE (as determined by ui_file_put()) with a NUL character - appended. LENGTH is set to the size of the buffer minus that - appended NUL. */ + appended. LENGTH, if not NULL, is set to the size of the buffer + minus that appended NUL. */ extern char *ui_file_xstrdup (struct ui_file *file, long *length); +/* Similar to ui_file_xstrdup, but return a new string allocated on + OBSTACK. */ +extern char *ui_file_obsavestring (struct ui_file *file, + struct obstack *obstack, long *length); + +extern long ui_file_read (struct ui_file *file, char *buf, long length_buf); +extern int ui_file_fseek (struct ui_file *file, long offset, int whence); -/* Create/open a memory based file. Can be used as a scratch buffer - for collecting output. */ +/* Create/open a memory based file. Can be used as a scratch buffer + for collecting output. */ extern struct ui_file *mem_fileopen (void); -/* Open/create a an STDIO based UI_FILE using the already open FILE. */ +/* Open/create a STDIO based UI_FILE using the already open FILE. */ extern struct ui_file *stdio_fileopen (FILE *file); -/* Open NAME returning an STDIO based UI_FILE. */ -extern struct ui_file *gdb_fopen (char *name, char *mode); +/* Create a ui_file from stderr. */ +extern struct ui_file *stderr_fileopen (void); + + +/* Open NAME returning an STDIO based UI_FILE. */ +extern struct ui_file *gdb_fopen (const char *name, const char *mode); +/* Create a file which writes to both ONE and TWO. CLOSE_ONE + and CLOSE_TWO indicate whether the original files should be + closed when the new file is closed. */ +extern struct ui_file *tee_file_new (struct ui_file *one, + int close_one, + struct ui_file *two, + int close_two); #endif