about summary refs log tree commit diff
path: root/sysdeps/mach/hurd/bits/errno.h
blob: 8f2fbfd80ffd3dc3c765a7635203d69b1329ead4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
/* This file generated by errnos.awk from
     errno.texi
     stdc-predef.h
     libc-symbols.h
     mach/message.h
     mach/kern_return.h
     mach/i386/kern_return.h
     mach/port.h
     mach/boolean.h
     mach/i386/boolean.h
     mach/i386/vm_types.h
     mach/mig_errors.h
     device/device_types.h
     mach/std_types.h
   Do not edit this file; edit errnos.awk and regenerate it.  */

#ifndef _BITS_ERRNO_H
#define _BITS_ERRNO_H 1

#if !defined _ERRNO_H
# error "Never include <bits/errno.h> directly; use <errno.h> instead."
#endif

#ifndef __ASSEMBLER__

enum __error_t_codes
{
  /* The value zero always means success and it is perfectly fine
     for code to use 0 explicitly (or implicitly, e.g. via Boolean
     coercion.)  Having an enum entry for zero both makes the
     debugger print the name for error_t-typed zero values, and
     prevents the compiler from issuing warnings about 'case 0:'
     in a switch on an error_t-typed value.  */
  ESUCCESS                       = 0,

  /* The Hurd uses Mach error system 0x10, subsystem 0. */
  EPERM                          = 0x40000001,	/* Operation not permitted */
  ENOENT                         = 0x40000002,	/* No such file or directory */
  ESRCH                          = 0x40000003,	/* No such process */
  EINTR                          = 0x40000004,	/* Interrupted system call */
  EIO                            = 0x40000005,	/* Input/output error */
  ENXIO                          = 0x40000006,	/* No such device or address */
  E2BIG                          = 0x40000007,	/* Argument list too long */
  ENOEXEC                        = 0x40000008,	/* Exec format error */
  EBADF                          = 0x40000009,	/* Bad file descriptor */
  ECHILD                         = 0x4000000a,	/* No child processes */
  EDEADLK                        = 0x4000000b,	/* Resource deadlock avoided */
  ENOMEM                         = 0x4000000c,	/* Cannot allocate memory */
  EACCES                         = 0x4000000d,	/* Permission denied */
  EFAULT                         = 0x4000000e,	/* Bad address */
  ENOTBLK                        = 0x4000000f,	/* Block device required */
  EBUSY                          = 0x40000010,	/* Device or resource busy */
  EEXIST                         = 0x40000011,	/* File exists */
  EXDEV                          = 0x40000012,	/* Invalid cross-device link */
  ENODEV                         = 0x40000013,	/* No such device */
  ENOTDIR                        = 0x40000014,	/* Not a directory */
  EISDIR                         = 0x40000015,	/* Is a directory */
  EINVAL                         = 0x40000016,	/* Invalid argument */
  EMFILE                         = 0x40000018,	/* Too many open files */
  ENFILE                         = 0x40000017,	/* Too many open files in system */
  ENOTTY                         = 0x40000019,	/* Inappropriate ioctl for device */
  ETXTBSY                        = 0x4000001a,	/* Text file busy */
  EFBIG                          = 0x4000001b,	/* File too large */
  ENOSPC                         = 0x4000001c,	/* No space left on device */
  ESPIPE                         = 0x4000001d,	/* Illegal seek */
  EROFS                          = 0x4000001e,	/* Read-only file system */
  EMLINK                         = 0x4000001f,	/* Too many links */
  EPIPE                          = 0x40000020,	/* Broken pipe */
  EDOM                           = 0x40000021,	/* Numerical argument out of domain */
  ERANGE                         = 0x40000022,	/* Numerical result out of range */
  EAGAIN                         = 0x40000023,	/* Resource temporarily unavailable */
  EINPROGRESS                    = 0x40000024,	/* Operation now in progress */
  EALREADY                       = 0x40000025,	/* Operation already in progress */
  ENOTSOCK                       = 0x40000026,	/* Socket operation on non-socket */
  EMSGSIZE                       = 0x40000028,	/* Message too long */
  EPROTOTYPE                     = 0x40000029,	/* Protocol wrong type for socket */
  ENOPROTOOPT                    = 0x4000002a,	/* Protocol not available */
  EPROTONOSUPPORT                = 0x4000002b,	/* Protocol not supported */
  ESOCKTNOSUPPORT                = 0x4000002c,	/* Socket type not supported */
  EOPNOTSUPP                     = 0x4000002d,	/* Operation not supported */
  EPFNOSUPPORT                   = 0x4000002e,	/* Protocol family not supported */
  EAFNOSUPPORT                   = 0x4000002f,	/* Address family not supported by protocol */
  EADDRINUSE                     = 0x40000030,	/* Address already in use */
  EADDRNOTAVAIL                  = 0x40000031,	/* Cannot assign requested address */
  ENETDOWN                       = 0x40000032,	/* Network is down */
  ENETUNREACH                    = 0x40000033,	/* Network is unreachable */
  ENETRESET                      = 0x40000034,	/* Network dropped connection on reset */
  ECONNABORTED                   = 0x40000035,	/* Software caused connection abort */
  ECONNRESET                     = 0x40000036,	/* Connection reset by peer */
  ENOBUFS                        = 0x40000037,	/* No buffer space available */
  EISCONN                        = 0x40000038,	/* Transport endpoint is already connected */
  ENOTCONN                       = 0x40000039,	/* Transport endpoint is not connected */
  EDESTADDRREQ                   = 0x40000027,	/* Destination address required */
  ESHUTDOWN                      = 0x4000003a,	/* Cannot send after transport endpoint shutdown */
  ETOOMANYREFS                   = 0x4000003b,	/* Too many references: cannot splice */
  ETIMEDOUT                      = 0x4000003c,	/* Connection timed out */
  ECONNREFUSED                   = 0x4000003d,	/* Connection refused */
  ELOOP                          = 0x4000003e,	/* Too many levels of symbolic links */
  ENAMETOOLONG                   = 0x4000003f,	/* File name too long */
  EHOSTDOWN                      = 0x40000040,	/* Host is down */
  EHOSTUNREACH                   = 0x40000041,	/* No route to host */
  ENOTEMPTY                      = 0x40000042,	/* Directory not empty */
  EPROCLIM                       = 0x40000043,	/* Too many processes */
  EUSERS                         = 0x40000044,	/* Too many users */
  EDQUOT                         = 0x40000045,	/* Disk quota exceeded */
  ESTALE                         = 0x40000046,	/* Stale file handle */
  EREMOTE                        = 0x40000047,	/* Object is remote */
  EBADRPC                        = 0x40000048,	/* RPC struct is bad */
  ERPCMISMATCH                   = 0x40000049,	/* RPC version wrong */
  EPROGUNAVAIL                   = 0x4000004a,	/* RPC program not available */
  EPROGMISMATCH                  = 0x4000004b,	/* RPC program version wrong */
  EPROCUNAVAIL                   = 0x4000004c,	/* RPC bad procedure for program */
  ENOLCK                         = 0x4000004d,	/* No locks available */
  EFTYPE                         = 0x4000004f,	/* Inappropriate file type or format */
  EAUTH                          = 0x40000050,	/* Authentication error */
  ENEEDAUTH                      = 0x40000051,	/* Need authenticator */
  ENOSYS                         = 0x4000004e,	/* Function not implemented */
  ENOTSUP                        = 0x40000076,	/* Not supported */
  EILSEQ                         = 0x4000006a,	/* Invalid or incomplete multibyte or wide character */
  EBACKGROUND                    = 0x40000064,	/* Inappropriate operation for background process */
  EDIED                          = 0x40000065,	/* Translator died */
  ED                             = 0x40000066,	/* ? */
  EGREGIOUS                      = 0x40000067,	/* You really blew it this time */
  EIEIO                          = 0x40000068,	/* Computer bought the farm */
  EGRATUITOUS                    = 0x40000069,	/* Gratuitous error */
  EBADMSG                        = 0x4000006b,	/* Bad message */
  EIDRM                          = 0x4000006c,	/* Identifier removed */
  EMULTIHOP                      = 0x4000006d,	/* Multihop attempted */
  ENODATA                        = 0x4000006e,	/* No data available */
  ENOLINK                        = 0x4000006f,	/* Link has been severed */
  ENOMSG                         = 0x40000070,	/* No message of desired type */
  ENOSR                          = 0x40000071,	/* Out of streams resources */
  ENOSTR                         = 0x40000072,	/* Device not a stream */
  EOVERFLOW                      = 0x40000073,	/* Value too large for defined data type */
  EPROTO                         = 0x40000074,	/* Protocol error */
  ETIME                          = 0x40000075,	/* Timer expired */
  ECANCELED                      = 0x40000077,	/* Operation canceled */
  EOWNERDEAD                     = 0x40000078,	/* Owner died */
  ENOTRECOVERABLE                = 0x40000079,	/* State not recoverable */

/* Errors from <mach/message.h>.  */
  EMACH_SEND_IN_PROGRESS         = 0x10000001,
  EMACH_SEND_INVALID_DATA        = 0x10000002,
  EMACH_SEND_INVALID_DEST        = 0x10000003,
  EMACH_SEND_TIMED_OUT           = 0x10000004,
  EMACH_SEND_WILL_NOTIFY         = 0x10000005,
  EMACH_SEND_NOTIFY_IN_PROGRESS  = 0x10000006,
  EMACH_SEND_INTERRUPTED         = 0x10000007,
  EMACH_SEND_MSG_TOO_SMALL       = 0x10000008,
  EMACH_SEND_INVALID_REPLY       = 0x10000009,
  EMACH_SEND_INVALID_RIGHT       = 0x1000000a,
  EMACH_SEND_INVALID_NOTIFY      = 0x1000000b,
  EMACH_SEND_INVALID_MEMORY      = 0x1000000c,
  EMACH_SEND_NO_BUFFER           = 0x1000000d,
  EMACH_SEND_NO_NOTIFY           = 0x1000000e,
  EMACH_SEND_INVALID_TYPE        = 0x1000000f,
  EMACH_SEND_INVALID_HEADER      = 0x10000010,
  EMACH_RCV_IN_PROGRESS          = 0x10004001,
  EMACH_RCV_INVALID_NAME         = 0x10004002,
  EMACH_RCV_TIMED_OUT            = 0x10004003,
  EMACH_RCV_TOO_LARGE            = 0x10004004,
  EMACH_RCV_INTERRUPTED          = 0x10004005,
  EMACH_RCV_PORT_CHANGED         = 0x10004006,
  EMACH_RCV_INVALID_NOTIFY       = 0x10004007,
  EMACH_RCV_INVALID_DATA         = 0x10004008,
  EMACH_RCV_PORT_DIED            = 0x10004009,
  EMACH_RCV_IN_SET               = 0x1000400a,
  EMACH_RCV_HEADER_ERROR         = 0x1000400b,
  EMACH_RCV_BODY_ERROR           = 0x1000400c,

/* Errors from <mach/kern_return.h>.  */
  EKERN_INVALID_ADDRESS          = 1,
  EKERN_PROTECTION_FAILURE       = 2,
  EKERN_NO_SPACE                 = 3,
  EKERN_INVALID_ARGUMENT         = 4,
  EKERN_FAILURE                  = 5,
  EKERN_RESOURCE_SHORTAGE        = 6,
  EKERN_NOT_RECEIVER             = 7,
  EKERN_NO_ACCESS                = 8,
  EKERN_MEMORY_FAILURE           = 9,
  EKERN_MEMORY_ERROR             = 10,
  EKERN_NOT_IN_SET               = 12,
  EKERN_NAME_EXISTS              = 13,
  EKERN_ABORTED                  = 14,
  EKERN_INVALID_NAME             = 15,
  EKERN_INVALID_TASK             = 16,
  EKERN_INVALID_RIGHT            = 17,
  EKERN_INVALID_VALUE            = 18,
  EKERN_UREFS_OVERFLOW           = 19,
  EKERN_INVALID_CAPABILITY       = 20,
  EKERN_RIGHT_EXISTS             = 21,
  EKERN_INVALID_HOST             = 22,
  EKERN_MEMORY_PRESENT           = 23,
  EKERN_WRITE_PROTECTION_FAILURE = 24,
  EKERN_TERMINATED               = 26,
  EKERN_TIMEDOUT                 = 27,
  EKERN_INTERRUPTED              = 28,

/* Errors from <mach/mig_errors.h>.  */
  EMIG_TYPE_ERROR                = -300,	/* client type check failure */
  EMIG_REPLY_MISMATCH            = -301,	/* wrong reply message ID */
  EMIG_REMOTE_ERROR              = -302,	/* server detected error */
  EMIG_BAD_ID                    = -303,	/* bad request message ID */
  EMIG_BAD_ARGUMENTS             = -304,	/* server type check failure */
  EMIG_NO_REPLY                  = -305,	/* no reply should be sent */
  EMIG_EXCEPTION                 = -306,	/* server raised exception */
  EMIG_ARRAY_TOO_LARGE           = -307,	/* array not large enough */
  EMIG_SERVER_DIED               = -308,	/* server died */
  EMIG_DESTROY_REQUEST           = -309,	/* destroy request with no reply */

/* Errors from <device/device_types.h>.  */
  ED_IO_ERROR                    = 2500,	/* hardware IO error */
  ED_WOULD_BLOCK                 = 2501,	/* would block, but D_NOWAIT set */
  ED_NO_SUCH_DEVICE              = 2502,	/* no such device */
  ED_ALREADY_OPEN                = 2503,	/* exclusive-use device already open */
  ED_DEVICE_DOWN                 = 2504,	/* device has been shut down */
  ED_INVALID_OPERATION           = 2505,	/* bad operation for device */
  ED_INVALID_RECNUM              = 2506,	/* invalid record (block) number */
  ED_INVALID_SIZE                = 2507,	/* invalid IO size */
  ED_NO_MEMORY                   = 2508,	/* memory allocation failure */
  ED_READ_ONLY                   = 2509,	/* device cannot be written to */

