1 /* Provide a more complete sys/types.h. 2 3 Copyright (C) 2011-2023 Free Software Foundation, Inc. 4 5 This file is free software: you can redistribute it and/or modify 6 it under the terms of the GNU Lesser General Public License as 7 published by the Free Software Foundation; either version 2.1 of the 8 License, or (at your option) any later version. 9 10 This file is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public License 16 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 17 18 #if __GNUC__ >= 3 19 @PRAGMA_SYSTEM_HEADER@ 20 #endif 21 @PRAGMA_COLUMNS@ 22 23 /* This file uses #include_next of a system file that defines time_t. 24 For the 'year2038' module to work right, <config.h> needs to have been 25 included before. */ 26 #if !_GL_CONFIG_H_INCLUDED 27 #error "Please include config.h first." 28 #endif 29 30 #if defined _WIN32 && !defined __CYGWIN__ \ 31 && (defined __need_off_t || defined __need___off64_t \ 32 || defined __need_ssize_t || defined __need_time_t) 33 34 /* Special invocation convention inside mingw header files. */ 35 36 #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ 37 38 #else 39 /* Normal invocation convention. */ 40 41 #ifndef _@GUARD_PREFIX@_SYS_TYPES_H 42 43 /* The include_next requires a split double-inclusion guard. */ 44 # define _GL_INCLUDING_SYS_TYPES_H 45 #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ 46 # undef _GL_INCLUDING_SYS_TYPES_H 47 48 #ifndef _@GUARD_PREFIX@_SYS_TYPES_H 49 #define _@GUARD_PREFIX@_SYS_TYPES_H 50 51 /* Override off_t if Large File Support is requested on native Windows. */ 52 #if @WINDOWS_64_BIT_OFF_T@ 53 /* Same as int64_t in <stdint.h>. */ 54 # if defined _MSC_VER 55 # define off_t __int64 56 # else 57 # define off_t long long int 58 # endif 59 /* Indicator, for gnulib internal purposes. */ 60 # define _GL_WINDOWS_64_BIT_OFF_T 1 61 #endif 62 63 /* Override dev_t and ino_t if distinguishable inodes support is requested 64 on native Windows. */ 65 #if @WINDOWS_STAT_INODES@ 66 67 # if @WINDOWS_STAT_INODES@ == 2 68 /* Experimental, not useful in Windows 10. */ 69 70 /* Define dev_t to a 64-bit type. */ 71 # if !defined GNULIB_defined_dev_t 72 typedef unsigned long long int rpl_dev_t; 73 # undef dev_t 74 # define dev_t rpl_dev_t 75 # define GNULIB_defined_dev_t 1 76 # endif 77 78 /* Define ino_t to a 128-bit type. */ 79 # if !defined GNULIB_defined_ino_t 80 /* MSVC does not have a 128-bit integer type. 81 GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ 82 typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; 83 # undef ino_t 84 # define ino_t rpl_ino_t 85 # define GNULIB_defined_ino_t 1 86 # endif 87 88 # else /* @WINDOWS_STAT_INODES@ == 1 */ 89 90 /* Define ino_t to a 64-bit type. */ 91 # if !defined GNULIB_defined_ino_t 92 typedef unsigned long long int rpl_ino_t; 93 # undef ino_t 94 # define ino_t rpl_ino_t 95 # define GNULIB_defined_ino_t 1 96 # endif 97 98 # endif 99 100 /* Indicator, for gnulib internal purposes. */ 101 # define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ 102 103 #endif 104 105 /* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ 106 /* But avoid namespace pollution on glibc systems. */ 107 #if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ 108 # include <stddef.h> 109 #endif 110 111 #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ 112 #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ 113 #endif /* __need_XXX */