Fix memory leak in p_getaddrinfo on Amiga

If gethostbyname() fails on platforms with NO_ADDRINFO, the code
leaks the struct addrinfo that was allocated.  This fixes that
(and a number of code formatting issues in that area of code in
src/posix.c).
This commit is contained in:
Russell Belfer 2013-02-15 16:01:31 -08:00
parent a7ed746093
commit 71d62d3905

View File

@ -13,22 +13,25 @@
#ifndef GIT_WIN32 #ifndef GIT_WIN32
#ifdef NO_ADDRINFO #ifdef NO_ADDRINFO
int p_getaddrinfo( int p_getaddrinfo(
const char *host, const char *host,
const char *port, const char *port,
struct addrinfo *hints, struct addrinfo *hints,
struct addrinfo **info) struct addrinfo **info)
{ {
GIT_UNUSED(hints);
struct addrinfo *ainfo, *ai; struct addrinfo *ainfo, *ai;
int p = 0; int p = 0;
GIT_UNUSED(hints);
if ((ainfo = malloc(sizeof(struct addrinfo))) == NULL) if ((ainfo = malloc(sizeof(struct addrinfo))) == NULL)
return -1; return -1;
if ((ainfo->ai_hostent = gethostbyname(host)) == NULL) if ((ainfo->ai_hostent = gethostbyname(host)) == NULL) {
free(ainfo);
return -2; return -2;
}
ainfo->ai_servent = getservbyname(port, 0); ainfo->ai_servent = getservbyname(port, 0);
@ -88,27 +91,19 @@ void p_freeaddrinfo(struct addrinfo *info)
const char *p_gai_strerror(int ret) const char *p_gai_strerror(int ret)
{ {
switch(ret) { switch(ret) {
case -1: case -1: return "Out of memory"; break;
return "Out of memory"; case -2: return "Address lookup failed"; break;
break; default: return "Unknown error"; break;
case -2:
return "Address lookup failed";
break;
default:
return "Unknown error";
break;
} }
} }
#endif /* NO_ADDRINFO */ #endif /* NO_ADDRINFO */
int p_open(const char *path, int flags, ...) int p_open(const char *path, int flags, ...)
{ {
mode_t mode = 0; mode_t mode = 0;
if (flags & O_CREAT) if (flags & O_CREAT) {
{
va_list arg_list; va_list arg_list;
va_start(arg_list, flags); va_start(arg_list, flags);
@ -159,6 +154,7 @@ int p_rename(const char *from, const char *to)
int p_read(git_file fd, void *buf, size_t cnt) int p_read(git_file fd, void *buf, size_t cnt)
{ {
char *b = buf; char *b = buf;
while (cnt) { while (cnt) {
ssize_t r; ssize_t r;
#ifdef GIT_WIN32 #ifdef GIT_WIN32
@ -183,6 +179,7 @@ int p_read(git_file fd, void *buf, size_t cnt)
int p_write(git_file fd, const void *buf, size_t cnt) int p_write(git_file fd, const void *buf, size_t cnt)
{ {
const char *b = buf; const char *b = buf;
while (cnt) { while (cnt) {
ssize_t r; ssize_t r;
#ifdef GIT_WIN32 #ifdef GIT_WIN32