diff options
| author | Vicent Marti <vicent@github.com> | 2013-12-13 06:20:19 -0800 |
|---|---|---|
| committer | Vicent Marti <vicent@github.com> | 2013-12-13 06:20:19 -0800 |
| commit | 79194bcdc956406979cd27ac99198826860d3f20 (patch) | |
| tree | 407594b97b6e39ef3ac0723dc33aa3162ce933cc /src/posix.c | |
| parent | 25a1fab0a96fd87e4ebc4ec195ac59a4213e92ad (diff) | |
| parent | 7a16d54b5457aa9f60c25a204277ae0ce609ad2e (diff) | |
| download | libgit2-79194bcdc956406979cd27ac99198826860d3f20.tar.gz | |
Merge pull request #1986 from libgit2/rb/error-handling-cleanups
Clean up some error handling and change callback error behavior
Diffstat (limited to 'src/posix.c')
| -rw-r--r-- | src/posix.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/posix.c b/src/posix.c index b75109b83..525785f35 100644 --- a/src/posix.c +++ b/src/posix.c @@ -203,4 +203,40 @@ int p_write(git_file fd, const void *buf, size_t cnt) return 0; } +#ifdef NO_MMAP +#include "map.h" + +int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offset) +{ + GIT_MMAP_VALIDATE(out, len, prot, flags); + + out->data = NULL; + out->len = 0; + + if ((prot & GIT_PROT_WRITE) && ((flags & GIT_MAP_TYPE) == GIT_MAP_SHARED)) { + giterr_set(GITERR_OS, "Trying to map shared-writeable"); + return -1; + } + + out->data = malloc(len); + GITERR_CHECK_ALLOC(out->data); + + if ((p_lseek(fd, offset, SEEK_SET) < 0) || ((size_t)p_read(fd, out->data, len) != len)) { + giterr_set(GITERR_OS, "mmap emulation failed"); + return -1; + } + + out->len = len; + return 0; +} + +int p_munmap(git_map *map) +{ + assert(map != NULL); + free(map->data); + + return 0; +} + +#endif |
