make range allocation dynamic
[debian/dhcpd-pools.git] / src / dhcpd-pools.c
index 481472c..db8495b 100644 (file)
@@ -1,19 +1,18 @@
-/*
-** Copyright (C) 2006- Sami Kerola <kerolasa@iki.fi>
-**  
-** This program is free software; you can redistribute it and/or modify
+/* http://dhcpd-pools.sourceforge.net/
+** Copyright 2006- Sami Kerola <kerolasa@iki.fi>
+**
+** This program is free software: you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
+** the Free Software Foundation, either version 3 of the License, or
 ** (at your option) any later version.
-** 
+**
 ** This program is distributed in the hope that it will be useful,
 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ** GNU General Public License for more details.
-** 
+**
 ** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software 
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+** along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #ifdef HAVE_CONFIG_H
@@ -97,8 +96,6 @@ int main(int argc, char **argv)
                        break;
 
                switch (c) {
-               case 0:
-                       break;
                case 'c':
                        /* config file */
                        strncpy(config.dhcpdconf_file, optarg,
@@ -117,13 +114,17 @@ int main(int argc, char **argv)
                        /* Output sorting option */
                        sorts = strlen(optarg);
                        if (5 < sorts) {
-                               warn("main: only first 5 sort orders will be used");
+                               warnx
+                                   ("main: only first 5 sort orders will be used");
                                strncpy(config.sort, optarg, (size_t) 5);
                                sorts = 5;
                        } else {
                                strncpy(config.sort, optarg,
                                        (size_t) sorts);
                        }
+                       for (i = 0; i < sorts; i++) {
+                               field_selector(config.sort[i]);
+                       }
                        break;
                case 'r':
                        /* What ever sort in reverse order */
@@ -150,7 +151,6 @@ int main(int argc, char **argv)
                case 'v':
                        /* Print version */
                        print_version();
-                       return (EXIT_SUCCESS);
                case 'h':
                        /* Print help */
                        usage(EXIT_SUCCESS);
@@ -182,12 +182,8 @@ int main(int argc, char **argv)
        case 'c':
                output_analysis = output_csv;
                break;
-       case 's':
-               /* output_analysis = output_snmp; */
-               output_analysis = output_txt;
-               break;
        default:
-               errx(EXIT_FAILURE, "main: unknown ouput format `%c'",
+               errx(EXIT_FAILURE, "main: unknown output format `%c'",
                     config.output_format[0]);
        }
 
@@ -197,12 +193,6 @@ int main(int argc, char **argv)
                     shared_net_names + strlen(shared_net_names) + 1,
                     shared_networks);
 
-       /* FIXME: move to output.c and use FILE *outfile */
-       if ((config.output_format[0] == 'x')
-           || (config.output_format[0] == 'X')) {
-               printf("<dhcpstatus>\n");
-       };
-
        parse_leases();
        prepare_data();
        do_counting();
@@ -215,19 +205,6 @@ int main(int argc, char **argv)
        }
        free(tmp_ranges);
        output_analysis();
-       /* After fopen in ouput ioctl does like /dev/null which
-        * cause ENOTTY, and clean_up will see that without this
-        * reset. At least linux does this, and possibly some
-        * other systems. There's a report from FreeBSD 8.0 which
-        * matches quite well with the symptom. */
-       if (errno == 25)
-               errno = 0;
-
-       /* FIXME: move to output.c and use FILE *outfile */
-       if ((config.output_format[0] == 'x')
-           || (config.output_format[0] == 'X')) {
-               printf("</dhcpstatus>\n");
-       };
 
        clean_up();
        return (EXIT_SUCCESS);
@@ -236,6 +213,7 @@ int main(int argc, char **argv)
 /* Global allocations, counter resets etc */
 int prepare_memory()
 {
+       RANGES = 64;
        num_ranges = num_shared_networks = 0;
        shared_networks =
            safe_malloc(sizeof(struct shared_network_t) * SHARED_NETWORKS);
@@ -243,6 +221,7 @@ int prepare_memory()
            safe_malloc(sizeof(char) * SHARED_NETWORKS_NAMES);
 
        ranges = safe_malloc(sizeof(struct range_t) * RANGES);
+       macaddr = NULL;
 
        /* First shared network entry is all networks */
        strcpy(shared_net_names, "All networks");