diff options
author | Joshua Haberman <joshua@reverberate.org> | 2009-07-08 19:40:02 -0700 |
---|---|---|
committer | Joshua Haberman <joshua@reverberate.org> | 2009-07-08 19:40:02 -0700 |
commit | e8718306a5bc688bea31c03d52b997166f0ba578 (patch) | |
tree | ec04fb32519464a046f7f442af89b86bcb870837 /src/upb_string.h | |
parent | 35b5a016c20a6ce1f679a377005900b190dedfa1 (diff) |
Bugfix and additions to upb.h and upb_string.h
Diffstat (limited to 'src/upb_string.h')
-rw-r--r-- | src/upb_string.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/upb_string.h b/src/upb_string.h index 7a05811..de2384d 100644 --- a/src/upb_string.h +++ b/src/upb_string.h @@ -43,8 +43,15 @@ INLINE bool upb_streql(struct upb_string *s1, struct upb_string *s2) { memcmp(s1->ptr, s2->ptr, s1->byte_len) == 0; } +INLINE int upb_strcmp(struct upb_string s1, struct upb_string s2) { + size_t common_length = min(s1.byte_len, s2.byte_len); + int common_diff = memcmp(s1.ptr, s2.ptr, common_length); + if(common_diff == 0) return s1.byte_len - s2.byte_len; + else return common_diff; +} + INLINE void upb_strcpy(struct upb_string *dest, struct upb_string *src) { - memcpy(dest->ptr, src->ptr, dest->byte_len); + memcpy(dest->ptr, src->ptr, src->byte_len); dest->byte_len = src->byte_len; } @@ -56,6 +63,14 @@ INLINE struct upb_string upb_strdup(struct upb_string s) { return copy; } +INLINE struct upb_string upb_strdupc(char *s) { + struct upb_string copy; + copy.byte_len = strlen(s); + copy.ptr = (char*)malloc(copy.byte_len); + memcpy(copy.ptr, s, copy.byte_len); + return copy; +} + INLINE void upb_strfree(struct upb_string s) { free(s.ptr); } |