diff options
Diffstat (limited to 'networking')
-rw-r--r-- | networking/udhcp/common.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c index 9c27cd0..11b7b1f 100644 --- a/networking/udhcp/common.c +++ b/networking/udhcp/common.c @@ -371,20 +371,23 @@ static NOINLINE void attach_option( char *buffer, int length) { - struct option_set *existing, *new, **curr; - char *allocated = NULL; + struct option_set *existing; + char *allocated; - existing = udhcp_find_option(*opt_list, optflag->code); - if (!existing) { - log2("Attaching option %02x to list", optflag->code); - allocated = allocate_tempopt_if_needed(optflag, buffer, &length); + allocated = allocate_tempopt_if_needed(optflag, buffer, &length); #if ENABLE_FEATURE_UDHCP_RFC3397 - if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_DNS_STRING) { - /* reuse buffer and length for RFC1035-formatted string */ - allocated = buffer = (char *)dname_enc(NULL, 0, buffer, &length); - } + if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_DNS_STRING) { + /* reuse buffer and length for RFC1035-formatted string */ + allocated = buffer = (char *)dname_enc(NULL, 0, buffer, &length); + } #endif + + existing = udhcp_find_option(*opt_list, optflag->code); + if (!existing) { + struct option_set *new, **curr; + /* make a new option */ + log2("Attaching option %02x to list", optflag->code); new = xmalloc(sizeof(*new)); new->data = xmalloc(length + OPT_DATA); new->data[OPT_CODE] = optflag->code; @@ -405,14 +408,7 @@ static NOINLINE void attach_option( /* add it to an existing option */ log2("Attaching option %02x to existing member of list", optflag->code); - allocated = allocate_tempopt_if_needed(optflag, buffer, &length); old_len = existing->data[OPT_LEN]; -#if ENABLE_FEATURE_UDHCP_RFC3397 - if ((optflag->flags & OPTION_TYPE_MASK) == OPTION_DNS_STRING) { - /* reuse buffer and length for RFC1035-formatted string */ - allocated = buffer = (char *)dname_enc(existing->data + OPT_DATA, old_len, buffer, &length); - } -#endif if (old_len + length < 255) { /* actually 255 is ok too, but adding a space can overlow it */ |