Message ID | CABKoBm0hw4ag6AkTGuDA_DgnxGwFffZF6xoP5k2Z1mQBG_y2Xg@mail.gmail.com |
---|---|
State | Not Applicable |
Headers | show |
On Tue, May 02, 2017 at 07:06:06PM -0700, Andy Zhou wrote: > On Sun, Apr 30, 2017 at 4:22 PM, Ben Pfaff <blp@ovn.org> wrote: > > This will have another caller in an upcoming commit. > > > > Signed-off-by: Ben Pfaff <blp@ovn.org> > > Acked-by: Andy Zhou <azhou@ovn.org> Thanks! ... > > diff --git a/lib/uuid.c b/lib/uuid.c > > index 636492bcbe5b..0b20c24faecd 100644 > > --- a/lib/uuid.c > > +++ b/lib/uuid.c > > @@ -242,6 +242,17 @@ uuid_is_partial_string(const char *s) > > return i; > > } > > > > +/* Compares 'match' to the string representation of 'uuid'. If 'match' equals > > + * or is a prefix of this string representation, returns strlen(match); > > + * otherwise, returns 0. (Thus, the caller can */ > > The last sentence is not finished. Oops. Now I've deleted it. > > +int > > +uuid_is_partial_match(const struct uuid *uuid, const char *match) > > +{ > > + char uuid_s[UUID_LEN + 1]; > > + snprintf(uuid_s, sizeof uuid_s, UUID_FMT, UUID_ARGS(uuid)); > > + size_t match_len = strlen(match); > > + return !strncmp(uuid_s, match, match_len) ? match_len : 0; > > +} > > I am not sure if the following optimization makes sense, since the > main use case if mainly for match to be << UUID_LEN. On the other > hand, it is cheap to check. Thanks for the suggestion. My own instinct is that the expensive part here is probably the snprintf(). I think I'll leave this as it is until we find that there's a performance problem of some kind. > diff --git a/lib/uuid.c b/lib/uuid.c > index 0b20c24faecd..5fa7ed91e852 100644 > --- a/lib/uuid.c > +++ b/lib/uuid.c > @@ -249,8 +249,11 @@ int > uuid_is_partial_match(const struct uuid *uuid, const char *match) > { > char uuid_s[UUID_LEN + 1]; > - snprintf(uuid_s, sizeof uuid_s, UUID_FMT, UUID_ARGS(uuid)); > size_t match_len = strlen(match); > + if (match_len > UUID_LEN) { > + return 0; > + } > + snprintf(uuid_s, sizeof uuid_s, UUID_FMT, UUID_ARGS(uuid)); > return !strncmp(uuid_s, match, match_len) ? match_len : 0; > } Thanks again, I'll apply this in a minute.
diff --git a/lib/uuid.c b/lib/uuid.c index 0b20c24faecd..5fa7ed91e852 100644 --- a/lib/uuid.c +++ b/lib/uuid.c @@ -249,8 +249,11 @@ int uuid_is_partial_match(const struct uuid *uuid, const char *match) { char uuid_s[UUID_LEN + 1]; - snprintf(uuid_s, sizeof uuid_s, UUID_FMT, UUID_ARGS(uuid)); size_t match_len = strlen(match); + if (match_len > UUID_LEN) { + return 0; + } + snprintf(uuid_s, sizeof uuid_s, UUID_FMT, UUID_ARGS(uuid)); return !strncmp(uuid_s, match, match_len) ? match_len : 0; }