X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fui-file.h;h=667357433baecd856983cc90a8fb5f91136378a1;hb=ca9b78ce906d588bb9aab0c6739c2dbdacd62612;hp=873b48cae1e235cddeeff4c473fa7609243f6e88;hpb=3e43a32aaa2d78fca10dea6746b820176f39bcc8;p=binutils-gdb.git diff --git a/gdb/ui-file.h b/gdb/ui-file.h index 873b48cae1e..667357433ba 100644 --- a/gdb/ui-file.h +++ b/gdb/ui-file.h @@ -1,6 +1,5 @@ /* UI_FILE - a generic STDIO like output stream. - Copyright (C) 1999, 2000, 2007, 2008, 2009, 2010, 2011 - Free Software Foundation, Inc. + Copyright (C) 1999-2015 Free Software Foundation, Inc. This file is part of GDB. @@ -23,19 +22,19 @@ 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. */ + 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. */ +/* 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, @@ -45,6 +44,17 @@ 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, @@ -67,7 +77,12 @@ 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); + ui_file_delete_ftype *to_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); @@ -83,14 +98,23 @@ extern int ui_file_isatty (struct ui_file *); extern void ui_file_write (struct ui_file *file, const char *buf, long length_buf); -/* NOTE: copies left to right */ +/* A wrapper for ui_file_write that is suitable for use by + ui_file_put. */ + +extern void ui_file_write_for_put (void *data, const char *buffer, + long length_buffer); + +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); /* Returns a freshly allocated buffer containing the entire contents of FILE (as determined by ui_file_put()) with a NUL character appended. LENGTH, if not NULL, is set to the size of the buffer - minus that appended NUL. */ + 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 @@ -100,23 +124,29 @@ extern char *ui_file_obsavestring (struct ui_file *file, extern long ui_file_read (struct ui_file *file, char *buf, long length_buf); -/* Create/open a memory based file. Can be used as a scratch buffer - for collecting output. */ +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. */ 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. */ -struct ui_file *tee_file_new (struct ui_file *one, - int close_one, - struct ui_file *two, - int close_two); +extern struct ui_file *tee_file_new (struct ui_file *one, + int close_one, + struct ui_file *two, + int close_two); #endif