Introduce new shared function remote_fileio_to_fio_error

This commit introduces a new shared function to replace three
identical functions in various places in the codebase.

gdb/ChangeLog:

	* common/common-remote-fileio.h (remote_fileio_to_fio_error):
	New declaration.
	* common/common-remote-fileio.c (remote_fileio_to_fio_error):
	New function, factored out the named functions below.
	* inf-child.c (gdb/fileio.h): Remove include.
	(common-remote-fileio.h): New include.
	(inf_child_errno_to_fileio_error): Remove function.  Update
	all callers to use remote_fileio_to_fio_error.
	* remote-fileio.c (remote_fileio_errno_to_target): Likewise.

gdb/gdbserver/ChangeLog:

	* hostio-errno.c (errno_to_fileio_error): Remove function.
	Update caller to use remote_fileio_to_fio_error.
This commit is contained in:
Gary Benson
2015-04-09 10:28:05 +01:00
parent 2f2680f33a
commit b88bb45061
7 changed files with 86 additions and 165 deletions

View File

@ -1,3 +1,15 @@
2015-04-09 Gary Benson <gbenson@redhat.com>
* common/common-remote-fileio.h (remote_fileio_to_fio_error):
New declaration.
* common/common-remote-fileio.c (remote_fileio_to_fio_error):
New function, factored out the named functions below.
* inf-child.c (gdb/fileio.h): Remove include.
(common-remote-fileio.h): New include.
(inf_child_errno_to_fileio_error): Remove function. Update
all callers to use remote_fileio_to_fio_error.
* remote-fileio.c (remote_fileio_errno_to_target): Likewise.
2015-04-09 Andy Wingo <wingo@igalia.com> 2015-04-09 Andy Wingo <wingo@igalia.com>
* MAINTAINERS (Write After Approval): Add Andy Wingo. * MAINTAINERS (Write After Approval): Add Andy Wingo.

View File

@ -21,6 +21,59 @@
#include "common-remote-fileio.h" #include "common-remote-fileio.h"
#include <sys/stat.h> #include <sys/stat.h>
/* See common-remote-fileio.h. */
int
remote_fileio_to_fio_error (int error)
{
switch (error)
{
case EPERM:
return FILEIO_EPERM;
case ENOENT:
return FILEIO_ENOENT;
case EINTR:
return FILEIO_EINTR;
case EIO:
return FILEIO_EIO;
case EBADF:
return FILEIO_EBADF;
case EACCES:
return FILEIO_EACCES;
case EFAULT:
return FILEIO_EFAULT;
case EBUSY:
return FILEIO_EBUSY;
case EEXIST:
return FILEIO_EEXIST;
case ENODEV:
return FILEIO_ENODEV;
case ENOTDIR:
return FILEIO_ENOTDIR;
case EISDIR:
return FILEIO_EISDIR;
case EINVAL:
return FILEIO_EINVAL;
case ENFILE:
return FILEIO_ENFILE;
case EMFILE:
return FILEIO_EMFILE;
case EFBIG:
return FILEIO_EFBIG;
case ENOSPC:
return FILEIO_ENOSPC;
case ESPIPE:
return FILEIO_ESPIPE;
case EROFS:
return FILEIO_EROFS;
case ENOSYS:
return FILEIO_ENOSYS;
case ENAMETOOLONG:
return FILEIO_ENAMETOOLONG;
}
return FILEIO_EUNKNOWN;
}
/* Convert a host-format mode_t into a bitmask of File-I/O flags. */ /* Convert a host-format mode_t into a bitmask of File-I/O flags. */
static LONGEST static LONGEST

View File

@ -23,6 +23,11 @@
#include "gdb/fileio.h" #include "gdb/fileio.h"
#include <sys/stat.h> #include <sys/stat.h>
/* Convert a errno error number to a File-I/O error number for
transmission over the remote protocol. */
extern int remote_fileio_to_fio_error (int error);
/* Pack a host-format integer into a byte buffer in big-endian format /* Pack a host-format integer into a byte buffer in big-endian format
ready for transmission over the remote protocol. BYTES specifies ready for transmission over the remote protocol. BYTES specifies
the size of the integer to pack in bytes. */ the size of the integer to pack in bytes. */

View File

