On Mon, Jan 23, 2012 at 01:13:03PM -0800, Ethan Jackson wrote: > In meta-flow.c > > In two places you mention ofp_mkerr() which no longer exists.
Fixed. (It existed when I wrote the code.) > In mf_parse_subfield__() you modify 's' even if there's an error which > would be fine if the comments didn't say that' impossible. Good point, here's a fixed version: /* Parses a subfield from the beginning of '*sp' into 'sf'. If successful, * returns NULL and advances '*sp' to the first byte following the parsed * string. On failure, returns a malloc()'d error message, does not modify * '*sp', and does not properly initialize 'sf'. * * The syntax parsed from '*sp' takes the form "header[start..end]" where * 'header' is the name of an NXM field and 'start' and 'end' are (inclusive) * bit indexes. "..end" may be omitted to indicate a single bit. "start..end" * may both be omitted (the [] are still required) to indicate an entire * field. */ char * mf_parse_subfield__(struct mf_subfield *sf, const char **sp) { const struct mf_field *field; const char *name; int start, end; const char *s; int name_len; bool wild; s = *sp; name = s; name_len = strcspn(s, "["); if (s[name_len] != '[') { return xasprintf("%s: missing [ looking for field name", *sp); } field = mf_parse_subfield_name(name, name_len, &wild); if (!field) { return xasprintf("%s: unknown field `%.*s'", *sp, name_len, s); } s += name_len; if (sscanf(s, "[%d..%d]", &start, &end) == 2) { /* Nothing to do. */ } else if (sscanf(s, "[%d]", &start) == 1) { end = start; } else if (!strncmp(s, "[]", 2)) { start = 0; end = field->n_bits - 1; } else { return xasprintf("%s: syntax error expecting [] or [<bit>] or " "[<start>..<end>]", *sp); } s = strchr(s, ']') + 1; if (start > end) { return xasprintf("%s: starting bit %d is after ending bit %d", *sp, start, end); } else if (start >= field->n_bits) { return xasprintf("%s: starting bit %d is not valid because field is " "only %d bits wide", *sp, start, field->n_bits); } else if (end >= field->n_bits){ return xasprintf("%s: ending bit %d is not valid because field is " "only %d bits wide", *sp, end, field->n_bits); } sf->field = field; sf->ofs = start; sf->n_bits = end - start + 1; *sp = s; return NULL; } _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev