Eliminate confusion between functions that return pointers and
authorMichael Brown <mcb30@etherboot.org>
Wed, 19 Jul 2006 18:11:31 +0000 (18:11 +0000)
committerMichael Brown <mcb30@etherboot.org>
Wed, 19 Jul 2006 18:11:31 +0000 (18:11 +0000)
functions that return status codes.

Zero the DHCP packet buffer *before* creating the options structures
inside it.

src/net/udp/dhcp.c

index f5a8f08..a2b3ed5 100644 (file)
@@ -231,6 +231,16 @@ static int create_dhcp_packet ( struct dhcp_session *dhcp, uint8_t msgtype,
        struct dhcphdr *dhcphdr = data;
        static const uint8_t overloading = ( DHCP_OPTION_OVERLOAD_FILE |
                                             DHCP_OPTION_OVERLOAD_SNAME );
+       int rc;
+
+       /* Initialise DHCP packet content */
+       memset ( dhcphdr, 0, max_len );
+       dhcphdr->xid = dhcp->xid;
+       dhcphdr->magic = htonl ( DHCP_MAGIC_COOKIE );
+       dhcphdr->htype = ntohs ( dhcp->netdev->ll_protocol->ll_proto );
+       dhcphdr->hlen = dhcp->netdev->ll_protocol->ll_addr_len;
+       memcpy ( dhcphdr->chaddr, dhcp->netdev->ll_addr, dhcphdr->hlen );
+       dhcphdr->op = dhcp_op[msgtype];
 
        /* Initialise DHCP packet structure */
        dhcppkt->dhcphdr = dhcphdr;
@@ -243,25 +253,17 @@ static int create_dhcp_packet ( struct dhcp_session *dhcp, uint8_t msgtype,
        init_dhcp_options ( &dhcppkt->options[OPTS_SNAME], dhcphdr->sname,
                            sizeof ( dhcphdr->sname ) );
        
-       /* Initialise DHCP packet content */
-       memset ( dhcphdr, 0, max_len );
-       dhcphdr->xid = dhcp->xid;
-       dhcphdr->magic = htonl ( DHCP_MAGIC_COOKIE );
-       dhcphdr->htype = ntohs ( dhcp->netdev->ll_protocol->ll_proto );
-       dhcphdr->hlen = dhcp->netdev->ll_protocol->ll_addr_len;
-       memcpy ( dhcphdr->chaddr, dhcp->netdev->ll_addr, dhcphdr->hlen );
-       dhcphdr->op = dhcp_op[msgtype];
-
        /* Set DHCP_OPTION_OVERLOAD option within the main options block */
-       if ( set_dhcp_option ( &dhcppkt->options[OPTS_MAIN],
-                                DHCP_OPTION_OVERLOAD, &overloading,
-                                sizeof ( overloading ) ) )
+       if ( set_dhcp_option ( &dhcppkt->options[OPTS_MAIN],
+                              DHCP_OPTION_OVERLOAD, &overloading,
+                              sizeof ( overloading ) ) == NULL )
                return -ENOSPC;
 
        /* Set DHCP_MESSAGE_TYPE option */
-       if ( ! set_dhcp_packet_option ( dhcppkt, DHCP_MESSAGE_TYPE,
-                                       &msgtype, sizeof ( msgtype ) ) )
-               return -ENOSPC;
+       if ( ( rc = set_dhcp_packet_option ( dhcppkt, DHCP_MESSAGE_TYPE,
+                                            &msgtype,
+                                            sizeof ( msgtype ) ) ) != 0 )
+               return rc;
 
        return 0;
 }