From 2a9d5ccf7943dbe8e1ca5f6b425fce5aa60647f3 Mon Sep 17 00:00:00 2001 From: Hui Zhu Date: Tue, 18 Dec 2012 07:01:58 +0000 Subject: [PATCH] 2012-12-18 Hui Zhu * ui-file.c (ui_file): Add to_fseek. (ui_file_new): Call set_ui_file_fseek. (null_file_fseek, ui_file_fseek, set_ui_file_fseek, stdio_file_fseek): New functions. (stdio_file_new): Call set_ui_file_fseek. * ui-file.h (ui_file_fseek_ftype): New typedef. (set_ui_file_fseek, ui_file_fseek): New externs. --- gdb/ChangeLog | 10 ++++++++++ gdb/ui-file.c | 37 +++++++++++++++++++++++++++++++++++++ gdb/ui-file.h | 7 +++++++ 3 files changed, 54 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b1dcaf1..b334164 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,15 @@ 2012-12-18 Hui Zhu + * ui-file.c (ui_file): Add to_fseek. + (ui_file_new): Call set_ui_file_fseek. + (null_file_fseek, ui_file_fseek, set_ui_file_fseek, + stdio_file_fseek): New functions. + (stdio_file_new): Call set_ui_file_fseek. + * ui-file.h (ui_file_fseek_ftype): New typedef. + (set_ui_file_fseek, ui_file_fseek): New externs. + +2012-12-18 Hui Zhu + * ui-file.c (set_ui_file_flush): Change flush to flush_ptr. (set_ui_file_isatty): Change isatty to isatty_ptr. (set_ui_file_rewind): Change rewind to rewind_ptr. diff --git a/gdb/ui-file.c b/gdb/ui-file.c index 657a3fc..e96ad54 100644 --- a/gdb/ui-file.c +++ b/gdb/ui-file.c @@ -36,6 +36,7 @@ static ui_file_flush_ftype null_file_flush; static ui_file_delete_ftype null_file_delete; static ui_file_rewind_ftype null_file_rewind; static ui_file_put_ftype null_file_put; +static ui_file_fseek_ftype null_file_fseek; struct ui_file { @@ -49,6 +50,7 @@ struct ui_file ui_file_isatty_ftype *to_isatty; ui_file_rewind_ftype *to_rewind; ui_file_put_ftype *to_put; + ui_file_fseek_ftype *to_fseek; void *to_data; }; int ui_file_magic; @@ -68,6 +70,7 @@ ui_file_new (void) set_ui_file_isatty (file, null_file_isatty); set_ui_file_rewind (file, null_file_rewind); set_ui_file_put (file, null_file_put); + set_ui_file_fseek (file, null_file_fseek); return file; } @@ -170,6 +173,14 @@ null_file_delete (struct ui_file *file) return; } +static int +null_file_fseek (struct ui_file *stream, long offset, int whence) +{ + errno = EBADF; + + return -1; +} + void * ui_file_data (struct ui_file *file) { @@ -227,6 +238,12 @@ ui_file_read (struct ui_file *file, char *buf, long length_buf) return file->to_read (file, buf, length_buf); } +int +ui_file_fseek (struct ui_file *file, long offset, int whence) +{ + return file->to_fseek (file, offset, whence); +} + void fputs_unfiltered (const char *buf, struct ui_file *file) { @@ -284,6 +301,12 @@ set_ui_file_fputs (struct ui_file *file, ui_file_fputs_ftype *fputs_ptr) } void +set_ui_file_fseek (struct ui_file *file, ui_file_fseek_ftype *fseek_ptr) +{ + file->to_fseek = fseek_ptr; +} + +void set_ui_file_data (struct ui_file *file, void *data, ui_file_delete_ftype *delete_ptr) { @@ -469,6 +492,7 @@ static ui_file_isatty_ftype stdio_file_isatty; static ui_file_delete_ftype stdio_file_delete; static struct ui_file *stdio_file_new (FILE *file, int close_p); static ui_file_flush_ftype stdio_file_flush; +static ui_file_fseek_ftype stdio_file_fseek; static int stdio_file_magic; @@ -499,6 +523,7 @@ stdio_file_new (FILE *file, int close_p) set_ui_file_fputs (ui_file, stdio_file_fputs); set_ui_file_read (ui_file, stdio_file_read); set_ui_file_isatty (ui_file, stdio_file_isatty); + set_ui_file_fseek (ui_file, stdio_file_fseek); return ui_file; } @@ -616,6 +641,18 @@ stdio_file_isatty (struct ui_file *file) return (isatty (stdio->fd)); } +static int +stdio_file_fseek (struct ui_file *file, long offset, int whence) +{ + struct stdio_file *stdio = ui_file_data (file); + + if (stdio->magic != &stdio_file_magic) + internal_error (__FILE__, __LINE__, + _("stdio_file_fseek: bad magic number")); + + return fseek (stdio->file, offset, whence); +} + /* Like fdopen(). Create a ui_file from a previously opened FILE. */ struct ui_file * diff --git a/gdb/ui-file.h b/gdb/ui-file.h index a3b97da..bb85713 100644 --- a/gdb/ui-file.h +++ b/gdb/ui-file.h @@ -79,6 +79,11 @@ 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); +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); @@ -113,6 +118,8 @@ extern char *ui_file_obsavestring (struct ui_file *file, 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. */ extern struct ui_file *mem_fileopen (void); -- 2.7.4