* [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