summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile11
-rw-r--r--src/errors.h1
-rw-r--r--src/fileops.c49
-rw-r--r--src/fileops.h37
-rw-r--r--src/git/common.h2
-rw-r--r--src/git/config.h.in6
-rw-r--r--src/git/odb.h1
-rw-r--r--src/git/oid.h1
-rw-r--r--src/git/os/unix.h123
-rw-r--r--src/os/unix.c83
10 files changed, 90 insertions, 224 deletions
diff --git a/Makefile b/Makefile
index 71628d165..4ea481c61 100644
--- a/Makefile
+++ b/Makefile
@@ -14,11 +14,6 @@ OBJS = $(patsubst %.c,%.o,$(SRC_C))
HDRS = $(wildcard src/*.h)
PUBLIC_HEADERS = $(wildcard src/git/*.h)
HDRS += $(PUBLIC_HEADERS)
-CONFIG_H = src/git/config.h
-
-OBJS += src/os/$(OS).o
-HDRS += src/git/config.h
-HDRS += src/git/os/$(OS).h
GIT_LIB = libgit2.a
@@ -42,7 +37,7 @@ apidocs:
test: $(TEST_RUN)
-sparse: $(CONFIG_H)
+sparse:
sparse -DSPARSE_IS_RUNNING $(ALL_CFLAGS) $(SPARSE_FLAGS) $(SRC_C)
install-headers: $(PUBLIC_HEADERS)
@@ -52,10 +47,6 @@ install-headers: $(PUBLIC_HEADERS)
.c.o:
$(CC) $(ALL_CFLAGS) -c $< -o $@
-$(CONFIG_H): $(CONFIG_H).in
- sed 's/@@OS@@/$(OS)/g' $< >$@+
- mv $@+ $@
-
$(OBJS): $(HDRS)
$(GIT_LIB): $(OBJS)
rm -f $(LIB)
diff --git a/src/errors.h b/src/errors.h
index e323fc511..690992508 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -1,6 +1,7 @@
#ifndef INCLUDE_errors_h__
#define INCLUDE_errors_h__
#include "git/errors.h"
+#include <stdlib.h>
/* convenience functions */
static inline int git_int_error(int code)
diff --git a/src/fileops.c b/src/fileops.c
new file mode 100644
index 000000000..1ca0fbb08
--- /dev/null
+++ b/src/fileops.c
@@ -0,0 +1,49 @@
+#include "fileops.h"
+
+int gitfo_read(git_file fd, void *buf, size_t cnt)
+{
+ char *b = buf;
+ while (cnt) {
+ ssize_t r = read(fd, b, cnt);
+ if (r < 0) {
+ if (errno == EINTR || errno == EAGAIN)
+ continue;
+ return -1;
+ }
+ if (!r) {
+ errno = EPIPE;
+ return -1;
+ }
+ cnt -= r;
+ b += r;
+ }
+ return GIT_SUCCESS;
+}
+
+int gitfo_write(git_file fd, void *buf, size_t cnt)
+{
+ char *b = buf;
+ while (cnt) {
+ ssize_t r = write(fd, b, cnt);
+ if (r < 0) {
+ if (errno == EINTR || errno == EAGAIN)
+ continue;
+ return -1;
+ }
+ if (!r) {
+ errno = EPIPE;
+ return -1;
+ }
+ cnt -= r;
+ b += r;
+ }
+ return GIT_SUCCESS;
+}
+
+off_t gitfo_size(git_file fd)
+{
+ gitfo_statbuf sb;
+ if (fstat(fd, &sb))
+ return -1;
+ return sb.st_size;
+}
diff --git a/src/fileops.h b/src/fileops.h
new file mode 100644
index 000000000..32d6b9111
--- /dev/null
+++ b/src/fileops.h
@@ -0,0 +1,37 @@
+/*
+ * fileops.h - OS agnostic disk io operations
+ *
+ * This header describes the strictly internal part of the api
+ */
+#ifndef INCLUDE_fileops_h__
+#define INCLUDE_fileops_h__
+
+/** Force 64 bit off_t size on POSIX. */
+#define _FILE_OFFSET_BITS 64
+
+#include <errno.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <time.h>
+#include <stdlib.h>
+#include <string.h>
+#include "errors.h"
+
+typedef int git_file;
+typedef struct stat gitfo_statbuf;
+
+#define gitfo_open(path, flags) open(path, flags)
+#define gitfo_close(fd) close(fd)
+
+extern int gitfo_read(git_file fd, void *buf, size_t cnt);
+extern int gitfo_write(git_file fd, void *buf, size_t cnt);
+
+extern off_t gitfo_size(git_file fd);
+#define gitfo_lstat(path, buf) lstat(path, buf)
+#define gitfo_fstat(fd, buf) fstat(fd, buf)
+#define gitfo_stat(path, buf) stat(path, buf)
+#define gitfo_fsync(fd) fsync(fd)
+
+#endif /* INCLUDE_fileops_h__ */
diff --git a/src/git/common.h b/src/git/common.h
index 91f3b517f..87f7f3729 100644
--- a/src/git/common.h
+++ b/src/git/common.h
@@ -55,8 +55,6 @@
/** Input does not exist in the scope searched. */
#define GIT_ENOTFOUND (GIT_ERROR - 2)
-#include "git/config.h"
-
GIT_BEGIN_DECL
/** A revision traversal pool. */
diff --git a/src/git/config.h.in b/src/git/config.h.in
deleted file mode 100644
index 76d50675c..000000000
--- a/src/git/config.h.in
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef INCLUDE_git_config_h__
-#define INCLUDE_git_config_h__
-
-#include "git/os/@@OS@@.h"
-
-#endif
diff --git a/src/git/odb.h b/src/git/odb.h
index 37eb3fae5..ca9840588 100644
--- a/src/git/odb.h
+++ b/src/git/odb.h
@@ -3,6 +3,7 @@
#include "common.h"
#include "oid.h"
+#include <stdlib.h>
/**
* @file git/odb.h
diff --git a/src/git/oid.h b/src/git/oid.h
index 8b9579b77..9e90ed0d1 100644
--- a/src/git/oid.h
+++ b/src/git/oid.h
@@ -2,6 +2,7 @@
#define INCLUDE_git_oid_h__
#include "common.h"
+#include <string.h>
/**
* @file git/oid.h
diff --git a/src/git/os/unix.h b/src/git/os/unix.h
deleted file mode 100644
index 475fe13a5..000000000
--- a/src/git/os/unix.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * 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_os_abstraction_h__
-#define INCLUDE_git_os_abstraction_h__
-
-/** Force 64 bit off_t size on POSIX. */
-#define _FILE_OFFSET_BITS 64
-
-#include <errno.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <time.h>
-#include <stdlib.h>
-#include <string.h>
-
-/**
- * @file git/os/unix.h
- * @brief Portable operating system abstractions
- * @defgroup git_os_abstraction Portable operating system abstractions
- * @ingroup Git
- * @{
- */
-GIT_BEGIN_DECL
-
-/** Descriptor to an open file in the filesystem. */
-typedef int git_file;
-
-/**
- * Open a file by path name.
- *
- * Valid flags are:
- * - O_CREAT: Create the file if it does not yet exist.
- * - O_RDONLY: Open the file for reading.
- * - O_WRONLY: Open the file for writing.
- * - O_RDWR: Open the file for both reading and writing.
- *
- * @param out descriptor storage to populate on success.
- * @param path path name of the file to open.
- * @param flags bitmask of access requested to the file.
- * @return
- * - On success, GIT_SUCCESS.
- * - On error, <0.
- */
-GIT_EXTERN(int) git_fopen(git_file *out, const char *path, int flags);
-
-/**
- * Read from an open file descriptor at the current position.
- *
- * Exactly the requested number of bytes is read. If the stream
- * ends early, an error is indicated, and the exact number of bytes
- * transferred is unspecified.
- *
- * @param fd open descriptor.
- * @param buf buffer to store the read data into.
- * @param cnt number of bytes to transfer.
- * @return
- * - On success, GIT_SUCCESS.
- * - On error, <0.
- */
-GIT_EXTERN(int) git_fread(git_file fd, void *buf, size_t cnt);
-
-/**
- * Write to an open file descriptor at the current position.
- *
- * Exactly the requested number of bytes is written. If the stream
- * ends early, an error is indicated, and the exact number of bytes
- * transferred is unspecified.
- *
- * @param fd open descriptor.
- * @param buf buffer to write data from.
- * @param cnt number of bytes to transfer.
- * @return
- * - On success, GIT_SUCCESS.
- * - On error, <0.
- */
-GIT_EXTERN(int) git_fwrite(git_file fd, void *buf, size_t cnt);
-
-/**
- * Get the current size of an open file.
- * @param fd open descriptor.
- * @return
- * - On success, >= 0, indicating the file size in bytes.
- * - On error, <0.
- */
-GIT_EXTERN(off_t) git_fsize(git_file fd);
-
-/**
- * Close an open file descriptor.
- * @param fd descriptor to close.
- * @return
- * - On success, GIT_SUCCESS.
- * - On error, <0.
- */
-#define git_fclose(fd) close(fd)
-
-/** @} */
-GIT_END_DECL
-#endif
diff --git a/src/os/unix.c b/src/os/unix.c
deleted file mode 100644
index 8a2088414..000000000
--- a/src/os/unix.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.
- */
-
-#include "git/common.h"
-
-int git_fopen(git_file *out, const char *path, int flags)
-{
- int r = open(path, flags);
- if (r < 0)
- return -1;
- *out = r;
- return GIT_SUCCESS;
-}
-
-int git_fread(git_file fd, void *buf, size_t cnt)
-{
- char *b = buf;
- while (cnt) {
- ssize_t r = read(fd, b, cnt);
- if (r < 0) {
- if (errno == EINTR || errno == EAGAIN)
- continue;
- return -1;
- }
- if (!r) {
- errno = EPIPE;
- return -1;
- }
- cnt -= r;
- b += r;
- }
- return GIT_SUCCESS;
-}
-
-int git_fwrite(git_file fd, void *buf, size_t cnt)
-{
- char *b = buf;
- while (cnt) {
- ssize_t r = write(fd, b, cnt);
- if (r < 0) {
- if (errno == EINTR || errno == EAGAIN)
- continue;
- return -1;
- }
- if (!r) {
- errno = EPIPE;
- return -1;
- }
- cnt -= r;
- b += r;
- }
- return GIT_SUCCESS;
-}
-
-off_t git_fsize(git_file fd)
-{
- struct stat sb;
- if (fstat(fd, &sb))
- return -1;
- return sb.st_size;
-}