  /* Because the C standard requires that errno have type 'int',
     this enumeration must be a signed type.  */
  __FORCE_ERROR_T_CODES_SIGNED = -1
};

#endif /* not __ASSEMBLER__ */

/* The C standard requires that all of the E-constants be
   defined as macros.  */

#define EPERM                          0x40000001
#define ENOENT                         0x40000002
#define ESRCH                          0x40000003
#define EINTR                          0x40000004
#define EIO                            0x40000005
#define ENXIO                          0x40000006
#define E2BIG                          0x40000007
#define ENOEXEC                        0x40000008
#define EBADF                          0x40000009
#define ECHILD                         0x4000000a
#define EDEADLK                        0x4000000b
#define ENOMEM                         0x4000000c
#define EACCES                         0x4000000d
#define EFAULT                         0x4000000e
#define ENOTBLK                        0x4000000f
#define EBUSY                          0x40000010
#define EEXIST                         0x40000011
#define EXDEV                          0x40000012
#define ENODEV                         0x40000013
#define ENOTDIR                        0x40000014
#define EISDIR                         0x40000015
#define EINVAL                         0x40000016
#define EMFILE                         0x40000018
#define ENFILE                         0x40000017
#define ENOTTY                         0x40000019
#define ETXTBSY                        0x4000001a
#define EFBIG                          0x4000001b
#define ENOSPC                         0x4000001c
#define ESPIPE                         0x4000001d
#define EROFS                          0x4000001e
#define EMLINK                         0x4000001f
#define EPIPE                          0x40000020
#define EDOM                           0x40000021
#define ERANGE                         0x40000022
#define EAGAIN                         0x40000023
#define EWOULDBLOCK                    EAGAIN
#define EINPROGRESS                    0x40000024
#define EALREADY                       0x40000025
#define ENOTSOCK                       0x40000026
#define EMSGSIZE                       0x40000028
#define EPROTOTYPE                     0x40000029
#define ENOPROTOOPT                    0x4000002a
#define EPROTONOSUPPORT                0x4000002b
#define ESOCKTNOSUPPORT                0x4000002c
#define EOPNOTSUPP                     0x4000002d
#define EPFNOSUPPORT                   0x4000002e
#define EAFNOSUPPORT                   0x4000002f
#define EADDRINUSE                     0x40000030
#define EADDRNOTAVAIL                  0x40000031
#define ENETDOWN                       0x40000032
#define ENETUNREACH                    0x40000033
#define ENETRESET                      0x40000034
#define ECONNABORTED                   0x40000035
#define ECONNRESET                     0x40000036
#define ENOBUFS                        0x40000037
#define EISCONN                        0x40000038
#define ENOTCONN                       0x40000039
#define EDESTADDRREQ                   0x40000027
#define ESHUTDOWN                      0x4000003a
#define ETOOMANYREFS                   0x4000003b
#define ETIMEDOUT                      0x4000003c
#define ECONNREFUSED                   0x4000003d
#define ELOOP                          0x4000003e
#define ENAMETOOLONG                   0x4000003f
#define EHOSTDOWN                      0x40000040
#define EHOSTUNREACH                   0x40000041
#define ENOTEMPTY                      0x40000042
#define EPROCLIM                       0x40000043
#define EUSERS                         0x40000044
#define EDQUOT                         0x40000045
#define ESTALE                         0x40000046
#define EREMOTE                        0x40000047
#define EBADRPC                        0x40000048
#define ERPCMISMATCH                   0x40000049
#define EPROGUNAVAIL                   0x4000004a
#define EPROGMISMATCH                  0x4000004b
#define EPROCUNAVAIL                   0x4000004c
#define ENOLCK                         0x4000004d
#define EFTYPE                         0x4000004f
#define EAUTH                          0x40000050
#define ENEEDAUTH                      0x40000051
#define ENOSYS                         0x4000004e
#define ENOTSUP                        0x40000076
#define EILSEQ                         0x4000006a
#define EBACKGROUND                    0x40000064
#define EDIED                          0x40000065
#define ED                             0x40000066
#define EGREGIOUS                      0x40000067
#define EIEIO                          0x40000068
#define EGRATUITOUS                    0x40000069
#define EBADMSG                        0x4000006b
#define EIDRM                          0x4000006c
#define EMULTIHOP                      0x4000006d
#define ENODATA                        0x4000006e
#define ENOLINK                        0x4000006f
#define ENOMSG                         0x40000070
#define ENOSR                          0x40000071
#define ENOSTR                         0x40000072
#define EOVERFLOW                      0x40000073
#define EPROTO                         0x40000074
#define ETIME                          0x40000075
#define ECANCELED                      0x40000077
#define EOWNERDEAD                     0x40000078
#define ENOTRECOVERABLE                0x40000079

