From a8df98c6fb07b8ddff18a01d7f2f607d9493dd7c Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 14 Jun 2012 18:57:24 +0100 Subject: [PATCH 1/2] Updates from comments on OS4 compatibility pull request http://github.com/libgit2/libgit2/pull/766 --- examples/network/Makefile | 3 +-- examples/network/fetch.c | 7 +----- include/git2/common.h | 2 -- src/amiga/map.c | 3 ++- src/netops.c | 45 ++++++++++++++++++++++----------------- src/path.c | 9 -------- src/pool.c | 2 +- src/posix.h | 7 +++++- 8 files changed, 37 insertions(+), 41 deletions(-) diff --git a/examples/network/Makefile b/examples/network/Makefile index 708a6b1b3..17efcfdb3 100644 --- a/examples/network/Makefile +++ b/examples/network/Makefile @@ -3,7 +3,6 @@ default: all CC = gcc CFLAGS += -g CFLAGS += -I../../include -L../../build -LIBS += -lgit2 -lpthread #-lregex OBJECTS = \ git2.o \ @@ -12,4 +11,4 @@ OBJECTS = \ index-pack.o all: $(OBJECTS) - $(CC) $(CFLAGS) -o git2 $(OBJECTS) $(LIBS) + $(CC) $(CFLAGS) -o git2 $(OBJECTS) diff --git a/examples/network/fetch.c b/examples/network/fetch.c index fc4e94cfd..d2752124d 100644 --- a/examples/network/fetch.c +++ b/examples/network/fetch.c @@ -36,9 +36,7 @@ static void *download(void *ptr) exit: data->finished = 1; -#ifndef NO_PTHREADS pthread_exit(&data->ret); -#endif } int update_cb(const char *refname, const git_oid *a, const git_oid *b) @@ -83,9 +81,6 @@ int fetch(git_repository *repo, int argc, char **argv) data.finished = 0; memset(&stats, 0, sizeof(stats)); -#ifdef NO_PTHREADS - download(&data); -#else pthread_create(&worker, NULL, download, &data); // Loop while the worker thread is still running. Here we show processed @@ -96,7 +91,7 @@ int fetch(git_repository *repo, int argc, char **argv) usleep(10000); printf("\rReceived %d/%d objects in %d bytes", stats.processed, stats.total, bytes); } while (!data.finished); -#endif + printf("\rReceived %d/%d objects in %d bytes\n", stats.processed, stats.total, bytes); // Disconnect the underlying connection to prevent from idling. diff --git a/include/git2/common.h b/include/git2/common.h index 99018d4f5..1af045cff 100644 --- a/include/git2/common.h +++ b/include/git2/common.h @@ -103,8 +103,6 @@ GIT_EXTERN(int) git_strarray_copy(git_strarray *tgt, const git_strarray *src); */ GIT_EXTERN(void) git_libgit2_version(int *major, int *minor, int *rev); -/* GIT_EXTERN(int) p_fnmatch(const char *pattern, const char *string, int flags); */ - /** @} */ GIT_END_DECL #endif diff --git a/src/amiga/map.c b/src/amiga/map.c index d36bcbc9c..643e6c65d 100755 --- a/src/amiga/map.c +++ b/src/amiga/map.c @@ -23,7 +23,8 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offs out->len = 0; if ((prot & GIT_PROT_WRITE) && ((flags & GIT_MAP_TYPE) == GIT_MAP_SHARED)) { - printf("Trying to map shared-writeable file!!!\n"); + giterr_set(GITERR_OS, "Trying to map shared-writeable"); + return -1; } if(out->data = malloc(len)) { diff --git a/src/netops.c b/src/netops.c index 11295c5cd..166c97162 100644 --- a/src/netops.c +++ b/src/netops.c @@ -33,6 +33,16 @@ #include "buffer.h" #include "transport.h" +#ifdef NO_ADDRINFO +struct addrinfo { + struct hostent *ai_hostent; + struct servent *ai_servent; + struct sockaddr_in ai_addr; + int ai_socktype; + long ai_port; +}; +#endif + #ifdef GIT_WIN32 static void net_set_error(const char *str) { @@ -378,41 +388,38 @@ int gitno_connect(git_transport *t, const char *host, const char *port) { #ifndef NO_ADDRINFO struct addrinfo *info = NULL, *p; - struct addrinfo hints; #else int p; - struct hostent *hent; - struct servent *sent; - struct sockaddr_in saddr; - long port_num = 0; #endif + struct addrinfo hints; int ret; GIT_SOCKET s = INVALID_SOCKET; -#ifndef NO_ADDRINFO + memset(&hints, 0x0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; +#ifndef NO_ADDRINFO + hints.ai_family = AF_UNSPEC; if ((ret = getaddrinfo(host, port, &hints, &info)) < 0) { giterr_set(GITERR_NET, "Failed to resolve address for %s: %s", host, gai_strerror(ret)); return -1; } #else - hent = gethostbyname(host); - sent = getservbyname(port, 0); + hints.ai_hostent = gethostbyname(host); + hints.ai_servent = getservbyname(port, 0); - if(sent) - port_num = sent->s_port; + if(hints.ai_servent) + hints.ai_port = hints.ai_servent->s_port; else - port_num = atol(port); + hints.ai_port = atol(port); #endif #ifndef NO_ADDRINFO for (p = info; p != NULL; p = p->ai_next) { s = socket(p->ai_family, p->ai_socktype, p->ai_protocol); #else - for (p = 0; hent->h_addr_list[p] != NULL; p++) { - s = socket(hent->h_addrtype, SOCK_STREAM, 0); + for (p = 0; hints.ai_hostent->h_addr_list[p] != NULL; p++) { + s = socket(hints.ai_hostent->h_addrtype, hints.ai_socktype, 0); #endif if (s == INVALID_SOCKET) { net_set_error("error creating socket"); @@ -421,10 +428,10 @@ int gitno_connect(git_transport *t, const char *host, const char *port) #ifndef NO_ADDRINFO if (connect(s, p->ai_addr, (socklen_t)p->ai_addrlen) == 0) #else - memcpy(&saddr.sin_addr, hent->h_addr_list[p], hent->h_length); - saddr.sin_family = hent->h_addrtype; - saddr.sin_port = port_num; - if (connect(s, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in)) == 0) + memcpy(&hints.ai_addr.sin_addr, hints.ai_hostent->h_addr_list[p], hints.ai_hostent->h_length); + hints.ai_addr.sin_family = hints.ai_hostent->h_addrtype; + hints.ai_addr.sin_port = honts.ai_port; + if (connect(s, (struct sockaddr *)&hints.ai_addr, sizeof(struct sockaddr_in)) == 0) #endif break; @@ -438,7 +445,7 @@ int gitno_connect(git_transport *t, const char *host, const char *port) #ifndef NO_ADDRINFO p == NULL) { #else - hent->h_addr_list[p] == NULL) { + hints.ai_hostent->h_addr_list[p] == NULL) { #endif giterr_set(GITERR_OS, "Failed to connect to %s", host); return -1; diff --git a/src/path.c b/src/path.c index d48435bd8..bd659f815 100644 --- a/src/path.c +++ b/src/path.c @@ -486,14 +486,9 @@ int git_path_cmp( /* Taken from git.git */ GIT_INLINE(int) is_dot_or_dotdot(const char *name) { -#ifdef __amigaos4__ - /* This is irrelevant on AmigaOS */ - return 0; -#else return (name[0] == '.' && (name[1] == '\0' || (name[1] == '.' && name[2] == '\0'))); -#endif } int git_path_direach( @@ -521,11 +516,7 @@ int git_path_direach( de_buf = git__malloc(sizeof(struct dirent)); #endif -#ifdef NO_READDIR_R - while (de = readdir(dir)) { -#else while (p_readdir_r(dir, de_buf, de) == 0 && de != NULL) { -#endif int result; if (is_dot_or_dotdot(de->d_name)) diff --git a/src/pool.c b/src/pool.c index c5414b3b6..63bf09cee 100644 --- a/src/pool.c +++ b/src/pool.c @@ -276,7 +276,7 @@ uint32_t git_pool__system_page_size(void) GetSystemInfo(&info); size = (uint32_t)info.dwPageSize; #elif defined(__amigaos4__) - size = (uint32_t)1000000; // random value + size = (uint32_t)4096; /* 4K as there is no global value we can query */ #else size = (uint32_t)sysconf(_SC_PAGE_SIZE); #endif diff --git a/src/posix.h b/src/posix.h index 6b6c53db1..cc35c52e3 100644 --- a/src/posix.h +++ b/src/posix.h @@ -86,7 +86,12 @@ extern int p_gettimeofday(struct timeval *tv, struct timezone *tz); #ifndef NO_READDIR_R #define p_readdir_r(d,e,r) readdir_r(d,e,&r) #else -#define p_readdir_r(d,e,r) r = readdir(d) +GIT_INLINE(int) p_readdir_r(DIR *dirp, struct dirent *entry, struct direct **result) +{ + GIT_UNUSED(entry); + *result = readdir(dirp); + return 0; +} #endif #endif From d043013fea859f5eb6f677cad28319d093f1dbda Mon Sep 17 00:00:00 2001 From: Chris Young Date: Thu, 14 Jun 2012 19:09:42 +0100 Subject: [PATCH 2/2] More changes resulting from pull request --- README.amiga | 4 ---- src/amiga/map.c | 7 ++----- src/netops.c | 2 +- src/path.c | 4 ++-- src/posix.h | 5 +++-- src/ppc/sha1ppc.S.obj | Bin 4471 -> 0 bytes 6 files changed, 8 insertions(+), 14 deletions(-) delete mode 100755 README.amiga delete mode 100644 src/ppc/sha1ppc.S.obj diff --git a/README.amiga b/README.amiga deleted file mode 100755 index 97414dda2..000000000 --- a/README.amiga +++ /dev/null @@ -1,4 +0,0 @@ -Nasty build hack: -When setting SHA1 to ppc in CMakeLists.txt, after running initial CMake, -copy src/ppc/sha1ppc.S.obj to build/CMakeFiles/git2.dir/src/ppc/ -Add CMakeFiles/git2.dir/src/ppc/sha1ppc.S.obj to the list in build/CMakeFiles/git2.dir/link.txt diff --git a/src/amiga/map.c b/src/amiga/map.c index 643e6c65d..2fb065c8b 100755 --- a/src/amiga/map.c +++ b/src/amiga/map.c @@ -14,9 +14,6 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offset) { - int mprot = 0; - int mflag = 0; - GIT_MMAP_VALIDATE(out, len, prot, flags); out->data = NULL; @@ -27,12 +24,12 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offs return -1; } - if(out->data = malloc(len)) { + if((out->data = malloc(len))) { p_lseek(fd, offset, SEEK_SET); p_read(fd, out->data, len); } - if (!out->data || out->data == MAP_FAILED) { + if (!out->data || (out->data == MAP_FAILED)) { giterr_set(GITERR_OS, "Failed to mmap. Could not write data"); return -1; } diff --git a/src/netops.c b/src/netops.c index 166c97162..98b5035ff 100644 --- a/src/netops.c +++ b/src/netops.c @@ -430,7 +430,7 @@ int gitno_connect(git_transport *t, const char *host, const char *port) #else memcpy(&hints.ai_addr.sin_addr, hints.ai_hostent->h_addr_list[p], hints.ai_hostent->h_length); hints.ai_addr.sin_family = hints.ai_hostent->h_addrtype; - hints.ai_addr.sin_port = honts.ai_port; + hints.ai_addr.sin_port = hints.ai_port; if (connect(s, (struct sockaddr *)&hints.ai_addr, sizeof(struct sockaddr_in)) == 0) #endif break; diff --git a/src/path.c b/src/path.c index bd659f815..1d85559a9 100644 --- a/src/path.c +++ b/src/path.c @@ -516,7 +516,7 @@ int git_path_direach( de_buf = git__malloc(sizeof(struct dirent)); #endif - while (p_readdir_r(dir, de_buf, de) == 0 && de != NULL) { + while (p_readdir_r(dir, de_buf, &de) == 0 && de != NULL) { int result; if (is_dot_or_dotdot(de->d_name)) @@ -574,7 +574,7 @@ int git_path_dirload( path_len -= prefix_len; need_slash = (path_len > 0 && path[path_len-1] != '/') ? 1 : 0; - while ((error = p_readdir_r(dir, de_buf, de)) == 0 && de != NULL) { + while ((error = p_readdir_r(dir, de_buf, &de)) == 0 && de != NULL) { char *entry_path; size_t entry_len; diff --git a/src/posix.h b/src/posix.h index cc35c52e3..d423b7e07 100644 --- a/src/posix.h +++ b/src/posix.h @@ -84,9 +84,10 @@ extern int p_gettimeofday(struct timeval *tv, struct timezone *tz); #endif #ifndef NO_READDIR_R -#define p_readdir_r(d,e,r) readdir_r(d,e,&r) +#define p_readdir_r(d,e,r) readdir_r(d,e,r) #else -GIT_INLINE(int) p_readdir_r(DIR *dirp, struct dirent *entry, struct direct **result) +#include +GIT_INLINE(int) p_readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) { GIT_UNUSED(entry); *result = readdir(dirp); diff --git a/src/ppc/sha1ppc.S.obj b/src/ppc/sha1ppc.S.obj deleted file mode 100644 index a7dad600fee80b062086f352aa62b87b1755e7ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4471 zcma)=L1-M;8ONU$(Qct&8Rnpp9Aq%mD}s?i3S(o;Vv-_;QdAMGL6_KT2aHUUAn7o1 zXLc*qml#7q=u*>zBjVBu48h<-)P|}eY(WPfL{TX%LD0}W|Nrm%wuyRZ z1*>@)y*E3*|NDOP-fr*JAN}yy$gwp1IhHcCzjk8G{`ImBr_;C7=*Gz}KltdqH2V9i zDOJCF?l-H~QaXQcVXgPCFUr+hX|(s}&&%F#KPy+?PmRm>-}zPV-G7#=AE)p37XMyW z{e`SLoGI($GkMh?$>v+9FU&WeUa0yvvnowytDmMZp05U-tWL9KJvEzGgOTjD9rP>E zZ?L9*YoiH$MzXrGnAHyl$Z1;pq#n^`Bm-8@H|BsWi^>b#p1JTX|XS=Xu@4 z`zG`opkH&{`n{4~;Q6}1eeAT#>ho4!7w9*E_idnGao74?OA|a_^>H8M$c}PsTEAQA zlyTfPjvpN5*s^}_r_;u33<$~bTzDJ?nQWX`ZUVL*qDilw;rey^_uw$95);8@r|Mw*{UXch%{iGw4nuL(iZ+jWNn#Nf~tK$ciz@pgU)IFoW(KGDHUF@4fjq=FpzQ zIP|-G|Fiex+hI|5myNkf7tyv{m_>Ja%W^>$?PYSUA&0rLyJ5Ul!q^SVggJCKkR#Zc zLwkcvsQZbR%I+g$tvL3P<)I87ZCg#C4%&~%gZgisE4v5AStX1;uq?!Xfc(JB8fYJo z13vEHo}U?Gl`!_1@?KgXFFXNnO;0ed9=anbLu6X4L=9Ij0gp8PLIpVx@r0Va9mwp5<{Rm$Ap*CwBepG{f@yZS7l^f10 zH=LJl)D3t6-Wpy6FTDs}dZ9KwhZl7dPH=wdg!9S?=amyNzjUHlwE3kE&MP0BS3Wo| zeW?0yf%Oa*f|o7?FI@;;dQc5+T0OJ=omchmysCfaW&PI;)IWGx|G~@p4_?-P@T&fs zsDJXZ{)3nGAH1yp;AQ<6>&DCam$ScoUNubzf|(8kGaR^l{}2DD`taazCZ`AFQwH$B zGQjfy9z+Ihd4PK1dOO$z|7xd1U8Vm=72Sx9bMHn3&4x1$kBT@WL{| z_25NhVqT#BxgIy+M=Q_e2e_Gy{7^Qy9{uoa%nx(DF0iicw6KO4JDry&s)-!uk*Vin zp5Q+5tgHI)1-a0d$c4T{F7zdGF<&B=J>?>AJQsQ6xyT#O#k`4J;16=4KamUliCpMU zo{RkQT;!MMVtz#~@C>!^`A{X;4a#>R@^38LRZ=Q>M z^IXig$mO=>Lhm9MdKbCSyU0b};XYL_@Q=B`zhN$LZ zXQ~B^<$C3{AkUmv`?x;*0x$gvUanWcOTU7bepQ1-@yaXbl~>Lyubfx=w+4Iyul8=v ztG%1^YVYQ}+P5{~5qRa1^U5RVl}FAikBT*WCUCuSUiss^^2d4UPt}Jv>rz!+GV0 z^U9B6OT6;JdF6%k$_wYE7gZlVfR{c5FMSAJx)8i{A-|Pc)nHr9^f#D;m&dw+ng^qO z{-h&wLq4+AP1HD;>~kmok9v0=xm@gvfzP9uvtfPW-g{rZl=VJ2m-RlnnDu^LWWArw zWf#-aTYtpo@DK5MJU^LcfBf?_kCCk&D_7E)&hql` zWB>orcpiQDy}-A;FTN2te$U%H#CHZKz5Sg1@AzNrIQ$*`zK=5vy#80e6aVSMYv_6} zvgJQ