diff options
Diffstat (limited to 'toolchain/uClibc')
| -rw-r--r-- | toolchain/uClibc/patches/170-enable-getifaddrs.patch | 162 | 
1 files changed, 162 insertions, 0 deletions
| diff --git a/toolchain/uClibc/patches/170-enable-getifaddrs.patch b/toolchain/uClibc/patches/170-enable-getifaddrs.patch new file mode 100644 index 000000000..da393feba --- /dev/null +++ b/toolchain/uClibc/patches/170-enable-getifaddrs.patch @@ -0,0 +1,162 @@ +Index: uclibc/libc/inet/ifaddrs.c +=================================================================== +--- uclibc.orig/libc/inet/ifaddrs.c ++++ uclibc/libc/inet/ifaddrs.c +@@ -38,6 +38,7 @@ + #include <unistd.h> +  + #include "netlinkaccess.h" ++#include "ifaddrs.h" +  + libc_hidden_proto(socket) + libc_hidden_proto(close) +@@ -57,7 +58,6 @@ libc_hidden_proto(abort) +  +  + #if __ASSUME_NETLINK_SUPPORT +-#if 0 /* unused code */ + /* struct to hold the data for one ifaddrs entry, so we can allocate +    everything at once.  */ + struct ifaddrs_storage +@@ -74,8 +74,6 @@ struct ifaddrs_storage +   } addr, netmask, broadaddr; +   char name[IF_NAMESIZE + 1]; + }; +-#endif /* unused code */ +- +  + void + __netlink_free_handle (struct netlink_handle *h) +@@ -323,8 +321,6 @@ __netlink_open (struct netlink_handle *h +   return 0; + } +  +- +-#if 0 /* unused code */ + /* We know the number of RTM_NEWLINK entries, so we reserve the first +    # of entries for this type. All RTM_NEWADDR entries have an index +    pointer to the RTM_NEWLINK entry.  To find the entry, create +@@ -562,7 +558,7 @@ getifaddrs (struct ifaddrs **ifap) + 		      if ((rta_payload + 1) <= sizeof (ifas[ifa_index].name)) + 			{ + 			  ifas[ifa_index].ifa.ifa_name = ifas[ifa_index].name; +-			  *(char *) __mempcpy (ifas[ifa_index].name, rta_data, ++			  *(char *) mempcpy (ifas[ifa_index].name, rta_data, + 					       rta_payload) = '\0'; + 			} + 		      break; +@@ -761,7 +757,7 @@ getifaddrs (struct ifaddrs **ifap) + 		      if (rta_payload + 1 <= sizeof (ifas[ifa_index].name)) + 			{ + 			  ifas[ifa_index].ifa.ifa_name = ifas[ifa_index].name; +-			  *(char *) __mempcpy (ifas[ifa_index].name, rta_data, ++			  *(char *) mempcpy (ifas[ifa_index].name, rta_data, + 					       rta_payload) = '\0'; + 			} + 		      else +@@ -872,6 +868,4 @@ freeifaddrs (struct ifaddrs *ifa) + } + #endif +  +-#endif /* unused code */ +- + #endif /* __ASSUME_NETLINK_SUPPORT */ +Index: uclibc/libc/inet/netlinkaccess.h +=================================================================== +--- uclibc.orig/libc/inet/netlinkaccess.h ++++ uclibc/libc/inet/netlinkaccess.h +@@ -61,14 +61,11 @@ struct netlink_handle + }; +  +  +-#if 0 /* unused code */ + #if __ASSUME_NETLINK_SUPPORT == 0 + extern int __no_netlink_support attribute_hidden; + #else + # define __no_netlink_support 0 + #endif +-#endif /* unused code */ +- +  + extern int __netlink_open (struct netlink_handle *h) attribute_hidden; + extern void __netlink_close (struct netlink_handle *h) attribute_hidden; +Index: uclibc/include/ifaddrs.h +=================================================================== +--- /dev/null ++++ uclibc/include/ifaddrs.h +@@ -0,0 +1,74 @@ ++/* ifaddrs.h -- declarations for getting network interface addresses ++   Copyright (C) 2002 Free Software Foundation, Inc. ++   This file is part of the GNU C Library. ++ ++   The GNU C Library is free software; you can redistribute it and/or ++   modify it under the terms of the GNU Lesser General Public ++   License as published by the Free Software Foundation; either ++   version 2.1 of the License, or (at your option) any later version. ++ ++   The GNU C Library is distributed in the hope that it will be useful, ++   but WITHOUT ANY WARRANTY; without even the implied warranty of ++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU ++   Lesser General Public License for more details. ++ ++   You should have received a copy of the GNU Lesser General Public ++   License along with the GNU C Library; if not, write to the Free ++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++   02111-1307 USA.  */ ++ ++#ifndef _IFADDRS_H ++#define _IFADDRS_H	1 ++ ++#include <features.h> ++#include <sys/socket.h> ++ ++__BEGIN_DECLS ++ ++/* The `getifaddrs' function generates a linked list of these structures. ++   Each element of the list describes one network interface.  */ ++struct ifaddrs ++{ ++  struct ifaddrs *ifa_next;	/* Pointer to the next structure.  */ ++ ++  char *ifa_name;		/* Name of this network interface.  */ ++  unsigned int ifa_flags;	/* Flags as from SIOCGIFFLAGS ioctl.  */ ++ ++  struct sockaddr *ifa_addr;	/* Network address of this interface.  */ ++  struct sockaddr *ifa_netmask; /* Netmask of this interface.  */ ++  union ++  { ++    /* At most one of the following two is valid.  If the IFF_BROADCAST ++       bit is set in `ifa_flags', then `ifa_broadaddr' is valid.  If the ++       IFF_POINTOPOINT bit is set, then `ifa_dstaddr' is valid. ++       It is never the case that both these bits are set at once.  */ ++    struct sockaddr *ifu_broadaddr; /* Broadcast address of this interface. */ ++    struct sockaddr *ifu_dstaddr; /* Point-to-point destination address.  */ ++  } ifa_ifu; ++  /* These very same macros are defined by <net/if.h> for `struct ifaddr'. ++     So if they are defined already, the existing definitions will be fine.  */ ++# ifndef ifa_broadaddr ++#  define ifa_broadaddr	ifa_ifu.ifu_broadaddr ++# endif ++# ifndef ifa_dstaddr ++#  define ifa_dstaddr	ifa_ifu.ifu_dstaddr ++# endif ++ ++  void *ifa_data;		/* Address-specific data (may be unused).  */ ++}; ++ ++ ++/* Create a linked list of `struct ifaddrs' structures, one for each ++   network interface on the host machine.  If successful, store the ++   list in *IFAP and return 0.  On errors, return -1 and set `errno'. ++ ++   The storage returned in *IFAP is allocated dynamically and can ++   only be properly freed by passing it to `freeifaddrs'.  */ ++extern int getifaddrs (struct ifaddrs **__ifap) __THROW; ++ ++/* Reclaim the storage allocated by a previous `getifaddrs' call.  */ ++extern void freeifaddrs (struct ifaddrs *__ifa)  __THROW; ++ ++__END_DECLS ++ ++#endif /* ifaddrs.h */ + | 
