1ed0d50c3Schristos /* Hosted File I/O interface definitions, for GDB, the GNU Debugger. 2ed0d50c3Schristos 3*b88e3e88Schristos Copyright (C) 2003-2020 Free Software Foundation, Inc. 4ed0d50c3Schristos 5ed0d50c3Schristos This program is free software; you can redistribute it and/or modify 6ed0d50c3Schristos it under the terms of the GNU General Public License as published by 7ed0d50c3Schristos the Free Software Foundation; either version 3 of the License, or 8ed0d50c3Schristos (at your option) any later version. 9ed0d50c3Schristos 10ed0d50c3Schristos This program is distributed in the hope that it will be useful, 11ed0d50c3Schristos but WITHOUT ANY WARRANTY; without even the implied warranty of 12ed0d50c3Schristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13ed0d50c3Schristos GNU General Public License for more details. 14ed0d50c3Schristos 15ed0d50c3Schristos You should have received a copy of the GNU General Public License 16ed0d50c3Schristos along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17ed0d50c3Schristos 18ed0d50c3Schristos #ifndef GDB_FILEIO_H_ 19ed0d50c3Schristos #define GDB_FILEIO_H_ 20ed0d50c3Schristos 21ed0d50c3Schristos /* The following flags are defined to be independent of the host 22ed0d50c3Schristos as well as the target side implementation of these constants. 23ed0d50c3Schristos All constants are defined with a leading FILEIO_ in the name 24ed0d50c3Schristos to allow the usage of these constants together with the 25ed0d50c3Schristos corresponding implementation dependent constants in one module. */ 26ed0d50c3Schristos 27ed0d50c3Schristos /* open(2) flags */ 28ed0d50c3Schristos #define FILEIO_O_RDONLY 0x0 29ed0d50c3Schristos #define FILEIO_O_WRONLY 0x1 30ed0d50c3Schristos #define FILEIO_O_RDWR 0x2 31ed0d50c3Schristos #define FILEIO_O_APPEND 0x8 32ed0d50c3Schristos #define FILEIO_O_CREAT 0x200 33ed0d50c3Schristos #define FILEIO_O_TRUNC 0x400 34ed0d50c3Schristos #define FILEIO_O_EXCL 0x800 35ed0d50c3Schristos #define FILEIO_O_SUPPORTED (FILEIO_O_RDONLY | FILEIO_O_WRONLY| \ 36ed0d50c3Schristos FILEIO_O_RDWR | FILEIO_O_APPEND| \ 37ed0d50c3Schristos FILEIO_O_CREAT | FILEIO_O_TRUNC| \ 38ed0d50c3Schristos FILEIO_O_EXCL) 39ed0d50c3Schristos 40ed0d50c3Schristos /* mode_t bits */ 41ed0d50c3Schristos #define FILEIO_S_IFREG 0100000 42ed0d50c3Schristos #define FILEIO_S_IFDIR 040000 43ed0d50c3Schristos #define FILEIO_S_IFCHR 020000 44ed0d50c3Schristos #define FILEIO_S_IRUSR 0400 45ed0d50c3Schristos #define FILEIO_S_IWUSR 0200 46ed0d50c3Schristos #define FILEIO_S_IXUSR 0100 47ed0d50c3Schristos #define FILEIO_S_IRWXU 0700 48ed0d50c3Schristos #define FILEIO_S_IRGRP 040 49ed0d50c3Schristos #define FILEIO_S_IWGRP 020 50ed0d50c3Schristos #define FILEIO_S_IXGRP 010 51ed0d50c3Schristos #define FILEIO_S_IRWXG 070 52ed0d50c3Schristos #define FILEIO_S_IROTH 04 53ed0d50c3Schristos #define FILEIO_S_IWOTH 02 54ed0d50c3Schristos #define FILEIO_S_IXOTH 01 55ed0d50c3Schristos #define FILEIO_S_IRWXO 07 56ed0d50c3Schristos #define FILEIO_S_SUPPORTED (FILEIO_S_IFREG|FILEIO_S_IFDIR| \ 57ed0d50c3Schristos FILEIO_S_IRWXU|FILEIO_S_IRWXG| \ 58ed0d50c3Schristos FILEIO_S_IRWXO) 59ed0d50c3Schristos 60ed0d50c3Schristos /* lseek(2) flags */ 61ed0d50c3Schristos #define FILEIO_SEEK_SET 0 62ed0d50c3Schristos #define FILEIO_SEEK_CUR 1 63ed0d50c3Schristos #define FILEIO_SEEK_END 2 64ed0d50c3Schristos 65ed0d50c3Schristos /* errno values */ 66ed0d50c3Schristos #define FILEIO_EPERM 1 67ed0d50c3Schristos #define FILEIO_ENOENT 2 68ed0d50c3Schristos #define FILEIO_EINTR 4 69ed0d50c3Schristos #define FILEIO_EIO 5 70ed0d50c3Schristos #define FILEIO_EBADF 9 71ed0d50c3Schristos #define FILEIO_EACCES 13 72ed0d50c3Schristos #define FILEIO_EFAULT 14 73ed0d50c3Schristos #define FILEIO_EBUSY 16 74ed0d50c3Schristos #define FILEIO_EEXIST 17 75ed0d50c3Schristos #define FILEIO_ENODEV 19 76ed0d50c3Schristos #define FILEIO_ENOTDIR 20 77ed0d50c3Schristos #define FILEIO_EISDIR 21 78ed0d50c3Schristos #define FILEIO_EINVAL 22 79ed0d50c3Schristos #define FILEIO_ENFILE 23 80ed0d50c3Schristos #define FILEIO_EMFILE 24 81ed0d50c3Schristos #define FILEIO_EFBIG 27 82ed0d50c3Schristos #define FILEIO_ENOSPC 28 83ed0d50c3Schristos #define FILEIO_ESPIPE 29 84ed0d50c3Schristos #define FILEIO_EROFS 30 85ed0d50c3Schristos #define FILEIO_ENOSYS 88 86ed0d50c3Schristos #define FILEIO_ENAMETOOLONG 91 87ed0d50c3Schristos #define FILEIO_EUNKNOWN 9999 88ed0d50c3Schristos 89ed0d50c3Schristos /* limits */ 90ed0d50c3Schristos #define FILEIO_INT_MIN -2147483648L 91ed0d50c3Schristos #define FILEIO_INT_MAX 2147483647L 92ed0d50c3Schristos #define FILEIO_UINT_MAX 4294967295UL 93ed0d50c3Schristos #define FILEIO_LONG_MIN -9223372036854775808LL 94ed0d50c3Schristos #define FILEIO_LONG_MAX 9223372036854775807LL 95ed0d50c3Schristos #define FILEIO_ULONG_MAX 18446744073709551615ULL 96ed0d50c3Schristos 97ed0d50c3Schristos /* Integral types as used in protocol. */ 98ed0d50c3Schristos #if 0 99ed0d50c3Schristos typedef __int32_t fio_int_t; 100ed0d50c3Schristos typedef __uint32_t fio_uint_t, fio_mode_t, fio_time_t; 101ed0d50c3Schristos typedef __int64_t fio_long_t; 102ed0d50c3Schristos typedef __uint64_t fio_ulong_t; 103ed0d50c3Schristos #endif 104ed0d50c3Schristos 105ed0d50c3Schristos #define FIO_INT_LEN 4 106ed0d50c3Schristos #define FIO_UINT_LEN 4 107ed0d50c3Schristos #define FIO_MODE_LEN 4 108ed0d50c3Schristos #define FIO_TIME_LEN 4 109ed0d50c3Schristos #define FIO_LONG_LEN 8 110ed0d50c3Schristos #define FIO_ULONG_LEN 8 111ed0d50c3Schristos 112ed0d50c3Schristos typedef char fio_int_t[FIO_INT_LEN]; 113ed0d50c3Schristos typedef char fio_uint_t[FIO_UINT_LEN]; 114ed0d50c3Schristos typedef char fio_mode_t[FIO_MODE_LEN]; 115ed0d50c3Schristos typedef char fio_time_t[FIO_TIME_LEN]; 116ed0d50c3Schristos typedef char fio_long_t[FIO_LONG_LEN]; 117ed0d50c3Schristos typedef char fio_ulong_t[FIO_ULONG_LEN]; 118ed0d50c3Schristos 119ed0d50c3Schristos /* Struct stat as used in protocol. For complete independence 120ed0d50c3Schristos of host/target systems, it's defined as an array with offsets 121ed0d50c3Schristos to the members. */ 122ed0d50c3Schristos 123ed0d50c3Schristos struct fio_stat { 124ed0d50c3Schristos fio_uint_t fst_dev; 125ed0d50c3Schristos fio_uint_t fst_ino; 126ed0d50c3Schristos fio_mode_t fst_mode; 127ed0d50c3Schristos fio_uint_t fst_nlink; 128ed0d50c3Schristos fio_uint_t fst_uid; 129ed0d50c3Schristos fio_uint_t fst_gid; 130ed0d50c3Schristos fio_uint_t fst_rdev; 131ed0d50c3Schristos fio_ulong_t fst_size; 132ed0d50c3Schristos fio_ulong_t fst_blksize; 133ed0d50c3Schristos fio_ulong_t fst_blocks; 134ed0d50c3Schristos fio_time_t fst_atime; 135ed0d50c3Schristos fio_time_t fst_mtime; 136ed0d50c3Schristos fio_time_t fst_ctime; 137ed0d50c3Schristos }; 138ed0d50c3Schristos 139ed0d50c3Schristos struct fio_timeval { 140ed0d50c3Schristos fio_time_t ftv_sec; 141ed0d50c3Schristos fio_long_t ftv_usec; 142ed0d50c3Schristos }; 143ed0d50c3Schristos 144ed0d50c3Schristos #endif /* GDB_FILEIO_H_ */ 145