Introduce target_fileio_fstat

This commit introduces a new target method target_fileio_fstat
which can be used to retrieve information about files opened with
target_fileio_open.

gdb/ChangeLog:

	* target.h (struct target_ops) <to_fileio_fstat>: New field.
	(target_fileio_fstat): New declaration.
	* target.c (target_fileio_fstat): New function.
	* inf-child.c (inf_child_fileio_fstat): Likewise.
	(inf_child_target): Initialize to_fileio_fstat.
	* remote.c (init_remote_ops): Likewise.
This commit is contained in:
Gary Benson 2015-04-02 13:38:28 +01:00
parent 3d5ff6205b
commit 9b15c1f041
5 changed files with 56 additions and 0 deletions

View File

@ -1,3 +1,12 @@
2015-04-02 Gary Benson <gbenson@redhat.com>
* target.h (struct target_ops) <to_fileio_fstat>: New field.
(target_fileio_fstat): New declaration.
* target.c (target_fileio_fstat): New function.
* inf-child.c (inf_child_fileio_fstat): Likewise.
(inf_child_target): Initialize to_fileio_fstat.
* remote.c (init_remote_ops): Likewise.
2015-04-01 Sasha Smundak <asmundak@google.com>
* Makefile.in (SUBDIR_PYTHON_OBJS): Add py-unwind.o.

View File

@ -374,6 +374,20 @@ inf_child_fileio_pread (struct target_ops *self,
return ret;
}
/* Implementation of to_fileio_fstat. */
static int
inf_child_fileio_fstat (struct target_ops *self, int fd,
struct stat *sb, int *target_errno)
{
int ret;
ret = fstat (fd, sb);
if (ret == -1)
*target_errno = inf_child_errno_to_fileio_error (errno);
return ret;
}
/* Close FD on the target. Return 0, or -1 if an error occurs
(and set *TARGET_ERRNO). */
static int
@ -500,6 +514,7 @@ inf_child_target (void)
t->to_fileio_open = inf_child_fileio_open;
t->to_fileio_pwrite = inf_child_fileio_pwrite;
t->to_fileio_pread = inf_child_fileio_pread;
t->to_fileio_fstat = inf_child_fileio_fstat;
t->to_fileio_close = inf_child_fileio_close;
t->to_fileio_unlink = inf_child_fileio_unlink;
t->to_fileio_readlink = inf_child_fileio_readlink;

View File

@ -11817,6 +11817,7 @@ Specify the serial device it is connected to\n\
remote_ops.to_fileio_open = remote_hostio_open;
remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
remote_ops.to_fileio_pread = remote_hostio_pread;
remote_ops.to_fileio_fstat = remote_hostio_fstat;
remote_ops.to_fileio_close = remote_hostio_close;
remote_ops.to_fileio_unlink = remote_hostio_unlink;
remote_ops.to_fileio_readlink = remote_hostio_readlink;

View File

@ -2839,6 +2839,25 @@ target_fileio_pread (int fd, gdb_byte *read_buf, int len,
return ret;
}
/* See target.h. */
int
target_fileio_fstat (int fd, struct stat *sb, int *target_errno)
{
fileio_fh_t *fh = fileio_fd_to_fh (fd);
int ret = -1;
if (is_closed_fileio_fh (fh->fd))
*target_errno = EBADF;
else
ret = fh->t->to_fileio_fstat (fh->t, fh->fd, sb, target_errno);
if (targetdebug)
fprintf_unfiltered (gdb_stdlog,
"target_fileio_fstat (%d) = %d (%d)\n",
fd, ret, ret != -1 ? 0 : *target_errno);
return ret;
}
/* Close FD on the target. Return 0, or -1 if an error occurs
(and set *TARGET_ERRNO). */
int

View File

@ -846,6 +846,12 @@ struct target_ops
int fd, gdb_byte *read_buf, int len,
ULONGEST offset, int *target_errno);
/* Get information about the file opened as FD and put it in
SB. Return 0 on success, or -1 if an error occurs (and set
*TARGET_ERRNO). */
int (*to_fileio_fstat) (struct target_ops *,
int fd, struct stat *sb, int *target_errno);
/* Close FD on the target. Return 0, or -1 if an error occurs
(and set *TARGET_ERRNO). */
int (*to_fileio_close) (struct target_ops *, int fd, int *target_errno);
@ -1933,6 +1939,12 @@ extern int target_fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
extern int target_fileio_pread (int fd, gdb_byte *read_buf, int len,
ULONGEST offset, int *target_errno);
/* Get information about the file opened as FD on the target
and put it in SB. Return 0 on success, or -1 if an error
occurs (and set *TARGET_ERRNO). */
extern int target_fileio_fstat (int fd, struct stat *sb,
int *target_errno);
/* Close FD on the target. Return 0, or -1 if an error occurs
(and set *TARGET_ERRNO). */
extern int target_fileio_close (int fd, int *target_errno);