move a couple of functions from common code (options.c) to udhcpd private code (files.c) to make udhcpc a little smaller.
This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)
No binary (build failed)
—
(log yok)
| @@ -15,8 +15,8 @@ | |
| #include "static_leases.h" | |
| #include "dhcpd.h" | |
| - | #include "files.h" |
| #include "options.h" | |
| + | #include "files.h" |
| #include "common.h" | |
| /* | |
| @@ -93,6 +93,52 @@ static int read_yn(const char *line, void *arg) | |
| } | |
| + | /* find option 'code' in opt_list */ |
| + | struct option_set *find_option(struct option_set *opt_list, char code) |
| + | { |
| + | while (opt_list && opt_list->data[OPT_CODE] < code) |
| + | opt_list = opt_list->next; |
| + | |
| + | if (opt_list && opt_list->data[OPT_CODE] == code) return opt_list; |
| + | else return NULL; |
| + | } |
| + | |
| + | |
| + | /* add an option to the opt_list */ |
| + | void attach_option(struct option_set **opt_list, struct dhcp_option *option, char *buffer, int length) |
| + | { |
| + | struct option_set *existing, *new, **curr; |
| + | |
| + | /* add it to an existing option */ |
| + | if ((existing = find_option(*opt_list, option->code))) { |
| + | DEBUG(LOG_INFO, "Attaching option %s to existing member of list", option->name); |
| + | if (option->flags & OPTION_LIST) { |
| + | if (existing->data[OPT_LEN] + length <= 255) { |
| + | existing->data = realloc(existing->data, |
| + | existing->data[OPT_LEN] + length + 2); |
| + | memcpy(existing->data + existing->data[OPT_LEN] + 2, buffer, length); |
| + | existing->data[OPT_LEN] += length; |
| + | } /* else, ignore the data, we could put this in a second option in the future */ |
| + | } /* else, ignore the new data */ |
| + | } else { |
| + | DEBUG(LOG_INFO, "Attaching option %s to list", option->name); |
| + | |
| + | /* make a new option */ |
| + | new = xmalloc(sizeof(struct option_set)); |
| + | new->data = xmalloc(length + 2); |
| + | new->data[OPT_CODE] = option->code; |
| + | new->data[OPT_LEN] = length; |
| + | memcpy(new->data + 2, buffer, length); |
| + | |
| + | curr = opt_list; |
| + | while (*curr && (*curr)->data[OPT_CODE] < option->code) |
| + | curr = &(*curr)->next; |
| + | |
| + | new->next = *curr; |
| + | *curr = new; |
| + | } |
| + | } |
| + | |
| /* read a dhcp option and add it to opt_list */ | |
| static int read_opt(const char *const_line, void *arg) | |
| { | |
| @@ -14,4 +14,7 @@ int read_config(const char *file); | |
| void write_leases(void); | |
| void read_leases(const char *file); | |
| + | struct option_set *find_option(struct option_set *opt_list, char code); |
| + | void attach_option(struct option_set **opt_list, struct dhcp_option *option, char *buffer, int length); |
| + | |
| #endif | |
| @@ -7,8 +7,8 @@ | |
| #include <string.h> | |
| #include "dhcpd.h" | |
| - | #include "files.h" |
| #include "options.h" | |
| + | #include "files.h" |
| #include "common.h" | |
| @@ -171,49 +171,3 @@ int add_simple_option(uint8_t *optionptr, uint8_t code, uint32_t data) | |
| return 0; | |
| } | |
| - | |
| - | /* find option 'code' in opt_list */ |
| - | struct option_set *find_option(struct option_set *opt_list, char code) |
| - | { |
| - | while (opt_list && opt_list->data[OPT_CODE] < code) |
| - | opt_list = opt_list->next; |
| - | |
| - | if (opt_list && opt_list->data[OPT_CODE] == code) return opt_list; |
| - | else return NULL; |
| - | } |
| - | |
| - | |
| - | /* add an option to the opt_list */ |
| - | void attach_option(struct option_set **opt_list, struct dhcp_option *option, char *buffer, int length) |
| - | { |
| - | struct option_set *existing, *new, **curr; |
| - | |
| - | /* add it to an existing option */ |
| - | if ((existing = find_option(*opt_list, option->code))) { |
| - | DEBUG(LOG_INFO, "Attaching option %s to existing member of list", option->name); |
| - | if (option->flags & OPTION_LIST) { |
| - | if (existing->data[OPT_LEN] + length <= 255) { |
| - | existing->data = realloc(existing->data, |
| - | existing->data[OPT_LEN] + length + 2); |
| - | memcpy(existing->data + existing->data[OPT_LEN] + 2, buffer, length); |
| - | existing->data[OPT_LEN] += length; |
| - | } /* else, ignore the data, we could put this in a second option in the future */ |
| - | } /* else, ignore the new data */ |
| - | } else { |
| - | DEBUG(LOG_INFO, "Attaching option %s to list", option->name); |
| - | |
| - | /* make a new option */ |
| - | new = xmalloc(sizeof(struct option_set)); |
| - | new->data = xmalloc(length + 2); |
| - | new->data[OPT_CODE] = option->code; |
| - | new->data[OPT_LEN] = length; |
| - | memcpy(new->data + 2, buffer, length); |
| - | |
| - | curr = opt_list; |
| - | while (*curr && (*curr)->data[OPT_CODE] < option->code) |
| - | curr = &(*curr)->next; |
| - | |
| - | new->next = *curr; |
| - | *curr = new; |
| - | } |
| - | } |
| @@ -34,7 +34,5 @@ uint8_t *get_option(struct dhcpMessage *packet, int code); | |
| int end_option(uint8_t *optionptr); | |
| int add_option_string(uint8_t *optionptr, uint8_t *string); | |
| int add_simple_option(uint8_t *optionptr, uint8_t code, uint32_t data); | |
| - | struct option_set *find_option(struct option_set *opt_list, char code); |
| - | void attach_option(struct option_set **opt_list, struct dhcp_option *option, char *buffer, int length); |
| #endif | |