Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH] Add fseek to ui-file
@ 2012-12-06  9:46 Hui Zhu
  2012-12-06 21:48 ` Tom Tromey
  0 siblings, 1 reply; 21+ messages in thread
From: Hui Zhu @ 2012-12-06  9:46 UTC (permalink / raw)
  To: Tom Tromey, gdb-patches ml; +Cc: Hui Zhu

[-- Attachment #1: Type: text/plain, Size: 802 bytes --]

Hi Tom,

According to your comments in "[PATCH] Add CTF support to GDB [1/4]
Add "-ctf" to tsave command".
I make this patch to add fseek to ui-file.  Please help me review it.

And stdio_file_fseek has a place different from the other stdio_file
functions.  It check the return of fseek.  If it got error, it will
throw error.
If you think it is OK, I will post patch for other stdio_file functions.
If not, it will update this patch.

Thanks,
Hui

2012-12-06  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.

[-- Attachment #2: ui-file-fseek.txt --]
[-- Type: text/plain, Size: 3516 bytes --]

--- 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 void
+null_file_fseek (struct ui_file * stream, long offset, int whence)
+{
+  return;
+}
+
 void *
 ui_file_data (struct ui_file *file)
 {
@@ -228,6 +237,12 @@ ui_file_read (struct ui_file *file, char
 }
 
 void
+ui_file_fseek (struct ui_file * file, long offset, int whence)
+{
+  file->to_fseek (file, offset, whence);
+}
+
+void
 fputs_unfiltered (const char *buf, struct ui_file *file)
 {
   file->to_fputs (buf, 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)
+{
+  file->to_fseek = fseek;
+}
+
+void
 set_ui_file_data (struct ui_file *file, void *data,
 		  ui_file_delete_ftype *delete)
 {
@@ -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 void 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"));
+
+  if (fseek (stdio->file, offset, whence))
+    error (_("fseek fail: %s"), safe_strerror (errno));
+}
+
 /* 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 void (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);
+
 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 void 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);

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-06  9:46 [PATCH] Add fseek to ui-file Hui Zhu
@ 2012-12-06 21:48 ` Tom Tromey
  2012-12-07  8:02   ` Hui Zhu
  0 siblings, 1 reply; 21+ messages in thread
From: Tom Tromey @ 2012-12-06 21:48 UTC (permalink / raw)
  To: Hui Zhu; +Cc: gdb-patches ml, Hui Zhu

>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:

Hui> And stdio_file_fseek has a place different from the other stdio_file
Hui> functions.  It check the return of fseek.  If it got error, it will
Hui> throw error.
Hui> If you think it is OK, I will post patch for other stdio_file functions.
Hui> If not, it will update this patch.

Thanks.

Hui>  void
Hui> +set_ui_file_fseek (struct ui_file *file, ui_file_fseek_ftype *fseek)
Hui> +{
Hui> +  file->to_fseek = fseek;

I found the argument name 'fseek' confusing here, since this mimics a
global function of the same name.  Could you rename the argument?

Hui> +static void stdio_file_fseek (struct ui_file * file, long offset, int whence)
Hui> +{

Newline after 'void'.

I wonder whether the null fseek ought to unconditionally throw an
exception.  It seems to me that it can't really be successful.

I think this should go in conditionally based on the other patches -- no
need to put it in if it turns out you can't use ui_file after all for
some reason.

Tom


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-06 21:48 ` Tom Tromey
@ 2012-12-07  8:02   ` Hui Zhu
  2012-12-07  9:56     ` Pedro Alves
  2012-12-07 14:49     ` Tom Tromey
  0 siblings, 2 replies; 21+ messages in thread
From: Hui Zhu @ 2012-12-07  8:02 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches ml, Hui Zhu

[-- Attachment #1: Type: text/plain, Size: 1782 bytes --]

On Fri, Dec 7, 2012 at 5:48 AM, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:
>
> Hui> And stdio_file_fseek has a place different from the other stdio_file
> Hui> functions.  It check the return of fseek.  If it got error, it will
> Hui> throw error.
> Hui> If you think it is OK, I will post patch for other stdio_file functions.
> Hui> If not, it will update this patch.
>
> Thanks.
>
> Hui>  void
> Hui> +set_ui_file_fseek (struct ui_file *file, ui_file_fseek_ftype *fseek)
> Hui> +{
> Hui> +  file->to_fseek = fseek;
>
> I found the argument name 'fseek' confusing here, since this mimics a
> global function of the same name.  Could you rename the argument?

OK.  Fixed.

And I found all other set_ui_file_xxx functions have this issue, do
you mind I post a patch to update them?

>
> Hui> +static void stdio_file_fseek (struct ui_file * file, long offset, int whence)
> Hui> +{
>
> Newline after 'void'.

Fixed.

>
> I wonder whether the null fseek ought to unconditionally throw an
> exception.  It seems to me that it can't really be successful.
>
> I think this should go in conditionally based on the other patches -- no
> need to put it in if it turns out you can't use ui_file after all for
> some reason.
>

I will post another patch for it later.
What about let it throw a internal_error.

> Tom

The attachment is the new patch.  Please help me review it.

Thanks,
Hui

2012-12-07  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.

[-- Attachment #2: ui-file-fseek.txt --]
[-- Type: text/plain, Size: 3521 bytes --]

--- 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 void
+null_file_fseek (struct ui_file * stream, long offset, int whence)
+{
+  return;
+}
+
 void *
 ui_file_data (struct ui_file *file)
 {
@@ -228,6 +237,12 @@ ui_file_read (struct ui_file *file, char
 }
 
 void
+ui_file_fseek (struct ui_file * file, long offset, int whence)
+{
+  file->to_fseek (file, offset, whence);
+}
+
+void
 fputs_unfiltered (const char *buf, struct ui_file *file)
 {
   file->to_fputs (buf, 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_p)
+{
+  file->to_fseek = fseek_p;
+}
+
+void
 set_ui_file_data (struct ui_file *file, void *data,
 		  ui_file_delete_ftype *delete)
 {
@@ -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,19 @@ stdio_file_isatty (struct ui_file *file)
   return (isatty (stdio->fd));
 }
 
+static void
+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"));
+
+  if (fseek (stdio->file, offset, whence))
+    error (_("fseek fail: %s"), safe_strerror (errno));
+}
+
 /* 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 void (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);
+
 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 void 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);

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-07  8:02   ` Hui Zhu
@ 2012-12-07  9:56     ` Pedro Alves
  2012-12-10 10:48       ` Hui Zhu
  2012-12-07 14:49     ` Tom Tromey
  1 sibling, 1 reply; 21+ messages in thread
From: Pedro Alves @ 2012-12-07  9:56 UTC (permalink / raw)
  To: Hui Zhu; +Cc: Tom Tromey, gdb-patches ml, Hui Zhu

On 12/07/2012 08:01 AM, Hui Zhu wrote:
> +ui_file_fseek (struct ui_file * file, long offset, int whence)

No space after '*'.  Several instances of this issue in the patch.

On 12/07/2012 08:01 AM, Hui Zhu wrote:
> +static void
> +stdio_file_fseek (struct ui_file * file, long offset, int whence)
> +{
...
> +  if (fseek (stdio->file, offset, whence))
> +    error (_("fseek fail: %s"), safe_strerror (errno));

I think that if we want to support error handling, then this should
return the fseek result to the caller instead of throwing an exception.
See e.g., the comment in stdio_file_write.

-- 
Pedro Alves


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-07  8:02   ` Hui Zhu
  2012-12-07  9:56     ` Pedro Alves
@ 2012-12-07 14:49     ` Tom Tromey
  2012-12-10 10:57       ` Hui Zhu
  1 sibling, 1 reply; 21+ messages in thread
From: Tom Tromey @ 2012-12-07 14:49 UTC (permalink / raw)
  To: Hui Zhu; +Cc: gdb-patches ml, Hui Zhu

>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:

Hui> And I found all other set_ui_file_xxx functions have this issue, do
Hui> you mind I post a patch to update them?

I think it would be fine.

Tom


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-07  9:56     ` Pedro Alves
@ 2012-12-10 10:48       ` Hui Zhu
  2012-12-10 19:54         ` Tom Tromey
  0 siblings, 1 reply; 21+ messages in thread
