[ovs-dev] [ovs-ofctl 05/10] ofp-parse: Factor out parse_ofp_add_flow_file() into new function.

Ethan Jackson ethan at nicira.com
Wed Mar 16 01:37:12 UTC 2011


>ofp-parse: Factor out parse_ofp_add_flow_file() into new function.

This subject line doesn't make sense to me.  Shouldn't it read:
"Factor out ds_get_preprocessed_line() into new function"?

Doesn't really matter, you can merge this patch when ready.
Ethan


On Fri, Mar 11, 2011 at 1:20 PM, Ben Pfaff <blp at nicira.com> wrote:
> The new function ds_get_preprocessed_line() will be useful elsewhere in
> an upcoming commit.
> ---
>  lib/dynamic-string.c |   28 +++++++++++++++++++++++++++-
>  lib/dynamic-string.h |    3 ++-
>  lib/ofp-parse.c      |   26 ++++++--------------------
>  3 files changed, 35 insertions(+), 22 deletions(-)
>
> diff --git a/lib/dynamic-string.c b/lib/dynamic-string.c
> index 3af7fc9..dbb33a3 100644
> --- a/lib/dynamic-string.c
> +++ b/lib/dynamic-string.c
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2008, 2009, 2010 Nicira Networks.
> + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -207,6 +207,32 @@ ds_get_line(struct ds *ds, FILE *file)
>     }
>  }
>
> +/* Reads a line from 'file' into 'ds', clearing anything initially in 'ds'.
> + * Deletes comments introduced by "#" and skips lines that contains only white
> + * space (after deleting comments).
> + *
> + * Returns 0 if successful, EOF if no non-blank line was found. */
> +int
> +ds_get_preprocessed_line(struct ds *ds, FILE *file)
> +{
> +    while (!ds_get_line(ds, file)) {
> +        char *line = ds_cstr(ds);
> +        char *comment;
> +
> +        /* Delete comments. */
> +        comment = strchr(line, '#');
> +        if (comment) {
> +            *comment = '\0';
> +        }
> +
> +        /* Return successfully unless the line is all spaces. */
> +        if (line[strspn(line, " \t\n")] != '\0') {
> +            return 0;
> +        }
> +    }
> +    return EOF;
> +}
> +
>  char *
>  ds_cstr(struct ds *ds)
>  {
> diff --git a/lib/dynamic-string.h b/lib/dynamic-string.h
> index db033c9..2961a01 100644
> --- a/lib/dynamic-string.h
> +++ b/lib/dynamic-string.h
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2008, 2009, 2010 Nicira Networks.
> + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -54,6 +54,7 @@ void ds_put_strftime(struct ds *, const char *, const struct tm *)
>  void ds_put_hex_dump(struct ds *ds, const void *buf_, size_t size,
>                      uintptr_t ofs, bool ascii);
>  int ds_get_line(struct ds *, FILE *);
> +int ds_get_preprocessed_line(struct ds *, FILE *);
>
>  char *ds_cstr(struct ds *);
>  const char *ds_cstr_ro(const struct ds *);
> diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c
> index 73c3ebc..f1a4cb4 100644
> --- a/lib/ofp-parse.c
> +++ b/lib/ofp-parse.c
> @@ -874,27 +874,13 @@ bool
>  parse_ofp_add_flow_file(struct list *packets, enum nx_flow_format *cur,
>                         FILE *stream)
>  {
> -    struct ds s = DS_EMPTY_INITIALIZER;
> -    bool ok = false;
> +    struct ds s;
> +    bool ok;
>
> -    while (!ds_get_line(&s, stream)) {
> -        char *line = ds_cstr(&s);
> -        char *comment;
> -
> -        /* Delete comments. */
> -        comment = strchr(line, '#');
> -        if (comment) {
> -            *comment = '\0';
> -        }
> -
> -        /* Drop empty lines. */
> -        if (line[strspn(line, " \t\n")] == '\0') {
> -            continue;
> -        }
> -
> -        parse_ofp_flow_mod_str(packets, cur, line, OFPFC_ADD);
> -        ok = true;
> -        break;
> +    ds_init(&s);
> +    ok = ds_get_preprocessed_line(&s, stream) == 0;
> +    if (ok) {
> +        parse_ofp_flow_mod_str(packets, cur, ds_cstr(&s), OFPFC_ADD);
>     }
>     ds_destroy(&s);
>
> --
> 1.7.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>



More information about the dev mailing list