aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHui Zhu <teawater@gmail.com>2012-12-18 07:01:58 +0000
committerHui Zhu <teawater@gmail.com>2012-12-18 07:01:58 +0000
commit2a9d5ccf7943dbe8e1ca5f6b425fce5aa60647f3 (patch)
treefad55e602a3f3a27ff86347cee85f1d233c3d33e
parent3f453875a4675e487d0f25e15d512c16514e4a63 (diff)
downloadbinutils-2a9d5ccf7943dbe8e1ca5f6b425fce5aa60647f3.zip
binutils-2a9d5ccf7943dbe8e1ca5f6b425fce5aa60647f3.tar.gz
binutils-2a9d5ccf7943dbe8e1ca5f6b425fce5aa60647f3.tar.bz2
2012-12-18 Hui Zhu <hui_zhu@mentor.com>
* 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.
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/ui-file.c37
-rw-r--r--gdb/ui-file.h7
3 files changed, 54 insertions, 0 deletions
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 <hui_zhu@mentor.com>
+ * 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 <hui_zhu@mentor.com>
+
* 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);