diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2012-06-10 21:08:15 +0400 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2012-06-10 21:08:15 +0400 |
commit | 90490113af9cef092b36c5ee0231c11675ed9f51 (patch) | |
tree | 60d2befe60fa8b6172da9eee7a1d9702a612468e | |
parent | c9f79972baefb00e3c86a96e7a448c124bde7693 (diff) |
Basic mmap/munmap compatiblity
-rw-r--r-- | src/map.h | 4 | ||||
-rw-r--r-- | src/pack.c | 4 | ||||
-rw-r--r-- | src/unix/map.c | 19 |
3 files changed, 22 insertions, 5 deletions
@@ -23,6 +23,10 @@ #define GIT_MAP_TYPE 0xf #define GIT_MAP_FIXED 0x10 +#ifdef __amigaos4__ +#define MAP_FAILED 0 +#endif + typedef struct { /* memory mapped buffer */ void *data; /* data bytes */ size_t len; /* data length */ diff --git a/src/pack.c b/src/pack.c index 0db1069de..85bc6707e 100644 --- a/src/pack.c +++ b/src/pack.c @@ -215,7 +215,7 @@ static int packfile_unpack_header1( unsigned shift; unsigned long size, c; unsigned long used = 0; - +printf("[pack 218] buf = %lx, used = %ld, len = %ld\n", buf, used, len); c = buf[used++]; *type = (c >> 4) & 7; size = c & 15; @@ -261,7 +261,7 @@ int git_packfile_unpack_header( base = git_mwindow_open(mwf, w_curs, *curpos, 20, &left); if (base == NULL) return GIT_EBUFS; - +printf("[pack 264] base = %lx, mwf = %lx\n", base, mwf); ret = packfile_unpack_header1(&used, size_p, type_p, base, left); git_mwindow_close(w_curs); if (ret == GIT_EBUFS) diff --git a/src/unix/map.c b/src/unix/map.c index 65f4ac91c..8e853b9be 100644 --- a/src/unix/map.c +++ b/src/unix/map.c @@ -16,7 +16,6 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offset) { -#ifndef __amigaos4__ int mprot = 0; int mflag = 0; @@ -25,6 +24,7 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offs out->data = NULL; out->len = 0; +#ifndef __amigaos4__ if (prot & GIT_PROT_WRITE) mprot = PROT_WRITE; else if (prot & GIT_PROT_READ) @@ -36,21 +36,34 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offs mflag = MAP_PRIVATE; out->data = mmap(NULL, len, mprot, mflag, fd, offset); +#else + if ((prot & GIT_PROT_WRITE) && ((flags & GIT_MAP_TYPE) == GIT_MAP_SHARED)) { + printf("Trying to map shared-writeable file!!!\n"); + + if(out->data = malloc(len)) { + lseek(fd, offset, SEEK_SET); + p_read(fd, out->data, len); + } + } +#endif + if (!out->data || out->data == MAP_FAILED) { giterr_set(GITERR_OS, "Failed to mmap. Could not write data"); return -1; } out->len = len; -#endif + return 0; } int p_munmap(git_map *map) { -#ifndef __amigaos4__ assert(map != NULL); +#ifndef __amigaos4__ munmap(map->data, map->len); +#else + free(map->data); #endif return 0; } |