On Wed, Jun 12, 2013 at 11:38 AM, Ben Pfaff <b...@nicira.com> wrote: > This function is more convenient than ofputil_format_port() when a "struct > ds" is not already in use. This commit converts one caller for which this > was already true, and the following commit will add another. > > Signed-off-by: Ben Pfaff <b...@nicira.com> > --- > lib/ofp-util.c | 32 ++++++++++++++++++++++---------- > lib/ofp-util.h | 2 ++ > 2 files changed, 24 insertions(+), 10 deletions(-) > > diff --git a/lib/ofp-util.c b/lib/ofp-util.c > index 26da477..3cc4026 100644 > --- a/lib/ofp-util.c > +++ b/lib/ofp-util.c > @@ -4144,14 +4144,12 @@ ofputil_port_from_string(const char *s, uint16_t > *portp) > *portp = port32; > return true; > } else if (port32 <= OFPP_LAST_RESV) { > - struct ds msg; > + char name[OFP_MAX_PORT_NAME_LEN]; > > - ds_init(&msg); > - ofputil_format_port(port32, &msg); > + ofputil_port_to_string(port32, name, sizeof name); > VLOG_WARN_ONCE("referring to port %s as %u is deprecated for " > "compatibility with future versions of > OpenFlow", > - ds_cstr(&msg), port32); > - ds_destroy(&msg); > + name, port32); > > *portp = port32; > return true; > @@ -4192,18 +4190,32 @@ ofputil_port_from_string(const char *s, uint16_t > *portp) > void > ofputil_format_port(uint16_t port, struct ds *s) > {
- const char *name; > + char name[OFP_MAX_PORT_NAME_LEN]; > > + ofputil_port_to_string(port, name, sizeof name); > + ds_put_cstr(s, name); > +} > + > +/* Puts in the 'bufsize' byte in 'buf' a null-terminated string > representation > Did you mean something like this instead: Puts in the 'namebuf' buffer that is of size 'bufsize' a null terminated string representation... > + * of OpenFlow port number 'port'. Most ports are represented as just > the port > + * number, but special ports, e.g. OFPP_LOCAL, are represented by name, > + * e.g. "LOCAL". */ > +void > +ofputil_port_to_string(uint16_t port, > + char namebuf[OFP_MAX_PORT_NAME_LEN], size_t > bufsize) > +{ > switch (port) { > -#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: name = #NAME; break; > +#define OFPUTIL_NAMED_PORT(NAME) \ > + case OFPP_##NAME: \ > + ovs_strlcpy(namebuf, #NAME, bufsize); \ > + break; > OFPUTIL_NAMED_PORTS > #undef OFPUTIL_NAMED_PORT > > default: > - ds_put_format(s, "%"PRIu16, port); > - return; > + snprintf(namebuf, bufsize, "%"PRIu16, port); > + break; > } > - ds_put_cstr(s, name); > } > > /* Given a buffer 'b' that contains an array of OpenFlow ports of type > diff --git a/lib/ofp-util.h b/lib/ofp-util.h > index 1c8d6cd..424bb73 100644 > --- a/lib/ofp-util.h > +++ b/lib/ofp-util.h > @@ -38,6 +38,8 @@ ovs_be32 ofputil_port_to_ofp11(uint16_t ofp10_port); > enum ofperr ofputil_check_output_port(uint16_t ofp_port, int max_ports); > bool ofputil_port_from_string(const char *, uint16_t *portp); > void ofputil_format_port(uint16_t port, struct ds *); > +void ofputil_port_to_string(uint16_t port, char > namebuf[OFP_MAX_PORT_NAME_LEN], > + size_t bufsize); > Also, It seems that now there is trivial conflict where uint16_t has changed to ofp_port_t. Otherwise looks good to me.
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev