2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-27 15:18:06 +00:00

dynamic-string: New function ds_get_preprocessed_line().

This commit adds one user.  It will be useful elsewhere in an upcoming
commit.
This commit is contained in:
Ben Pfaff
2011-03-11 11:52:12 -08:00
parent 4ffd1b437c
commit dd8101bc53
3 changed files with 35 additions and 22 deletions

View File

@@ -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)
{

View File

@@ -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 *);

View File

@@ -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);