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