change iptoaddr, im not sure if it was correct - sdhcp - simple dhcp client
 (HTM) git clone git://git.codemadness.org/sdhcp
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 98a77a0f7ccea2df3ca9182ff82d21e6b33193b1
 (DIR) parent 970e3fa9791b1c223a0ae2f323680dee8372b838
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Fri, 25 Apr 2014 22:54:04 +0200
       
       change iptoaddr, im not sure if it was correct
       
       Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
       
       Diffstat:
         M sdhcp.c                             |      32 ++++++++++++++++---------------
       
       1 file changed, 17 insertions(+), 15 deletions(-)
       ---
 (DIR) diff --git a/sdhcp.c b/sdhcp.c
       @@ -107,24 +107,25 @@ hnput(unsigned char *dst, unsigned long long src, size_t n)
                        dst[i] = (src >> (n * 8)) & 0xff;
        }
        
       -static struct sockaddr
       -iptoaddr(unsigned char ip[4], int port)
       +static struct sockaddr *
       +iptoaddr(struct sockaddr *ifaddr, unsigned char ip[4], int port)
        {
       -        struct sockaddr_in ifaddr;
       +        struct sockaddr_in *in = (struct sockaddr_in *)ifaddr;
        
       -        ifaddr.sin_family = AF_INET;
       -        ifaddr.sin_port = htons(port);
       -        memcpy(&ifaddr.sin_addr, ip, sizeof ifaddr.sin_addr);
       -        return *(struct sockaddr*)&ifaddr;
       +        in->sin_family = AF_INET;
       +        in->sin_port = htons(port);
       +        memcpy(&(in->sin_addr), ip, sizeof in->sin_addr);
       +        return ifaddr;
        }
        
        /* sendto UDP wrapper */
        static ssize_t
        udpsend(unsigned char ip[4], int fd, void *data, size_t n) {
       -        struct sockaddr addr = iptoaddr(ip, 67);
       +        struct sockaddr addr;
                socklen_t addrlen = sizeof addr;
                ssize_t sent;
        
       +        iptoaddr(&addr, ip, 67); /* bootp server */
                if((sent = sendto(fd, data, n, 0, &addr, addrlen)) == -1)
                        eprintf("sendto:");
                return sent;
       @@ -133,10 +134,11 @@ udpsend(unsigned char ip[4], int fd, void *data, size_t n) {
        /* recvfrom UDP wrapper */
        static ssize_t
        udprecv(unsigned char ip[4], int fd, void *data, size_t n) {
       -        struct sockaddr addr = iptoaddr(ip, 68);
       +        struct sockaddr addr;
                socklen_t addrlen = sizeof addr;
                ssize_t r;
        
       +        iptoaddr(&addr, ip, 68); /* bootp client */
                if((r = recvfrom(fd, data, n, 0, &addr, &addrlen)) == -1)
                        eprintf("recvfrom:");
                return r;
       @@ -153,19 +155,19 @@ setip(unsigned char ip[4], unsigned char mask[4], unsigned char gateway[4])
                memset(&rtreq, 0, sizeof(rtreq));
        
                strlcpy(ifreq.ifr_name, ifname, IF_NAMESIZE);
       -        ifreq.ifr_addr = iptoaddr(ip, 0);
       +        iptoaddr(&(ifreq.ifr_addr), ip, 0);
                if((fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) == -1)
                        eprintf("can't set ip, socket:");
                ioctl(fd, SIOCSIFADDR, &ifreq);
       -        ifreq.ifr_netmask = iptoaddr(mask, 0);
       +        iptoaddr(&(ifreq.ifr_netmask), mask, 0);
                ioctl(fd, SIOCSIFNETMASK, &ifreq);
                ifreq.ifr_flags = IFF_UP | IFF_RUNNING | IFF_BROADCAST | IFF_MULTICAST;
                ioctl(fd, SIOCSIFFLAGS, &ifreq);
                /* gw */
                rtreq.rt_flags = (RTF_UP | RTF_GATEWAY);
       -        rtreq.rt_gateway = iptoaddr(gateway, 0);
       -        rtreq.rt_genmask = iptoaddr(IP(0, 0, 0, 0), 0);
       -        rtreq.rt_dst = iptoaddr(IP(0, 0, 0, 0), 0);
       +        iptoaddr(&(rtreq.rt_gateway), gateway, 0);
       +        iptoaddr(&(rtreq.rt_genmask), IP(0, 0, 0, 0), 0);
       +        iptoaddr(&(rtreq.rt_dst), IP(0, 0, 0, 0), 0);
                ioctl(fd, SIOCADDRT, &rtreq);
        
                close(fd);
       @@ -455,7 +457,7 @@ main(int argc, char *argv[])
                ioctl(sock, SIOCGIFINDEX, &ifreq);
                if(setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, &ifreq, sizeof ifreq) == -1)
                        eprintf("setsockopt:");
       -        addr = iptoaddr(IP(255, 255, 255, 255), 68);
       +        iptoaddr(&addr, IP(255, 255, 255, 255), 68);
                if(bind(sock, (void*)&addr, sizeof addr) != 0)
                        eprintf("bind:");
                ioctl(sock, SIOCGIFHWADDR, &ifreq);