/* Errors from <mach/message.h>.  */
#define EMACH_SEND_IN_PROGRESS         0x10000001
#define EMACH_SEND_INVALID_DATA        0x10000002
#define EMACH_SEND_INVALID_DEST        0x10000003
#define EMACH_SEND_TIMED_OUT           0x10000004
#define EMACH_SEND_WILL_NOTIFY         0x10000005
#define EMACH_SEND_NOTIFY_IN_PROGRESS  0x10000006
#define EMACH_SEND_INTERRUPTED         0x10000007
#define EMACH_SEND_MSG_TOO_SMALL       0x10000008
#define EMACH_SEND_INVALID_REPLY       0x10000009
#define EMACH_SEND_INVALID_RIGHT       0x1000000a
#define EMACH_SEND_INVALID_NOTIFY      0x1000000b
#define EMACH_SEND_INVALID_MEMORY      0x1000000c
#define EMACH_SEND_NO_BUFFER           0x1000000d
#define EMACH_SEND_NO_NOTIFY           0x1000000e
#define EMACH_SEND_INVALID_TYPE        0x1000000f
#define EMACH_SEND_INVALID_HEADER      0x10000010
#define EMACH_RCV_IN_PROGRESS          0x10004001
#define EMACH_RCV_INVALID_NAME         0x10004002
#define EMACH_RCV_TIMED_OUT            0x10004003
#define EMACH_RCV_TOO_LARGE            0x10004004
#define EMACH_RCV_INTERRUPTED          0x10004005
#define EMACH_RCV_PORT_CHANGED         0x10004006
#define EMACH_RCV_INVALID_NOTIFY       0x10004007
#define EMACH_RCV_INVALID_DATA         0x10004008
#define EMACH_RCV_PORT_DIED            0x10004009
#define EMACH_RCV_IN_SET               0x1000400a
#define EMACH_RCV_HEADER_ERROR         0x1000400b
#define EMACH_RCV_BODY_ERROR           0x1000400c