@ -1,3 +1,8 @@
2015-04-09 Gary Benson <gbenson@redhat.com>
* hostio-errno.c (errno_to_fileio_error): Remove function.
Update caller to use remote_fileio_to_fio_error.
2015-04-09 Yao Qi <yao.qi@linaro.org> 2015-04-09 Yao Qi <yao.qi@linaro.org>
* linux-low.c (linux_insert_point): Call * linux-low.c (linux_insert_point): Call

View File

@ -22,64 +22,12 @@
on top of errno. */ on top of errno. */
#include "server.h" #include "server.h"
#include "gdb/fileio.h" #include "common-remote-fileio.h"
static int
errno_to_fileio_error (int error)
{
switch (error)
{
case EPERM:
return FILEIO_EPERM;
case ENOENT:
return FILEIO_ENOENT;
case EINTR:
return FILEIO_EINTR;
case EIO:
return FILEIO_EIO;
case EBADF:
return FILEIO_EBADF;
case EACCES:
return FILEIO_EACCES;
case EFAULT:
return FILEIO_EFAULT;
case EBUSY:
return FILEIO_EBUSY;
case EEXIST:
return FILEIO_EEXIST;
case ENODEV:
return FILEIO_ENODEV;
case ENOTDIR:
return FILEIO_ENOTDIR;
case EISDIR:
return FILEIO_EISDIR;
case EINVAL:
return FILEIO_EINVAL;
case ENFILE:
return FILEIO_ENFILE;
case EMFILE:
return FILEIO_EMFILE;
case EFBIG:
return FILEIO_EFBIG;
case ENOSPC:
return FILEIO_ENOSPC;
case ESPIPE:
return FILEIO_ESPIPE;
case EROFS:
return FILEIO_EROFS;
case ENOSYS:
return FILEIO_ENOSYS;
case ENAMETOOLONG:
return FILEIO_ENAMETOOLONG;
}
return FILEIO_EUNKNOWN;
}
void void
hostio_last_error_from_errno (char *buf) hostio_last_error_from_errno (char *buf)
{ {
int error = errno; int error = errno;
int fileio_error = errno_to_fileio_error (error); int fileio_error = remote_fileio_to_fio_error (error);
sprintf (buf, "F-1,%x", fileio_error); sprintf (buf, "F-1,%x", fileio_error);
} }

View File

