diff options
| author | David W. Chapman Jr. <dwcjr@FreeBSD.org> | 2001-09-14 03:13:16 +0000 |
|---|---|---|
| committer | David W. Chapman Jr. <dwcjr@FreeBSD.org> | 2001-09-14 03:13:16 +0000 |
| commit | 5c75286c87cb485d3bb095fecc2d86dff9090b26 (patch) | |
| tree | f6aea5fafbc33865920729c8c2b52054572ebd52 /net/netatalk-devel/files | |
| parent | ftp.freesoftware.com -- R.I.P. (diff) | |
Fix malloc bug when config file does not exist
Bump PORTREVISION
PR: 30566
Submitted by: maintainer
Diffstat (limited to 'net/netatalk-devel/files')
| -rw-r--r-- | net/netatalk-devel/files/patch-aj | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/net/netatalk-devel/files/patch-aj b/net/netatalk-devel/files/patch-aj new file mode 100644 index 000000000000..55fd7d40340c --- /dev/null +++ b/net/netatalk-devel/files/patch-aj @@ -0,0 +1,104 @@ +--- libatalk/util/getiface.c.orig Thu Sep 13 00:28:21 2001 ++++ libatalk/util/getiface.c Thu Sep 13 00:28:30 2001 +@@ -43,13 +43,6 @@ + { + /* if we've run out of room, allocate some more. just return + * the present list if we can't. */ +- if (*i >= *length) { +- char **new = realloc(list, sizeof(char **)*(*length + IFACE_NUM)); +- +- if (!new) /* just break if we can't allocate anything */ +- return -1; +- *length += IFACE_NUM; +- } + + if ((list[*i] = strdup(name)) == NULL) + return -1; +@@ -60,30 +53,32 @@ + } + + +-static int getifaces(const int sockfd, char **list, int *length) ++static int getifaces(const int sockfd, char ***list, int *length) + { + #ifdef HAVE_IFNAMEINDEX + struct if_nameindex *ifstart, *ifs; + int i = 0; ++ char **new; + +- if (!list || *length < 1) +- return 0; +- + ifs = ifstart = if_nameindex(); ++ ++ new = (char **) malloc((sizeof(ifs)/sizeof(struct if_nameindex) + 1) * sizeof(char *)); + while (ifs && ifs->if_name) { + /* just bail if there's a problem */ +- if (addname(list, &i, length, ifs->if_name) < 0) ++ if (addname(new, &i, length, ifs->if_name) < 0) + break; + ifs++; + } + + if_freenameindex(ifstart); ++ *list = new; + return i; + + #else + struct ifconf ifc; + struct ifreq ifrs[ 64 ], *ifr, *nextifr; + int ifrsize, i = 0; ++ char **new; + + if (!list || *length < 1) + return 0; +@@ -96,6 +91,7 @@ + return 0; + } + ++ new = (char **) malloc((ifc.ifc_len/sizeof(struct ifreq) + 1) * sizeof(char *)); + for ( ifr = ifc.ifc_req; ifc.ifc_len >= sizeof( struct ifreq ); + ifc.ifc_len -= ifrsize, ifr = nextifr ) { + #ifdef BSD4_4 +@@ -108,9 +104,10 @@ + nextifr = (struct ifreq *)((caddr_t)ifr + ifrsize ); + + /* just bail if there's a problem */ +- if (addname(list, &i, length, ifr->ifr_name) < 0) ++ if (addname(new, &i, length, ifr->ifr_name) < 0) + break; + } ++ *list = new; + return i; + #endif + } +@@ -122,17 +119,14 @@ + */ + char **getifacelist() + { +- char **list = (char **) malloc(sizeof(char **)*(IFACE_NUM + 1)); ++ char **list; + char **new; +- int length = IFACE_NUM, i, fd; ++ int length, i, fd; + +- if (!list) +- return NULL; +- + if ((fd = socket(PF_INET, SOCK_STREAM, 0)) < 0) + return NULL; + +- if ((i = getifaces(fd, list, &length)) == 0) { ++ if ((i = getifaces(fd, &list, &length)) == 0) { + free(list); + close(fd); + return NULL; +@@ -140,7 +134,7 @@ + close(fd); + + if ((i < length) && +- (new = (char **) realloc(list, sizeof(char **)*(i + 1)))) ++ (new = (char **) realloc(list, (i + 1) * sizeof(char *)))) + return new; + + return list; |
