[PATCH] Add fseek to ui-file

Hui Zhu teawater@gmail.com
Wed Dec 12 11:01:00 GMT 2012


On Tue, Dec 11, 2012 at 3:55 AM, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:
>
> Hui> Post a patch for that.  Please help me review it.
>
> I think _p is not a super choice for a suffix.
> It already has a meaning in gdb.
> "_ptr" or most anything else would be better.
>
> Tom

Post a new version.  Please help me review it.

Best,
Hui

2012-12-12  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.
-------------- next part --------------
--- a/ui-file.c
+++ b/ui-file.c
@@ -36,6 +36,7 @@ static ui_file_flush_ftype null_file_flu
 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,12 @@ null_file_delete (struct ui_file *file)
   return;
 }
 
+static int
+null_file_fseek (struct ui_file *stream, long offset, int whence)
+{
+  return 0;
+}
+
 void *
 ui_file_data (struct ui_file *file)
 {
@@ -227,6 +236,12 @@ ui_file_read (struct ui_file *file, char
   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 +299,12 @@ set_ui_file_fputs (struct ui_file *file,
 }
 
 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 +490,7 @@ static ui_file_isatty_ftype stdio_file_i
 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 +521,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 +639,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 *
--- a/ui-file.h
+++ b/ui-file.h
@@ -79,6 +79,11 @@ typedef void (ui_file_delete_ftype) (str
 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 (struc
 
 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);


More information about the Gdb-patches mailing list