@ -30,7 +30,7 @@
#include "inferior.h" #include "inferior.h"
#include <sys/stat.h> #include <sys/stat.h>
#include "inf-child.h" #include "inf-child.h"
#include "gdb/fileio.h" #include "common-remote-fileio.h"
#include "agent.h" #include "agent.h"
#include "gdb_wait.h" #include "gdb_wait.h"
#include "filestuff.h" #include "filestuff.h"
@ -239,57 +239,6 @@ inf_child_fileio_open_flags_to_host (int fileio_open_flags, int *open_flags_p)
return 0; return 0;
} }
static int
inf_child_errno_to_fileio_error (int errnum)
{
switch (errnum)
{
case EPERM:
return FILEIO_EPERM;
case ENOENT:
return FILEIO_ENOENT;
case EINTR:
return FILEIO_EINTR;
case EIO:
return FILEIO_EIO;
case EBADF:
return FILEIO_EBADF;
case EACCES:
return FILEIO_EACCES;
case EFAULT:
return FILEIO_EFAULT;
case EBUSY:
return FILEIO_EBUSY;
case EEXIST:
return FILEIO_EEXIST;
case ENODEV:
return FILEIO_ENODEV;
case ENOTDIR:
return FILEIO_ENOTDIR;
case EISDIR:
return FILEIO_EISDIR;
case EINVAL:
return FILEIO_EINVAL;
case ENFILE:
return FILEIO_ENFILE;
case EMFILE:
return FILEIO_EMFILE;
case EFBIG:
return FILEIO_EFBIG;
case ENOSPC:
return FILEIO_ENOSPC;
case ESPIPE:
return FILEIO_ESPIPE;
case EROFS:
return FILEIO_EROFS;
case ENOSYS:
return FILEIO_ENOSYS;
case ENAMETOOLONG:
return FILEIO_ENAMETOOLONG;
}
return FILEIO_EUNKNOWN;
}
/* Open FILENAME on the target, using FLAGS and MODE. Return a /* Open FILENAME on the target, using FLAGS and MODE. Return a
target file descriptor, or -1 if an error occurs (and set target file descriptor, or -1 if an error occurs (and set
*TARGET_ERRNO). */ *TARGET_ERRNO). */
@ -311,7 +260,7 @@ inf_child_fileio_open (struct target_ops *self,
the standard values. */ the standard values. */
fd = gdb_open_cloexec (filename, nat_flags, mode); fd = gdb_open_cloexec (filename, nat_flags, mode);
if (fd == -1) if (fd == -1)
*target_errno = inf_child_errno_to_fileio_error (errno); *target_errno = remote_fileio_to_fio_error (errno);
return fd; return fd;
} }
@ -340,7 +289,7 @@ inf_child_fileio_pwrite (struct target_ops *self,
} }
if (ret == -1) if (ret == -1)
*target_errno = inf_child_errno_to_fileio_error (errno); *target_errno = remote_fileio_to_fio_error (errno);
return ret; return ret;
} }
@ -369,7 +318,7 @@ inf_child_fileio_pread (struct target_ops *self,
} }
if (ret == -1) if (ret == -1)
*target_errno = inf_child_errno_to_fileio_error (errno); *target_errno = remote_fileio_to_fio_error (errno);
return ret; return ret;
} }
@ -383,7 +332,7 @@ inf_child_fileio_fstat (struct target_ops *self, int fd,
ret = fstat (fd, sb); ret = fstat (fd, sb);
if (ret == -1) if (ret == -1)
*target_errno = inf_child_errno_to_fileio_error (errno); *target_errno = remote_fileio_to_fio_error (errno);
return ret; return ret;
} }
@ -397,7 +346,7 @@ inf_child_fileio_close (struct target_ops *self, int fd, int *target_errno)
ret = close (fd); ret = close (fd);
if (ret == -1) if (ret == -1)
*target_errno = inf_child_errno_to_fileio_error (errno); *target_errno = remote_fileio_to_fio_error (errno);
return ret; return ret;
} }
@ -412,7 +361,7 @@ inf_child_fileio_unlink (struct target_ops *self,
ret = unlink (filename); ret = unlink (filename);
if (ret == -1) if (ret == -1)
*target_errno = inf_child_errno_to_fileio_error (errno); *target_errno = remote_fileio_to_fio_error (errno);
return ret; return ret;
} }
@ -434,7 +383,7 @@ inf_child_fileio_readlink (struct target_ops *self,
len = readlink (filename, buf, sizeof buf); len = readlink (filename, buf, sizeof buf);
if (len < 0) if (len < 0)
{ {
*target_errno = inf_child_errno_to_fileio_error (errno); *target_errno = remote_fileio_to_fio_error (errno);
return NULL; return NULL;
} }

View File

@ -193,57 +193,6 @@ remote_fileio_mode_to_host (long mode, int open_call)
return hmode; return hmode;
} }
static int
remote_fileio_errno_to_target (int error)
{
switch (error)
{
case EPERM:
return FILEIO_EPERM;
case ENOENT:
return FILEIO_ENOENT;
case EINTR:
return FILEIO_EINTR;
case EIO:
return FILEIO_EIO;
case EBADF:
return FILEIO_EBADF;
case EACCES:
return FILEIO_EACCES;
case EFAULT:
return FILEIO_EFAULT;
case EBUSY:
return FILEIO_EBUSY;
case EEXIST:
return FILEIO_EEXIST;
case ENODEV:
return FILEIO_ENODEV;
case ENOTDIR:
return FILEIO_ENOTDIR;
case EISDIR:
return FILEIO_EISDIR;
case EINVAL:
return FILEIO_EINVAL;
case ENFILE:
return FILEIO_ENFILE;
case EMFILE:
return FILEIO_EMFILE;
case EFBIG:
return FILEIO_EFBIG;
case ENOSPC:
return FILEIO_ENOSPC;
case ESPIPE:
return FILEIO_ESPIPE;
case EROFS:
return FILEIO_EROFS;
case ENOSYS:
return FILEIO_ENOSYS;
case ENAMETOOLONG:
return FILEIO_ENAMETOOLONG;
}
return FILEIO_EUNKNOWN;
}
static int static int
remote_fileio_seek_flag_to_host (long num, int *flag) remote_fileio_seek_flag_to_host (long num, int *flag)
{ {
@ -459,7 +408,7 @@ static void
remote_fileio_return_errno (int retcode) remote_fileio_return_errno (int retcode)
{ {
remote_fileio_reply (retcode, retcode < 0 remote_fileio_reply (retcode, retcode < 0
? remote_fileio_errno_to_target (errno) : 0); ? remote_fileio_to_fio_error (errno) : 0);
} }
static void static void