Skip to content

Commit

Permalink
ofpbuf: Make ofpbuf_put_hex() accept period between hex bytes also.
Browse files Browse the repository at this point in the history
This makes it accept the same syntax as parse_NOTE(), so that that function
can be simplified.  In an upcoming commit a second action will also be
able to take advantage of the same feature.

Signed-off-by: Ben Pfaff <[email protected]>
Acked-by: Jarno Rajahalme <[email protected]>
  • Loading branch information
blp committed Feb 19, 2016
1 parent 29100ef commit 27aa879
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 31 deletions.
34 changes: 9 additions & 25 deletions lib/ofp-actions.c
Original file line number Diff line number Diff line change
Expand Up @@ -4401,31 +4401,15 @@ static char * OVS_WARN_UNUSED_RESULT
parse_NOTE(const char *arg, struct ofpbuf *ofpacts,
enum ofputil_protocol *usable_protocols OVS_UNUSED)
{
struct ofpact_note *note;

note = ofpact_put_NOTE(ofpacts);
while (*arg != '\0') {
uint8_t byte;
bool ok;

if (*arg == '.') {
arg++;
}
if (*arg == '\0') {
break;
}

byte = hexits_value(arg, 2, &ok);
if (!ok) {
return xstrdup("bad hex digit in `note' argument");
}
ofpbuf_put(ofpacts, &byte, 1);

note = ofpacts->header;
note->length++;

arg += 2;
}
size_t start_ofs = ofpacts->size;
ofpact_put_NOTE(ofpacts);
arg = ofpbuf_put_hex(ofpacts, arg, NULL);
if (arg[0]) {
return xstrdup("bad hex digit in `note' argument");
}
struct ofpact_note *note = ofpbuf_at_assert(ofpacts, start_ofs,
sizeof *note);
note->length = ofpacts->size - (start_ofs + sizeof *note);
ofpact_finish(ofpacts, &note->ofpact);
return NULL;
}
Expand Down
12 changes: 6 additions & 6 deletions lib/ofpbuf.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
* Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2016 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -389,10 +389,10 @@ ofpbuf_put(struct ofpbuf *b, const void *p, size_t size)
return dst;
}

/* Parses as many pairs of hex digits as possible (possibly separated by
* spaces) from the beginning of 's', appending bytes for their values to 'b'.
* Returns the first character of 's' that is not the first of a pair of hex
* digits. If 'n' is nonnull, stores the number of bytes added to 'b' in
/* Parses as many pairs of hex digits as possible (possibly separated by spaces
* or periods) from the beginning of 's', appending bytes for their values to
* 'b'. Returns the first character of 's' that is not the first of a pair of
* hex digits. If 'n' is nonnull, stores the number of bytes added to 'b' in
* '*n'. */
char *
ofpbuf_put_hex(struct ofpbuf *b, const char *s, size_t *n)
Expand All @@ -402,7 +402,7 @@ ofpbuf_put_hex(struct ofpbuf *b, const char *s, size_t *n)
uint8_t byte;
bool ok;

s += strspn(s, " \t\r\n");
s += strspn(s, " .\t\r\n");
byte = hexits_value(s, 2, &ok);
if (!ok) {
if (n) {
Expand Down

0 comments on commit 27aa879

Please sign in to comment.