mirror of
https://github.com/bminor/binutils-gdb.git
synced 2026-02-05 12:31:29 +00:00
gdb: add target_fileio_stat, but no implementations yet
In a later commit I want target_fileio_stat, that is a call that operates on a filename rather than an open file descriptor as target_fileio_fstat does. This commit adds the initial framework for target_fileio_stat, I've added the top level target function and the virtual target_ops methods in the target_ops base class. At this point no actual targets override target_ops::fileio_stat, so any attempts to call this function will return ENOSYS error code.
This commit is contained in:
31
gdb/target.c
31
gdb/target.c
@@ -3198,6 +3198,14 @@ target_ops::fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
target_ops::fileio_stat (struct inferior *inf, const char *filename,
|
||||
struct stat *sb, fileio_error *target_errno)
|
||||
{
|
||||
*target_errno = FILEIO_ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
target_ops::fileio_close (int fd, fileio_error *target_errno)
|
||||
{
|
||||
@@ -3317,6 +3325,29 @@ target_fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno)
|
||||
|
||||
/* See target.h. */
|
||||
|
||||
int
|
||||
target_fileio_stat (struct inferior *inf, const char *filename,
|
||||
struct stat *sb, fileio_error *target_errno)
|
||||
{
|
||||
for (target_ops *t = default_fileio_target (); t != NULL; t = t->beneath ())
|
||||
{
|
||||
int ret = t->fileio_stat (inf, filename, sb, target_errno);
|
||||
|
||||
if (ret == -1 && *target_errno == FILEIO_ENOSYS)
|
||||
continue;
|
||||
|
||||
target_debug_printf_nofunc ("target_fileio_stat (%s) = %d (%d)",
|
||||
filename, ret,
|
||||
ret != -1 ? 0 : *target_errno);
|
||||
return ret;
|
||||
}
|
||||
|
||||
*target_errno = FILEIO_ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* See target.h. */
|
||||
|
||||
int
|
||||
target_fileio_close (int fd, fileio_error *target_errno)
|
||||
{
|
||||
|
||||
16
gdb/target.h
16
gdb/target.h
@@ -1011,6 +1011,14 @@ struct target_ops
|
||||
*TARGET_ERRNO). */
|
||||
virtual int fileio_fstat (int fd, struct stat *sb, fileio_error *target_errno);
|
||||
|
||||
/* Get information about the file FILENAME and put it in SB. Look for
|
||||
FILENAME in the filesystem as seen by INF. If INF is NULL, use the
|
||||
filesystem seen by the debugger (GDB or, for remote targets, the
|
||||
remote stub). Return 0 on success, or -1 if an error occurs (and
|
||||
set *TARGET_ERRNO). */
|
||||
virtual int fileio_stat (struct inferior *inf, const char *filename,
|
||||
struct stat *sb, fileio_error *target_errno);
|
||||
|
||||
/* Close FD on the target. Return 0, or -1 if an error occurs
|
||||
(and set *TARGET_ERRNO). */
|
||||
virtual int fileio_close (int fd, fileio_error *target_errno);
|
||||
@@ -2220,6 +2228,14 @@ extern int target_fileio_pread (int fd, gdb_byte *read_buf, int len,
|
||||
extern int target_fileio_fstat (int fd, struct stat *sb,
|
||||
fileio_error *target_errno);
|
||||
|
||||
/* Get information about the file at FILENAME on the target and put it in
|
||||
SB. Look in the filesystem as seen by INF. If INF is NULL, use the
|
||||
filesystem seen by the debugger (GDB or, for remote targets, the remote
|
||||
stub). Return 0 on success, or -1 if an error occurs (and set
|
||||
*TARGET_ERRNO). */
|
||||
extern int target_fileio_stat (struct inferior *inf, const char *filename,
|
||||
struct stat *sb, fileio_error *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, fileio_error *target_errno);
|
||||
|
||||
Reference in New Issue
Block a user