return ret;
}
+/* Simple strdup wrapper */
+char *safe_strdup(const char *str)
+{
+ char *ret = strdup(str);
+
+ if (!ret && str)
+ err(EXIT_FAILURE, "cannot duplicate string");
+ return ret;
+}
+
void flip_ranges(struct range_t *ranges, struct range_t *tmp_ranges)
{
unsigned int i = num_ranges - 1, j;
void clean_up(void)
{
int ret;
+
if (errno) {
warn("clean_up: errno (%d) set but not checked in correct place.\nif this is repeatable send strace output as a bug report", errno);
}
if (errno || ret) {
warn("clean_up: stderr");
}
+
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);
}
"This is free software: you are free to change and redistribute it.\n");
fprintf(stdout,
"There is NO WARRANTY, to the extent permitted by law.\n");
+ exit(EXIT_SUCCESS);
}
void usage(int status)