[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCHv3 2/2] bridge helper: support conf dirs
From: |
Blue Swirl |
Subject: |
Re: [Qemu-devel] [PATCHv3 2/2] bridge helper: support conf dirs |
Date: |
Sat, 9 Mar 2013 09:50:57 +0000 |
On Thu, Mar 7, 2013 at 6:32 AM, Doug Goldstein <address@hidden> wrote:
> Allow the bridge helper to take a config directory rather than having to
> specify every file in the directory manually via an include statement.
>
> Signed-off-by: Doug Goldstein <address@hidden>
> CC: Anthony Liguori <address@hidden>
> CC: Richa Marwaha <address@hidden>
> CC: Corey Bryant <address@hidden>
> TO: address@hidden
> ---
> qemu-bridge-helper.c | 55
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 55 insertions(+)
>
> diff --git a/qemu-bridge-helper.c b/qemu-bridge-helper.c
> index 95486e7..cebfcf8 100644
> --- a/qemu-bridge-helper.c
> +++ b/qemu-bridge-helper.c
> @@ -16,6 +16,7 @@
> #include "config-host.h"
>
> #include <stdio.h>
> +#include <dirent.h>
> #include <errno.h>
> #include <fcntl.h>
> #include <unistd.h>
> @@ -70,12 +71,28 @@ static void usage(void)
> "Usage: qemu-bridge-helper [--use-vnet] --br=bridge
> --fd=unixfd\n");
> }
>
> +static int filter_bridge_conf_dir(const struct dirent *entry)
> +{
> + ssize_t len = strlen(entry->d_name);
> +
> + /* We only want files ending in .conf */
> + if (len > 5 &&
> + strcmp(".conf", &entry->d_name[len-5]) == 0) {
> + return 1;
> + }
> +
> + return 0;
> +}
> +
> static int parse_acl_file(const char *filename, ACLList *acl_list)
> {
> FILE *f;
> char line[4096];
> int ret = -EINVAL;
> ACLRule *acl_rule;
> + struct dirent **include_list = NULL;
> + int i, include_count = 0;
> + char *conf_file;
>
> f = fopen(filename, "r");
> if (f == NULL) {
> @@ -137,6 +154,37 @@ static int parse_acl_file(const char *filename, ACLList
> *acl_list)
> snprintf(acl_rule->iface, IFNAMSIZ, "%s", arg);
> }
> QSIMPLEQ_INSERT_TAIL(acl_list, acl_rule, entry);
> + } else if (strcmp(cmd, "includedir") == 0) {
> + include_count = scandir(arg, &include_list,
> + filter_bridge_conf_dir, alphasort);
> + if (include_count < 0) {
> + ret = -errno;
> + fprintf(stderr, "Unable to retrieve conf files from '%s':
> %s\n",
> + arg, strerror(errno));
> + goto failure;
> + }
> +
> + for (i = 0; i < include_count; i++) {
> + if (asprintf(&conf_file, "%s/%s", arg,
Please use g_strdup_printf() and g_free() instead. This will make the
check go away too since it will not fail.
> + include_list[i]->d_name) < 0) {
> + fprintf(stderr, "Failed to allocate memory for "
> + "file path: %s/%s\n",
> + arg, include_list[i]->d_name);
> + ret = -ENOMEM;
> + goto failure;
> + }
> +
> + /* ignore errors like 'include' cmd */
> + parse_acl_file(conf_file, acl_list);
> +
> + free(conf_file);
> + free(include_list[i]);
> + include_list[i] = NULL;
> + }
> + free(include_list);
> + include_list = NULL;
> + include_count = 0;
> +
> } else if (strcmp(cmd, "include") == 0) {
> /* ignore errors */
> parse_acl_file(arg, acl_list);
> @@ -152,6 +200,13 @@ static int parse_acl_file(const char *filename, ACLList
> *acl_list)
> failure:
> fclose(f);
>
> + if (include_list) {
This check is somewhat redundant since the for loop below will also do
nothing for cases where include_count is either zero (freed) or < 0
(failure).
> + for (i = 0; i < include_count; i++) {
> + free(include_list[i]);
> + }
> + free(include_list);
> + }
> +
> return ret;
> }
>
> --
> 1.7.12.4
>
>
- [Qemu-devel] [PATCHv2 1/2] bridge helper: unified error cleanup for parse_acl_file, (continued)
- [Qemu-devel] [PATCHv2 2/2] bridge helper: support conf dirs, Doug Goldstein, 2013/03/02
- [Qemu-devel] [PATCHv3 0/2] bridge helper: includedir conf arg, Doug Goldstein, 2013/03/07
- [Qemu-devel] [PATCHv3 1/2] bridge helper: unified error cleanup for parse_acl_file, Doug Goldstein, 2013/03/07
- [Qemu-devel] [PATCHv3 2/2] bridge helper: support conf dirs, Doug Goldstein, 2013/03/07
- Re: [Qemu-devel] [PATCHv3 2/2] bridge helper: support conf dirs,
Blue Swirl <=
- Re: [Qemu-devel] [PATCHv3 0/2] bridge helper: includedir conf arg, Stefan Hajnoczi, 2013/03/07
- Re: [Qemu-devel] [PATCHv3 0/2] bridge helper: includedir conf arg, Corey Bryant, 2013/03/07
- [Qemu-devel] [PATCH v3 0/2] bridge helper: includedir conf arg, Doug Goldstein, 2013/03/18