From: Hui Zhu @ 2012-12-10 10:48 UTC (permalink / raw)
  To: Pedro Alves; +Cc: Tom Tromey, gdb-patches ml, Hui Zhu

[-- Attachment #1: Type: text/plain, Size: 1282 bytes --]

On Fri, Dec 7, 2012 at 5:56 PM, Pedro Alves <palves@redhat.com> wrote:
> On 12/07/2012 08:01 AM, Hui Zhu wrote:
>> +ui_file_fseek (struct ui_file * file, long offset, int whence)
>
> No space after '*'.  Several instances of this issue in the patch.

Fixed.

>
> On 12/07/2012 08:01 AM, Hui Zhu wrote:
>> +static void
>> +stdio_file_fseek (struct ui_file * file, long offset, int whence)
>> +{
> ...
>> +  if (fseek (stdio->file, offset, whence))
>> +    error (_("fseek fail: %s"), safe_strerror (errno));
>
> I think that if we want to support error handling, then this should
> return the fseek result to the caller instead of throwing an exception.
> See e.g., the comment in stdio_file_write.
>

What about I change error to warning?
Then it don't need some handle and something.  And if really got some
issue with this syscall, user can find issue with this warning?

> --
> Pedro Alves
>

Post a new version.

Thanks,
Hui

2012-12-10  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.

[-- Attachment #2: ui-file-fseek.txt --]
[-- Type: text/plain, Size: 3520 bytes --]

--- 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 void
+null_file_fseek (struct ui_file *stream, long offset, int whence)
+{
+  return;
+}
+
 void *
 ui_file_data (struct ui_file *file)
 {
@@ -228,6 +237,12 @@ ui_file_read (struct ui_file *file, char
 }
 
 void
+ui_file_fseek (struct ui_file *file, long offset, int whence)
+{
+  file->to_fseek (file, offset, whence);
+}
+
+void
 fputs_unfiltered (const char *buf, struct ui_file *file)
 {
   file->to_fputs (buf, 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_p)
+{
+  file->to_fseek = fseek_p;
+}
+
+void
 set_ui_file_data (struct ui_file *file, void *data,
 		  ui_file_delete_ftype *delete)
 {
@@ -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,19 @@ stdio_file_isatty (struct ui_file *file)
   return (isatty (stdio->fd));
 }
 
+static void
+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"));
+
+  if (fseek (stdio->file, offset, whence))
+    warning (_("fseek fail: %s"), safe_strerror (errno));
+}
+
 /* 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 void (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);
+
 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 void 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);

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-07 14:49     ` Tom Tromey
@ 2012-12-10 10:57       ` Hui Zhu
  2012-12-10 19:55         ` Tom Tromey
  0 siblings, 1 reply; 21+ messages in thread
From: Hui Zhu @ 2012-12-10 10:57 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches ml, Hui Zhu

[-- Attachment #1: Type: text/plain, Size: 861 bytes --]

On Fri, Dec 7, 2012 at 10:49 PM, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:
>
> Hui> And I found all other set_ui_file_xxx functions have this issue, do
> Hui> you mind I post a patch to update them?
>
> I think it would be fine.
>
> Tom

Post a patch for that.  Please help me review it.

Thanks,
Hui

2012-12-10  Hui Zhu  <hui_zhu@mentor.com>

	* ui-file.c (set_ui_file_flush): Change flush to flush_p.
	(set_ui_file_isatty): Change isatty to isatty_p.
	(set_ui_file_rewind): Change rewind to rewind_p.
	(set_ui_file_put): Change put to put_p.
	(set_ui_file_write): Change write to write_p.
	(set_ui_file_write_async_safe): Change write_async_safe to
	write_async_safe_p.
	(set_ui_file_read): Change read to read_p.
	(set_ui_file_fputs): Change fputs to fputs_p.
	(set_ui_file_data): Change delete to delete_p.

[-- Attachment #2: ui-file-change-arg.txt --]
[-- Type: text/plain, Size: 2129 bytes --]

--- a/ui-file.c
+++ b/ui-file.c
@@ -234,61 +234,61 @@ fputs_unfiltered (const char *buf, struc
 }
 
 void
-set_ui_file_flush (struct ui_file *file, ui_file_flush_ftype *flush)
+set_ui_file_flush (struct ui_file *file, ui_file_flush_ftype *flush_p)
 {
-  file->to_flush = flush;
+  file->to_flush = flush_p;
 }
 
 void
-set_ui_file_isatty (struct ui_file *file, ui_file_isatty_ftype *isatty)
+set_ui_file_isatty (struct ui_file *file, ui_file_isatty_ftype *isatty_p)
 {
-  file->to_isatty = isatty;
+  file->to_isatty = isatty_p;
 }
 
 void
-set_ui_file_rewind (struct ui_file *file, ui_file_rewind_ftype *rewind)
+set_ui_file_rewind (struct ui_file *file, ui_file_rewind_ftype *rewind_p)
 {
-  file->to_rewind = rewind;
+  file->to_rewind = rewind_p;
 }
 
 void
-set_ui_file_put (struct ui_file *file, ui_file_put_ftype *put)
+set_ui_file_put (struct ui_file *file, ui_file_put_ftype *put_p)
 {
-  file->to_put = put;
+  file->to_put = put_p;
 }
 
 void
 set_ui_file_write (struct ui_file *file,
-		    ui_file_write_ftype *write)
+		    ui_file_write_ftype *write_p)
 {
-  file->to_write = write;
+  file->to_write = write_p;
 }
 
 void
 set_ui_file_write_async_safe (struct ui_file *file,
-			      ui_file_write_async_safe_ftype *write_async_safe)
+			      ui_file_write_async_safe_ftype *write_async_safe_p)
 {
-  file->to_write_async_safe = write_async_safe;
+  file->to_write_async_safe = write_async_safe_p;
 }
 
 void
-set_ui_file_read (struct ui_file *file, ui_file_read_ftype *read)
+set_ui_file_read (struct ui_file *file, ui_file_read_ftype *read_p)
 {
-  file->to_read = read;
+  file->to_read = read_p;
 }
 
 void
-set_ui_file_fputs (struct ui_file *file, ui_file_fputs_ftype *fputs)
+set_ui_file_fputs (struct ui_file *file, ui_file_fputs_ftype *fputs_p)
 {
-  file->to_fputs = fputs;
+  file->to_fputs = fputs_p;
 }
 
 void
 set_ui_file_data (struct ui_file *file, void *data,
-		  ui_file_delete_ftype *delete)
+		  ui_file_delete_ftype *delete_p)
 {
   file->to_data = data;
-  file->to_delete = delete;
+  file->to_delete = delete_p;
 }
 
 /* ui_file utility function for converting a ``struct ui_file'' into

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-10 10:48       ` Hui Zhu
@ 2012-12-10 19:54         ` Tom Tromey
  2012-12-11 10:35           ` Pedro Alves
  0 siblings, 1 reply; 21+ messages in thread
From: Tom Tromey @ 2012-12-10 19:54 UTC (permalink / raw)
  To: Hui Zhu; +Cc: Pedro Alves, gdb-patches ml, Hui Zhu

>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:

Pedro> I think that if we want to support error handling, then this should
Pedro> return the fseek result to the caller instead of throwing an exception.
Pedro> See e.g., the comment in stdio_file_write.

I wonder whether that comment is correct.

Hui> What about I change error to warning?
Hui> Then it don't need some handle and something.  And if really got some
Hui> issue with this syscall, user can find issue with this warning?

I think that would be a worse solution.
It would mean the writing would continue even after failing.
Better to do what Pedro asks.

Tom


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-10 10:57       ` Hui Zhu
@ 2012-12-10 19:55         ` Tom Tromey
  2012-12-11  7:22           ` Hui Zhu
  2012-12-12 11:01           ` Hui Zhu
  0 siblings, 2 replies; 21+ messages in thread
From: Tom Tromey @ 2012-12-10 19:55 UTC (permalink / raw)
  To: Hui Zhu; +Cc: gdb-patches ml, Hui Zhu

>>>>> "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


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-10 19:55         ` Tom Tromey
@ 2012-12-11  7:22           ` Hui Zhu
  2012-12-12 11:01           ` Hui Zhu
  1 sibling, 0 replies; 21+ messages in thread
From: Hui Zhu @ 2012-12-11  7:22 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches ml, Hui Zhu

[-- Attachment #1: Type: text/plain, Size: 915 bytes --]

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.

Thanks,
Hui

2012-12-11  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.
	(set_ui_file_put): Change put to put_ptr.
	(set_ui_file_write): Change write to write_ptr.
	(set_ui_file_write_async_safe): Change write_async_safe to
	write_async_safe_ptr.
	(set_ui_file_read): Change read to read_ptr.
	(set_ui_file_fputs): Change fputs to fputs_ptr.
	(set_ui_file_data): Change delete to delete_ptr.

[-- Attachment #2: ui-file-change-arg.txt --]
[-- Type: text/plain, Size: 2165 bytes --]

--- a/ui-file.c
+++ b/ui-file.c
@@ -234,61 +234,61 @@ fputs_unfiltered (const char *buf, struc
 }
 
 void
-set_ui_file_flush (struct ui_file *file, ui_file_flush_ftype *flush)
+set_ui_file_flush (struct ui_file *file, ui_file_flush_ftype *flush_ptr)
 {
-  file->to_flush = flush;
+  file->to_flush = flush_ptr;
 }
 
 void
-set_ui_file_isatty (struct ui_file *file, ui_file_isatty_ftype *isatty)
+set_ui_file_isatty (struct ui_file *file, ui_file_isatty_ftype *isatty_ptr)
 {
-  file->to_isatty = isatty;
+  file->to_isatty = isatty_ptr;
 }
 
 void
-set_ui_file_rewind (struct ui_file *file, ui_file_rewind_ftype *rewind)
+set_ui_file_rewind (struct ui_file *file, ui_file_rewind_ftype *rewind_ptr)
 {
-  file->to_rewind = rewind;
+  file->to_rewind = rewind_ptr;
 }
 
 void
-set_ui_file_put (struct ui_file *file, ui_file_put_ftype *put)
+set_ui_file_put (struct ui_file *file, ui_file_put_ftype *put_ptr)
 {
-  file->to_put = put;
+  file->to_put = put_ptr;
 }
 
 void
 set_ui_file_write (struct ui_file *file,
-		    ui_file_write_ftype *write)
+		    ui_file_write_ftype *write_ptr)
 {
-  file->to_write = write;
+  file->to_write = write_ptr;
 }
 
 void
 set_ui_file_write_async_safe (struct ui_file *file,
-			      ui_file_write_async_safe_ftype *write_async_safe)
+			      ui_file_write_async_safe_ftype *write_async_safe_ptr)
 {
-  file->to_write_async_safe = write_async_safe;
+  file->to_write_async_safe = write_async_safe_ptr;
 }
 
 void
-set_ui_file_read (struct ui_file *file, ui_file_read_ftype *read)
+set_ui_file_read (struct ui_file *file, ui_file_read_ftype *read_ptr)
 {
-  file->to_read = read;
+  file->to_read = read_ptr;
 }
 
 void
-set_ui_file_fputs (struct ui_file *file, ui_file_fputs_ftype *fputs)
+set_ui_file_fputs (struct ui_file *file, ui_file_fputs_ftype *fputs_ptr)
 {
-  file->to_fputs = fputs;
+  file->to_fputs = fputs_ptr;
 }
 
 void
 set_ui_file_data (struct ui_file *file, void *data,
-		  ui_file_delete_ftype *delete)
+		  ui_file_delete_ftype *delete_ptr)
 {
   file->to_data = data;
-  file->to_delete = delete;
+  file->to_delete = delete_ptr;
 }
 
 /* ui_file utility function for converting a ``struct ui_file'' into

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-10 19:54         ` Tom Tromey
@ 2012-12-11 10:35           ` Pedro Alves
  2012-12-11 14:35             ` Hui Zhu
  0 siblings, 1 reply; 21+ messages in thread
From: Pedro Alves @ 2012-12-11 10:35 UTC (permalink / raw)
  To: Tom Tromey; +Cc: Hui Zhu, gdb-patches ml, Hui Zhu

On 12/10/2012 07:54 PM, Tom Tromey wrote:
>>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:
> 
> Pedro> I think that if we want to support error handling, then this should
> Pedro> return the fseek result to the caller instead of throwing an exception.
> Pedro> See e.g., the comment in stdio_file_write.
> 
> I wonder whether that comment is correct.

http://sourceware.org/ml/gdb-patches/2008-12/msg00260.html

And if that didn't crash that way, I think we'd end up with
infinite recursion:

error
  -> ui-file (output exception text)
    -> that fails
       -> error
           -> ui-file (output exception text)
              -> that fails
                 ...

-- 
Pedro Alves


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-11 10:35           ` Pedro Alves
@ 2012-12-11 14:35             ` Hui Zhu
  2012-12-11 14:39               ` Pedro Alves
  0 siblings, 1 reply; 21+ messages in thread
From: Hui Zhu @ 2012-12-11 14:35 UTC (permalink / raw)
  To: Pedro Alves; +Cc: Tom Tromey, gdb-patches ml, Hui Zhu

On Tue, Dec 11, 2012 at 6:35 PM, Pedro Alves <palves@redhat.com> wrote:
> On 12/10/2012 07:54 PM, Tom Tromey wrote:
>>>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:
>>
>> Pedro> I think that if we want to support error handling, then this should
>> Pedro> return the fseek result to the caller instead of throwing an exception.
>> Pedro> See e.g., the comment in stdio_file_write.
>>
>> I wonder whether that comment is correct.
>
> http://sourceware.org/ml/gdb-patches/2008-12/msg00260.html
>
> And if that didn't crash that way, I think we'd end up with
> infinite recursion:
>
> error
>   -> ui-file (output exception text)
>     -> that fails
>        -> error
>            -> ui-file (output exception text)
>               -> that fails
>                  ...
>
> --
> Pedro Alves
>

What about add a flag to struct stdio_file to record the error in this fd.
When stdio_file_xxx get error, set it and throw error.
Each stdio_file_xxx function check this flag before do syscall.  If
this fd get error, just return.

Then stdio_file_xxx can throw error.

Thanks,
Hui


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-11 14:35             ` Hui Zhu
@ 2012-12-11 14:39               ` Pedro Alves
  2012-12-11 14:58                 ` Hui Zhu
  0 siblings, 1 reply; 21+ messages in thread
From: Pedro Alves @ 2012-12-11 14:39 UTC (permalink / raw)
  To: Hui Zhu; +Cc: Tom Tromey, gdb-patches ml, Hui Zhu

On 12/11/2012 02:34 PM, Hui Zhu wrote:

> What about add a flag to struct stdio_file to record the error in this fd.
> When stdio_file_xxx get error, set it and throw error.
> Each stdio_file_xxx function check this flag before do syscall.  If
> this fd get error, just return.

That would allow the second caller to proceed as if no error
had happened.  That's not a good interface.

-- 
Pedro Alves


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-11 14:39               ` Pedro Alves
@ 2012-12-11 14:58                 ` Hui Zhu
  0 siblings, 0 replies; 21+ messages in thread
From: Hui Zhu @ 2012-12-11 14:58 UTC (permalink / raw)
  To: Pedro Alves; +Cc: Tom Tromey, gdb-patches ml, Hui Zhu

On Tue, Dec 11, 2012 at 10:39 PM, Pedro Alves <palves@redhat.com> wrote:
> On 12/11/2012 02:34 PM, Hui Zhu wrote:
>
>> What about add a flag to struct stdio_file to record the error in this fd.
>> When stdio_file_xxx get error, set it and throw error.
>> Each stdio_file_xxx function check this flag before do syscall.  If
>> this fd get error, just return.
>
> That would allow the second caller to proceed as if no error
> had happened.  That's not a good interface.
>
> --
> Pedro Alves
>

What about change it to if flag is set, not do anything like current
what we do.  If not, throw error.
For example:
  if (write (stdio->fd, buf, length_buf) < 0)
    {
      if (!stdio->error_throwed)
        {
          stdio->error_throwed = 1;
          error(xxx);
        }
    }

No infinite recursion.

Thanks,
Hui


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-10 19:55         ` Tom Tromey
  2012-12-11  7:22           ` Hui Zhu
@ 2012-12-12 11:01           ` Hui Zhu
  2012-12-12 15:38             ` Tom Tromey
  1 sibling, 1 reply; 21+ messages in thread
From: Hui Zhu @ 2012-12-12 11:01 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches ml, Hui Zhu

[-- Attachment #1: Type: text/plain, Size: 737 bytes --]

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.

[-- Attachment #2: ui-file-fseek.txt --]
[-- Type: text/plain, Size: 3498 bytes --]

--- 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);

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-12 11:01           ` Hui Zhu
@ 2012-12-12 15:38             ` Tom Tromey
  2012-12-13  1:45               ` Hui Zhu
  0 siblings, 1 reply; 21+ messages in thread
From: Tom Tromey @ 2012-12-12 15:38 UTC (permalink / raw)
  To: Hui Zhu; +Cc: gdb-patches ml, Hui Zhu

>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:

Hui> +static int
Hui> +null_file_fseek (struct ui_file *stream, long offset, int whence)
Hui> +{
Hui> +  return 0;
Hui> +}

Why does this return success rather than error?
It seems strange to report success when nothing actually happens.

Hui> +typedef int (ui_file_fseek_ftype) (struct ui_file * stream, long offset,
Hui> +				   int whence);

Extra space after "*".

Hui> +extern int ui_file_fseek (struct ui_file * file, long offset, int whence);

Here too.

Tom


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-12 15:38             ` Tom Tromey
@ 2012-12-13  1:45               ` Hui Zhu
  2012-12-14 19:18                 ` Tom Tromey
  0 siblings, 1 reply; 21+ messages in thread
From: Hui Zhu @ 2012-12-13  1:45 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches ml, Hui Zhu

[-- Attachment #1: Type: text/plain, Size: 1061 bytes --]

On Wed, Dec 12, 2012 at 11:38 PM, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:
>
> Hui> +static int
> Hui> +null_file_fseek (struct ui_file *stream, long offset, int whence)
> Hui> +{
> Hui> +  return 0;
> Hui> +}
>
> Why does this return success rather than error?
> It seems strange to report success when nothing actually happens.
>
> Hui> +typedef int (ui_file_fseek_ftype) (struct ui_file * stream, long offset,
> Hui> +                             int whence);
>
> Extra space after "*".
>
> Hui> +extern int ui_file_fseek (struct ui_file * file, long offset, int whence);
>
> Here too.
>
> Tom

Post a new version according to your comments.

Thanks,
Hui

2012-12-13  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.

[-- Attachment #2: ui-file-fseek.txt --]
[-- Type: text/plain, Size: 3497 bytes --]

--- 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 -1;
+}
+
 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);

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-13  1:45               ` Hui Zhu
@ 2012-12-14 19:18                 ` Tom Tromey
  2012-12-17  3:00                   ` Hui Zhu
  0 siblings, 1 reply; 21+ messages in thread
From: Tom Tromey @ 2012-12-14 19:18 UTC (permalink / raw)
  To: Hui Zhu; +Cc: gdb-patches ml, Hui Zhu

>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:

Hui> +static int
Hui> +null_file_fseek (struct ui_file *stream, long offset, int whence)
Hui> +{
Hui> +  return -1;
Hui> +}

It seems like this should set errno as well.

Tom


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-14 19:18                 ` Tom Tromey
@ 2012-12-17  3:00                   ` Hui Zhu
  2012-12-17 20:04                     ` Tom Tromey
  0 siblings, 1 reply; 21+ messages in thread
From: Hui Zhu @ 2012-12-17  3:00 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches ml, Hui Zhu

[-- Attachment #1: Type: text/plain, Size: 435 bytes --]

On Sat, Dec 15, 2012 at 3:18 AM, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:
>
> Hui> +static int
> Hui> +null_file_fseek (struct ui_file *stream, long offset, int whence)
> Hui> +{
> Hui> +  return -1;
> Hui> +}
>
> It seems like this should set errno as well.
>
> Tom

OK.  Set errno to EBADF in new patch because its means "The stream
specified is not a seekable stream".

Thanks,
Hui

[-- Attachment #2: ui-file-fseek.txt --]
[-- Type: text/plain, Size: 3517 bytes --]

--- 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,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
   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,
 }
 
 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_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 +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 *
--- 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);

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-17  3:00                   ` Hui Zhu
@ 2012-12-17 20:04                     ` Tom Tromey
  2012-12-18  7:03                       ` Hui Zhu
  0 siblings, 1 reply; 21+ messages in thread
From: Tom Tromey @ 2012-12-17 20:04 UTC (permalink / raw)
  To: Hui Zhu; +Cc: gdb-patches ml, Hui Zhu

>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:

Hui> OK.  Set errno to EBADF in new patch because its means "The stream
Hui> specified is not a seekable stream".

Thank you.
This is ok.

Tom


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add fseek to ui-file
  2012-12-17 20:04                     ` Tom Tromey
@ 2012-12-18  7:03                       ` Hui Zhu
  0 siblings, 0 replies; 21+ messages in thread
From: Hui Zhu @ 2012-12-18  7:03 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches ml, Hui Zhu

On Tue, Dec 18, 2012 at 4:04 AM, Tom Tromey <tromey@redhat.com> wrote:
>>>>>> "Hui" == Hui Zhu <teawater@gmail.com> writes:
>
> Hui> OK.  Set errno to EBADF in new patch because its means "The stream
> Hui> specified is not a seekable stream".
>
> Thank you.
> This is ok.
>
> Tom

Thanks for your help.  Checked in.
http://sourceware.org/ml/gdb-cvs/2012-12/msg00135.html

Best,
Hui


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2012-12-18  7:03 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-06  9:46 [PATCH] Add fseek to ui-file Hui Zhu
2012-12-06 21:48 ` Tom Tromey
2012-12-07  8:02   ` Hui Zhu
2012-12-07  9:56     ` Pedro Alves
2012-12-10 10:48       ` Hui Zhu
2012-12-10 19:54         ` Tom Tromey
2012-12-11 10:35           ` Pedro Alves
2012-12-11 14:35             ` Hui Zhu
2012-12-11 14:39               ` Pedro Alves
2012-12-11 14:58                 ` Hui Zhu
2012-12-07 14:49     ` Tom Tromey
2012-12-10 10:57       ` Hui Zhu
2012-12-10 19:55         ` Tom Tromey
2012-12-11  7:22           ` Hui Zhu
2012-12-12 11:01           ` Hui Zhu
2012-12-12 15:38             ` Tom Tromey
2012-12-13  1:45               ` Hui Zhu
2012-12-14 19:18                 ` Tom Tromey
2012-12-17  3:00                   ` Hui Zhu
2012-12-17 20:04                     ` Tom Tromey
2012-12-18  7:03                       ` Hui Zhu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox