shared network names to be dynamically allocated
authorSami Kerola <kerolasa@iki.fi>
Mon, 11 Apr 2011 18:52:40 +0000 (20:52 +0200)
committerSami Kerola <kerolasa@iki.fi>
Mon, 11 Apr 2011 18:52:40 +0000 (20:52 +0200)
This patch is a step a head to make data all structures
completely dynamic. After this the next obvious thing to do is to
make shared networks struct a linked list instead of a list.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>

src/defaults.h
src/dhcpd-pools.c
src/dhcpd-pools.h
src/getdata.c
src/other.c

index 1c81bfe..8cb69e0 100644 (file)
@@ -21,9 +21,6 @@
 /* Maximum line length in dhcpd.conf and dhcpd.leases */
 static const int MAXLEN = 1024;
 
 /* Maximum line length in dhcpd.conf and dhcpd.leases */
 static const int MAXLEN = 1024;
 
-/* Total number of characters in all shared network names */
-static const unsigned int SHARED_NETWORKS_NAMES = 65536;
-
 /* Maximum number of shared networks */
 static const unsigned int SHARED_NETWORKS = 8192;
 
 /* Maximum number of shared networks */
 static const unsigned int SHARED_NETWORKS = 8192;
 
index db8495b..abcb8ca 100644 (file)
@@ -189,9 +189,7 @@ int main(int argc, char **argv)
 
        /* Do the job */
        prepare_memory();
 
        /* Do the job */
        prepare_memory();
-       parse_config(true, config.dhcpdconf_file, shared_net_names,
-                    shared_net_names + strlen(shared_net_names) + 1,
-                    shared_networks);
+       parse_config(true, config.dhcpdconf_file, shared_networks);
 
        parse_leases();
        prepare_data();
 
        parse_leases();
        prepare_data();
@@ -217,13 +215,12 @@ int prepare_memory()
        num_ranges = num_shared_networks = 0;
        shared_networks =
            safe_malloc(sizeof(struct shared_network_t) * SHARED_NETWORKS);
        num_ranges = num_shared_networks = 0;
        shared_networks =
            safe_malloc(sizeof(struct shared_network_t) * SHARED_NETWORKS);
-       shared_net_names =
-           safe_malloc(sizeof(char) * SHARED_NETWORKS_NAMES);
 
        ranges = safe_malloc(sizeof(struct range_t) * RANGES);
        macaddr = NULL;
 
        /* First shared network entry is all networks */
 
        ranges = safe_malloc(sizeof(struct range_t) * RANGES);
        macaddr = NULL;
 
        /* First shared network entry is all networks */
-       strcpy(shared_net_names, "All networks");
+       shared_networks->name = safe_strdup("All networks");
+
        return 0;
 }
        return 0;
 }
index e3835ad..fcf75b2 100644 (file)
@@ -107,7 +107,6 @@ static int const output_limit_bit_3 = 4;
 unsigned int fullhtml;
 
 struct shared_network_t *shared_networks;
 unsigned int fullhtml;
 
 struct shared_network_t *shared_networks;
-char *shared_net_names;
 unsigned int num_shared_networks;
 
 struct range_t *ranges;
 unsigned int num_shared_networks;
 
 struct range_t *ranges;
@@ -127,8 +126,8 @@ struct macaddr_t *macaddr;
 /* Function prototypes */
 int prepare_memory(void);
 int parse_leases(void);
 /* Function prototypes */
 int prepare_memory(void);
 int parse_leases(void);
-char *parse_config(int, char *, char *, char *, struct shared_network_t *)
-    __attribute__ ((nonnull(2, 3, 4)));
+void parse_config(int, char *, struct shared_network_t *)
+    __attribute__ ((nonnull(2, 3)));
 int nth_field(int n, char *dest, const char *src)
     __attribute__ ((nonnull(2, 3)))
 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
 int nth_field(int n, char *dest, const char *src)
     __attribute__ ((nonnull(2, 3)))
 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
index 1334855..5456b65 100644 (file)
@@ -212,10 +212,8 @@ int is_interesting_config_clause(char *s)
 }
 
 /* FIXME: This spagetti monster function need to be rewrote at least ones. */
 }
 
 /* FIXME: This spagetti monster function need to be rewrote at least ones. */
