mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-04 10:18:31 +00:00
Add test for ioctl(SIOCGIFCONF) and polyfill on BSDs
- Use nullness checks when calling weakly linked functions. - Avoid typedef for reasons described in Linux Kernel style guide. - Avoid enum in in Windows headers. Earlier in Cosmo's history all one hundred files in libc/nt/enum/ used to be enums and it resulted in gigabytes of DWARF data almost as large as everything else in the codebase combined. - Bitfields aren't our friends. They have frequent ABI breakages, inconsistent arithmetic across compilers, and different endianness between cpus. Compiler authors also haven't invested much roi into making bit fields go fast so they produce poor assembly. - Use memccpy() instead of strncpy() or snprintf() for length-bounded copying of C strings. strncpy() is a misunderstood function and snprintf() is awesome but memccpy() deserves more love.
This commit is contained in:
parent
86ab24ce56
commit
5144c22189
41 changed files with 502 additions and 476 deletions
|
@ -59,8 +59,8 @@ static uint32_t *GetUnixIps(void) {
|
|||
|
||||
static textwindows uint32_t *GetWindowsIps(void) {
|
||||
uint32_t i, z, n, rc, *a;
|
||||
NtIpAdapterUnicastAddress *u;
|
||||
NtIpAdapterAddresses *p, *ifaces;
|
||||
struct NtIpAdapterUnicastAddress *u;
|
||||
struct NtIpAdapterAddresses *p, *ifaces;
|
||||
i = 0;
|
||||
z = 15000;
|
||||
do {
|
||||
|
|
|
@ -53,45 +53,8 @@ struct sockaddr_un_bsd {
|
|||
char sun_path[108];
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------------
|
||||
* ioctl SIOCGIFCONF & others:
|
||||
*
|
||||
* BSD has a different structure. All the ioctl will adjust to use
|
||||
* the ifreq with the ifreq_bsd
|
||||
*/
|
||||
struct ifreq_bsd {
|
||||
union {
|
||||
char ifrn_name[IFNAMSIZ];
|
||||
} ifr_ifrn;
|
||||
|
||||
union {
|
||||
/* Right now we only list the structures used by the few ioctl that are
|
||||
* supported by Cosmopolitan. Add your own definition here if you need
|
||||
* a particular ioctl that requires polyfill for BSD
|
||||
*/
|
||||
struct sockaddr_bsd ifru_addr;
|
||||
struct sockaddr_bsd ifru_netmask;
|
||||
struct sockaddr_bsd ifru_dstaddr;
|
||||
struct sockaddr_bsd ifru_broadaddr;
|
||||
short ifru_flags;
|
||||
char ifru_pad[16]; /* used as padding */
|
||||
} ifr_ifru;
|
||||
};
|
||||
|
||||
#pragma pack(4)
|
||||
struct ifconf_bsd {
|
||||
uint32_t ifc_len; /* size of buffer */
|
||||
union {
|
||||
char *ifcu_buf;
|
||||
struct ifreq_bsd *ifcu_req;
|
||||
} ifc_ifcu;
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
struct SockFd {
|
||||
int family;
|
||||
int type;
|
||||
|
|
|
@ -102,11 +102,11 @@ struct ifconf {
|
|||
#define IFHWADDRLEN 6
|
||||
#define IF_NAMESIZE 16
|
||||
#define IFNAMSIZ IF_NAMESIZE
|
||||
|
||||
struct ifreq {
|
||||
union {
|
||||
char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */
|
||||
} ifr_ifrn;
|
||||
|
||||
union {
|
||||
struct sockaddr ifru_addr; /* SIOCGIFADDR */
|
||||
struct sockaddr ifru_dstaddr; /* SIOCGIFDSTADDR */
|
||||
|
@ -128,8 +128,6 @@ struct ifreq {
|
|||
#define _IOT_ifreq_short _IOT(_IOTS(char), IFNAMSIZ, _IOTS(short), 1, 0, 0)
|
||||
#define _IOT_ifreq_int _IOT(_IOTS(char), IFNAMSIZ, _IOTS(int), 1, 0, 0)
|
||||
|
||||
#define IFF_UP (1 << 0)
|
||||
|
||||
const char *inet_ntop(int, const void *, char *, uint32_t);
|
||||
int inet_aton(const char *, struct in_addr *);
|
||||
int inet_pton(int, const char *, void *);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue