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 /* 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 +#include +#include +#include +#include +#include +#include +#include +#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 /** * @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 /** * @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 -#include -#include -#include -#include -#include -#include -#include - -/** - * @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; -}