diff options
Diffstat (limited to 'src/git2')
| -rw-r--r-- | src/git2/compat.h | 70 | ||||
| -rw-r--r-- | src/git2/index.h | 5 |
2 files changed, 73 insertions, 2 deletions
diff --git a/src/git2/compat.h b/src/git2/compat.h new file mode 100644 index 000000000..76efae0ab --- /dev/null +++ b/src/git2/compat.h @@ -0,0 +1,70 @@ +/* + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, + * as published by the Free Software Foundation. + * + * In addition to the permissions in the GNU General Public License, + * the authors give you unlimited permission to link the compiled + * version of this file into combinations with other programs, + * and to distribute those combinations without any restriction + * coming from the use of this file. (The General Public License + * restrictions do apply in other respects; for example, they cover + * modification of the file, and distribution when not linked into + * a combined executable.) + * + * This file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#ifndef INCLUDE_git_compat_h__ +#define INCLUDE_git_compat_h__ + +/** + * @file git2/compat.h + * @brief Type compatibility layer necessary for clients of the library. + * @ingroup Git + * @{ + */ +GIT_BEGIN_DECL + +// NOTE: This needs to be in a public header so that both the library +// implementation and client applications both agree on the same types. +// Otherwise we get undefined behavior. +// +// Use the "best" types that each platform provides. Currently we truncate +// these intermediate representations for compatibility with the git ABI, but +// if and when it changes to support 64 bit types, our code will naturally +// adapt. +// +// NOTE: These types should match those that are returned by our internal +// stat() functions, for all platforms. +#if defined(_MSC_VER) + +typedef __int64 git_off_t; +typedef __time64_t git_time_t; + +#elif defined(__MINGW32__) + +typedef off64_t git_off_t; +typedef time_t git_time_t; + +#else // POSIX + +// Note: Can't use off_t since if a client program includes <sys/types.h> +// before us (directly or indirectly), they'll get 32 bit off_t in their client +// app, even though /we/ define _FILE_OFFSET_BITS=64. +typedef long long git_off_t; +typedef time_t git_time_t; + +#endif + +/** @} */ +GIT_END_DECL + +#endif diff --git a/src/git2/index.h b/src/git2/index.h index f0cae09b1..f1716fead 100644 --- a/src/git2/index.h +++ b/src/git2/index.h @@ -45,7 +45,8 @@ GIT_BEGIN_DECL /** Time used in a git index entry */ typedef struct { - unsigned int seconds; + git_time_t seconds; + /* nsec should not be stored as time_t compatible */ unsigned int nanoseconds; } git_index_time; @@ -59,7 +60,7 @@ typedef struct git_index_entry { unsigned int mode; unsigned int uid; unsigned int gid; - unsigned int file_size; + git_off_t file_size; git_oid oid; |
