This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[RFA] ui-file.[ch]: tell(), mem_filebuf()


The attached patch:

  1. Adds a tell method to the ui_file interface.

  2. Changes mem_file_write()'s scope from global to static.

  3. Defines a new function, char *mem_filebuf (struct ui_file *file), to
     return the buffer currently used for storing FILE's contents.

I made these changes to support some register cache patches I'll be
posting shortly.

There are no regressions on i686-pc-linux-gnu.  Okay to apply?

ChangeLog:

	* ui-file.c (null_file_tell, ui_file_tell, set_ui_file_tell,
	mem_file_tell, mem_filebuf): New functions.
	(struct ui_file): Add to_tell() method.
	(ui_file_new, mem_file_new): Call set_ui_file_tell().
	(mem_file_write): Define as static.
	* ui-file.h (ui_file_tell_ftype): New typedef.
	(set_ui_file_tell, ui_file_tell, mem_filebuf): Prototype.

Nick Duffek
nsd@redhat.com

Index: gdb/ui-file.c
===================================================================
diff -up gdb/ui-file.c gdb/ui-file.c
--- gdb/ui-file.c	Thu Dec 14 08:16:50 2000
+++ gdb/ui-file.c	Thu Dec 14 08:05:05 2000
@@ -33,6 +33,7 @@ static ui_file_fputs_ftype null_file_fpu
 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_tell_ftype null_file_tell;
 static ui_file_put_ftype null_file_put;
 
 struct ui_file
@@ -44,6 +45,7 @@ struct ui_file
     ui_file_delete_ftype *to_delete;
     ui_file_isatty_ftype *to_isatty;
     ui_file_rewind_ftype *to_rewind;
+    ui_file_tell_ftype *to_tell;
     ui_file_put_ftype *to_put;
     void *to_data;
   };
@@ -60,6 +62,7 @@ ui_file_new (void)
   set_ui_file_fputs (file, null_file_fputs);
   set_ui_file_isatty (file, null_file_isatty);
   set_ui_file_rewind (file, null_file_rewind);
+  set_ui_file_tell (file, null_file_tell);
   set_ui_file_put (file, null_file_put);
   return file;
 }
@@ -83,6 +86,13 @@ null_file_rewind (struct ui_file *file)
   return;
 }
 
+static long
+null_file_tell (file)
+     struct ui_file *file;
+{
+  return 0;
+}
+
 static void
 null_file_put (struct ui_file *file,
 	       ui_file_put_method_ftype *write,
@@ -171,6 +181,13 @@ ui_file_rewind (struct ui_file *file)
   file->to_rewind (file);
 }
 
+long
+ui_file_tell (file)
+     struct ui_file *file;
+{
+  return file->to_tell (file);
+}
+
 void
 ui_file_put (struct ui_file *file,
 	      ui_file_put_method_ftype *write,
@@ -212,6 +229,12 @@ set_ui_file_rewind (struct ui_file *file
 }
 
 void
+set_ui_file_tell (struct ui_file *file, ui_file_tell_ftype *tell)
+{
+  file->to_tell = tell;
+}
+
+void
 set_ui_file_put (struct ui_file *file, ui_file_put_ftype *put)
 {
   file->to_put = put;
@@ -287,6 +310,7 @@ struct mem_file
   };
 
 static ui_file_rewind_ftype mem_file_rewind;
+static ui_file_tell_ftype mem_file_tell;
 static ui_file_put_ftype mem_file_put;
 static ui_file_write_ftype mem_file_write;
 static ui_file_delete_ftype mem_file_delete;
@@ -300,6 +324,7 @@ mem_file_new (void)
   struct ui_file *file = ui_file_new ();
   set_ui_file_data (file, stream, mem_file_delete);
   set_ui_file_rewind (file, mem_file_rewind);
+  set_ui_file_tell (file, mem_file_tell);
   set_ui_file_put (file, mem_file_put);
   set_ui_file_write (file, mem_file_write);
   stream->magic = &mem_file_magic;
@@ -326,6 +351,15 @@ mem_fileopen (void)
   return mem_file_new ();
 }
 
+char *
+mem_filebuf (struct ui_file *file)
+{
+  struct mem_file *stream = ui_file_data (file);
+  if (stream->magic != &mem_file_magic)
+    internal_error ("mem_file_rewind: bad magic number");
+  return stream->buffer;
+}
+
 static void
 mem_file_rewind (struct ui_file *file)
 {
@@ -335,6 +369,15 @@ mem_file_rewind (struct ui_file *file)
   stream->length_buffer = 0;
 }
 
+static long
+mem_file_tell (struct ui_file *file)
+{
+  struct mem_file *stream = ui_file_data (file);
+  if (stream->magic != &mem_file_magic)
+    internal_error ("mem_file_tell: bad magic number");
+  return (long) stream->length_buffer;
+}
+
 static void
 mem_file_put (struct ui_file *file,
 	      ui_file_put_method_ftype *write,
@@ -347,7 +390,7 @@ mem_file_put (struct ui_file *file,
     write (dest, stream->buffer, stream->length_buffer);
 }
 
-void
+static void
 mem_file_write (struct ui_file *file,
 		const char *buffer,
 		long length_buffer)
Index: gdb/ui-file.h
===================================================================
diff -up gdb/ui-file.h gdb/ui-file.h
--- gdb/ui-file.h	Thu Dec 14 08:16:56 2000
+++ gdb/ui-file.h	Thu Dec 14 08:15:45 2000
@@ -47,6 +47,9 @@ extern void set_ui_file_isatty (struct u
 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 long (ui_file_tell_ftype) (struct ui_file * stream);
+extern void set_ui_file_tell (struct ui_file *stream, ui_file_tell_ftype * tell);
+
 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);
@@ -63,6 +66,8 @@ extern void ui_file_delete (struct ui_fi
 
 extern void ui_file_rewind (struct ui_file *stream);
 
+extern long ui_file_tell (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);
@@ -77,12 +82,13 @@ extern void ui_file_put (struct ui_file 
 extern char *ui_file_xstrdup (struct ui_file *file, long *length);
 
 
-
 /* Create/open a memory based file. Can be used as a scratch buffer
    for collecting output. */
 extern struct ui_file *mem_fileopen (void);
 
-
+/* Return the buffer currently used for storing FILE's contents.  FILE must
+   have been created by mem_fileopen().  */
+extern char *mem_filebuf (struct ui_file *file);
 
 /* Open/create a an STDIO based UI_FILE using the already open FILE. */
 extern struct ui_file *stdio_fileopen (FILE *file);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]