summaryrefslogtreecommitdiff
path: root/src/git2
diff options
context:
space:
mode:
authorAlex Budovski <abudovski@gmail.com>2011-01-11 16:07:45 +1100
committerAlex Budovski <abudovski@gmail.com>2011-01-11 18:31:55 +1100
commitf0bde7fac0796bb6d7bfe794bd049041f2133905 (patch)
tree8d0b13c20236ca2faa2017fe9ca4fa69b9efb0a5 /src/git2
parente0c23b88c57a5d765e5572d8ed317a4ba4da102a (diff)
downloadlibgit2-f0bde7fac0796bb6d7bfe794bd049041f2133905.tar.gz
Revised platform types to use 'best supported' size.
This will allow graceful migration to 64 bit file sizes and timestamps should git's binary interface be extended to allow this.
Diffstat (limited to 'src/git2')
-rw-r--r--src/git2/compat.h70
-rw-r--r--src/git2/index.h5
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;