-char *parse_config(int is_include, char *config_file,
-                  char *current_shared_name,
-                  char *next_free_shared_name,
-                  struct shared_network_t *shared_p)
+void parse_config(int is_include, char *config_file,
+                 struct shared_network_t *shared_p)
 {
        FILE *dhcpd_config;
        int i = 0, newclause = true, argument = false, comment =
 {
        FILE *dhcpd_config;
        int i = 0, newclause = true, argument = false, comment =
@@ -225,14 +223,11 @@ char *parse_config(int is_include, char *config_file,
        struct in_addr inp;
        struct range_t *range_p;
 
        struct in_addr inp;
        struct range_t *range_p;
 
-       char *last_shared_name;
-       last_shared_name = SHARED_NETWORKS_NAMES + shared_net_names;
-
        word = safe_malloc(sizeof(char) * MAXLEN);
 
        if (is_include) {
                /* Default place holder for ranges "All networks". */
        word = safe_malloc(sizeof(char) * MAXLEN);
 
        if (is_include) {
                /* Default place holder for ranges "All networks". */
-               shared_p->name = current_shared_name;
+               shared_p->name = shared_networks->name;
        }
 
        /* Open configuration file */
        }
 
        /* Open configuration file */
@@ -319,8 +314,6 @@ char *parse_config(int is_include, char *config_file,
                                braces--;
                                /* End of shared-network */
                                if (braces_shared == braces) {
                                braces--;
                                /* End of shared-network */
                                if (braces_shared == braces) {
-                                       current_shared_name =
-                                           shared_net_names;
                                        /* FIXME: Using 1000 is lame, but
                                         * works. */
                                        braces_shared = 1000;
                                        /* FIXME: Using 1000 is lame, but
                                         * works. */
                                        braces_shared = 1000;
@@ -410,30 +403,14 @@ char *parse_config(int is_include, char *config_file,
                                break;
                        case 1:
                                /* printf ("shared-network named: %s\n", word); */
                                break;
                        case 1:
                                /* printf ("shared-network named: %s\n", word); */
-                               strcpy(next_free_shared_name, word);
+                               num_shared_networks++;
                                shared_p =
                                    shared_networks + num_shared_networks;
                                shared_p =
                                    shared_networks + num_shared_networks;
-                               num_shared_networks++;
-                               shared_p++;
-                               shared_p->name = next_free_shared_name;
+                               shared_p->name = safe_strdup(word);
                                shared_p->available = 0;
                                shared_p->used = 0;
                                shared_p->touched = 0;
                                shared_p->backups = 0;
                                shared_p->available = 0;
                                shared_p->used = 0;
                                shared_p->touched = 0;
                                shared_p->backups = 0;
-                               /* Temporary abuse of argument
-                                * variable */
-                               argument =
-                                   strlen(next_free_shared_name) + 1;
-                               if (next_free_shared_name + argument <
-                                   last_shared_name) {
-                                       next_free_shared_name += argument;
-                               } else {
-                                       /* FIXME: make this go
-                                        * away by reallocationg
-                                        * more space. */
-                                       errx(EXIT_FAILURE,
-                                            "parse_config: increase default.h SHARED_NETWORKS_NAMES and recompile");
-                               }
                                if (SHARED_NETWORKS <
                                    num_shared_networks + 2) {
                                        /* FIXME: make this
                                if (SHARED_NETWORKS <
                                    num_shared_networks + 2) {
                                        /* FIXME: make this
@@ -448,11 +425,7 @@ char *parse_config(int is_include, char *config_file,
                        case 4:
                                /* printf ("include file: %s\n", word); */
                                argument = 0;
                        case 4:
                                /* printf ("include file: %s\n", word); */
                                argument = 0;
-                               next_free_shared_name =
-                                   parse_config(false, word,
-                                                current_shared_name,
-                                                next_free_shared_name,
-                                                shared_p);
+                               parse_config(false, word, shared_p);
                                newclause = true;
                                break;
                        case 0:
                                newclause = true;
                                break;
                        case 0:
@@ -467,5 +440,5 @@ char *parse_config(int is_include, char *config_file,
        }
        free(word);
        fclose(dhcpd_config);
        }
        free(word);
        fclose(dhcpd_config);
-       return next_free_shared_name;
+       return;
 }
 }
index 21a763a..4a9730b 100644 (file)
@@ -85,25 +85,22 @@ void flip_ranges(struct range_t *ranges, struct range_t *tmp_ranges)
 /* Free memory, flush buffers etc */
 void clean_up(void)
 {
 /* Free memory, flush buffers etc */
 void clean_up(void)
 {
-       int ret;
+       unsigned int i;
 
        /* Just in case there something in buffers */
 
        /* Just in case there something in buffers */
-       ret = fflush(stdout);
-       if (errno || ret) {
-               warn("clean_up: stdout");
+       if (fflush(NULL)) {
+               warn("clean_up: fflush");
        }
        }
-       ret = fflush(stderr);
-       if (errno || ret) {
-               warn("clean_up: stderr");
+       num_shared_networks++;
+       for (i = 0; i < num_shared_networks; i++) {
+               free((shared_networks + i)->name);
        }
        }
-
        free(config.dhcpdconf_file);
        free(config.dhcpdlease_file);
        free(config.output_file);
        free(ranges);
        free(leases);
        free(touches);
        free(config.dhcpdconf_file);
        free(config.dhcpdlease_file);
        free(config.output_file);
        free(ranges);
        free(leases);
        free(touches);
-       free(shared_net_names);
        free(shared_networks);
 }
 
        free(shared_networks);
 }