/* Errors from <mach/kern_return.h>.  */
#define EKERN_INVALID_ADDRESS          1
#define EKERN_PROTECTION_FAILURE       2
#define EKERN_NO_SPACE                 3
#define EKERN_INVALID_ARGUMENT         4
#define EKERN_FAILURE                  5
#define EKERN_RESOURCE_SHORTAGE        6
#define EKERN_NOT_RECEIVER             7
#define EKERN_NO_ACCESS                8
#define EKERN_MEMORY_FAILURE           9
#define EKERN_MEMORY_ERROR             10
#define EKERN_NOT_IN_SET               12
#define EKERN_NAME_EXISTS              13
#define EKERN_ABORTED                  14
#define EKERN_INVALID_NAME             15
#define EKERN_INVALID_TASK             16
#define EKERN_INVALID_RIGHT            17
#define EKERN_INVALID_VALUE            18
#define EKERN_UREFS_OVERFLOW           19
#define EKERN_INVALID_CAPABILITY       20
#define EKERN_RIGHT_EXISTS             21
#define EKERN_INVALID_HOST             22
#define EKERN_MEMORY_PRESENT           23
#define EKERN_WRITE_PROTECTION_FAILURE 24
#define EKERN_TERMINATED               26
#define EKERN_TIMEDOUT                 27
#define EKERN_INTERRUPTED              28

/* Errors from <mach/mig_errors.h>.  */
#define EMIG_TYPE_ERROR                -300
#define EMIG_REPLY_MISMATCH            -301
#define EMIG_REMOTE_ERROR              -302
#define EMIG_BAD_ID                    -303
#define EMIG_BAD_ARGUMENTS             -304
#define EMIG_NO_REPLY                  -305
#define EMIG_EXCEPTION                 -306
#define EMIG_ARRAY_TOO_LARGE           -307
#define EMIG_SERVER_DIED               -308
#define EMIG_DESTROY_REQUEST           -309

/* Errors from <device/device_types.h>.  */
#define ED_IO_ERROR                    2500
#define ED_WOULD_BLOCK                 2501
#define ED_NO_SUCH_DEVICE              2502
#define ED_ALREADY_OPEN                2503
#define ED_DEVICE_DOWN                 2504
#define ED_INVALID_OPERATION           2505
#define ED_INVALID_RECNUM              2506
#define ED_INVALID_SIZE                2507
#define ED_NO_MEMORY                   2508
#define ED_READ_ONLY                   2509

#define _HURD_ERRNOS 122

#endif /* bits/errno.h.  */