]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdbsupport/fileio.h
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdbsupport / fileio.h
CommitLineData
7823a941 1/* File-I/O functions for GDB, the GNU debugger.
791c0056 2
213516ef 3 Copyright (C) 2003-2023 Free Software Foundation, Inc.
791c0056
GB
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
1a5c2598
TT
20#ifndef COMMON_FILEIO_H
21#define COMMON_FILEIO_H
791c0056 22
7f3647e2 23#include <sys/stat.h>
791c0056 24
198f946f
SM
25/* The following flags are defined to be independent of the host
26 as well as the target side implementation of these constants.
27 All constants are defined with a leading FILEIO_ in the name
28 to allow the usage of these constants together with the
29 corresponding implementation dependent constants in one module. */
30
31/* open(2) flags */
32#define FILEIO_O_RDONLY 0x0
33#define FILEIO_O_WRONLY 0x1
34#define FILEIO_O_RDWR 0x2
35#define FILEIO_O_APPEND 0x8
36#define FILEIO_O_CREAT 0x200
37#define FILEIO_O_TRUNC 0x400
38#define FILEIO_O_EXCL 0x800
39#define FILEIO_O_SUPPORTED (FILEIO_O_RDONLY | FILEIO_O_WRONLY| \
40 FILEIO_O_RDWR | FILEIO_O_APPEND| \
41 FILEIO_O_CREAT | FILEIO_O_TRUNC| \
42 FILEIO_O_EXCL)
43
44/* mode_t bits */
45#define FILEIO_S_IFREG 0100000
46#define FILEIO_S_IFDIR 040000
47#define FILEIO_S_IFCHR 020000
48#define FILEIO_S_IRUSR 0400
49#define FILEIO_S_IWUSR 0200
50#define FILEIO_S_IXUSR 0100
51#define FILEIO_S_IRWXU 0700
52#define FILEIO_S_IRGRP 040
53#define FILEIO_S_IWGRP 020
54#define FILEIO_S_IXGRP 010
55#define FILEIO_S_IRWXG 070
56#define FILEIO_S_IROTH 04
57#define FILEIO_S_IWOTH 02
58#define FILEIO_S_IXOTH 01
59#define FILEIO_S_IRWXO 07
60#define FILEIO_S_SUPPORTED (FILEIO_S_IFREG|FILEIO_S_IFDIR| \
61 FILEIO_S_IRWXU|FILEIO_S_IRWXG| \
62 FILEIO_S_IRWXO)
63
64/* lseek(2) flags */
65#define FILEIO_SEEK_SET 0
66#define FILEIO_SEEK_CUR 1
67#define FILEIO_SEEK_END 2
68
69/* errno values */
b872057a
SM
70enum fileio_error
71{
72 FILEIO_SUCCESS = 0,
73 FILEIO_EPERM = 1,
74 FILEIO_ENOENT = 2,
75 FILEIO_EINTR = 4,
76 FILEIO_EIO = 5,
77 FILEIO_EBADF = 9,
78 FILEIO_EACCES = 13,
79 FILEIO_EFAULT = 14,
80 FILEIO_EBUSY = 16,
81 FILEIO_EEXIST = 17,
82 FILEIO_ENODEV = 19,
83 FILEIO_ENOTDIR = 20,
84 FILEIO_EISDIR = 21,
85 FILEIO_EINVAL = 22,
86 FILEIO_ENFILE = 23,
87 FILEIO_EMFILE = 24,
88 FILEIO_EFBIG = 27,
89 FILEIO_ENOSPC = 28,
90 FILEIO_ESPIPE = 29,
91 FILEIO_EROFS = 30,
92 FILEIO_ENOSYS = 88,
93 FILEIO_ENAMETOOLONG = 91,
94 FILEIO_EUNKNOWN = 9999,
95};
198f946f
SM
96
97#define FIO_INT_LEN 4
98#define FIO_UINT_LEN 4
99#define FIO_MODE_LEN 4
100#define FIO_TIME_LEN 4
101#define FIO_LONG_LEN 8
102#define FIO_ULONG_LEN 8
103
104typedef char fio_int_t[FIO_INT_LEN];
105typedef char fio_uint_t[FIO_UINT_LEN];
106typedef char fio_mode_t[FIO_MODE_LEN];
107typedef char fio_time_t[FIO_TIME_LEN];
108typedef char fio_long_t[FIO_LONG_LEN];
109typedef char fio_ulong_t[FIO_ULONG_LEN];
110
111/* Struct stat as used in protocol. For complete independence
112 of host/target systems, it's defined as an array with offsets
113 to the members. */
114
115struct fio_stat
116{
117 fio_uint_t fst_dev;
118 fio_uint_t fst_ino;
119 fio_mode_t fst_mode;
120 fio_uint_t fst_nlink;
121 fio_uint_t fst_uid;
122 fio_uint_t fst_gid;
123 fio_uint_t fst_rdev;
124 fio_ulong_t fst_size;
125 fio_ulong_t fst_blksize;
126 fio_ulong_t fst_blocks;
127 fio_time_t fst_atime;
128 fio_time_t fst_mtime;
129 fio_time_t fst_ctime;
130};
131
132struct fio_timeval
133{
134 fio_time_t ftv_sec;
135 fio_long_t ftv_usec;
136};
137
7823a941 138/* Convert a host-format errno value to a File-I/O error number. */
b88bb450 139
b872057a 140extern fileio_error host_to_fileio_error (int error);
b88bb450 141
517a63c2
SM
142/* Convert a File-I/O error number to a host-format errno value. */
143
144extern int fileio_error_to_host (fileio_error errnum);
145
819843c7
GB
146/* Convert File-I/O open flags FFLAGS to host format, storing
147 the result in *FLAGS. Return 0 on success, -1 on error. */
148
149extern int fileio_to_host_openflags (int fflags, int *flags);
150
3ac2e371
GB
151/* Convert File-I/O mode FMODE to host format, storing
152 the result in *MODE. Return 0 on success, -1 on error. */
153
154extern int fileio_to_host_mode (int fmode, mode_t *mode);
155
7823a941
GB
156/* Pack a host-format integer into a byte buffer in big-endian
157 format. BYTES specifies the size of the integer to pack in
158 bytes. */
791c0056
GB
159
160static inline void
7823a941 161host_to_bigendian (LONGEST num, char *buf, int bytes)
791c0056
GB
162{
163 int i;
164
165 for (i = 0; i < bytes; ++i)
166 buf[i] = (num >> (8 * (bytes - i - 1))) & 0xff;
167}
168
169/* Pack a host-format integer into an fio_uint_t. */
170
171static inline void
7823a941 172host_to_fileio_uint (long num, fio_uint_t fnum)
791c0056 173{
7823a941 174 host_to_bigendian ((LONGEST) num, (char *) fnum, 4);
791c0056
GB
175}
176
177/* Pack a host-format time_t into an fio_time_t. */
178
179static inline void
7823a941 180host_to_fileio_time (time_t num, fio_time_t fnum)
791c0056 181{
7823a941 182 host_to_bigendian ((LONGEST) num, (char *) fnum, 4);
791c0056
GB
183}
184
185/* Pack a host-format struct stat into a struct fio_stat. */
186
7823a941 187extern void host_to_fileio_stat (struct stat *st, struct fio_stat *fst);
791c0056 188
1a5c2598 189#endif /* COMMON_FILEIO_H */