summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Alc/alstring.h7
-rw-r--r--Alc/helpers.c26
2 files changed, 26 insertions, 7 deletions
diff --git a/Alc/alstring.h b/Alc/alstring.h
index f9e16eb8..ab88c36f 100644
--- a/Alc/alstring.h
+++ b/Alc/alstring.h
@@ -26,11 +26,8 @@ inline const al_string_char_type *al_string_get_cstr(const_al_string str)
void al_string_clear(al_string *str);
-inline int al_string_cmp(const_al_string str1, const_al_string str2)
-{ return strcmp(al_string_get_cstr(str1), al_string_get_cstr(str2)); }
-
-inline int al_string_cmp_cstr(const_al_string str1, const al_string_char_type *str2)
-{ return strcmp(al_string_get_cstr(str1), str2); }
+int al_string_cmp(const_al_string str1, const_al_string str2);
+int al_string_cmp_cstr(const_al_string str1, const al_string_char_type *str2);
void al_string_copy(al_string *str, const_al_string from);
void al_string_copy_cstr(al_string *str, const al_string_char_type *from);
diff --git a/Alc/helpers.c b/Alc/helpers.c
index 837b19ad..8f6420d1 100644
--- a/Alc/helpers.c
+++ b/Alc/helpers.c
@@ -84,6 +84,7 @@ DEFINE_DEVPROPKEY(DEVPKEY_Device_FriendlyName, 0xa45c254e, 0xdf1c, 0x4efd, 0x80,
#endif
#include "alMain.h"
+#include "alu.h"
#include "atomic.h"
#include "uintmap.h"
#include "vector.h"
@@ -799,8 +800,6 @@ ALboolean vector_resize(void *ptr, size_t base_size, size_t obj_count, size_t ob
extern inline ALsizei al_string_length(const_al_string str);
extern inline ALsizei al_string_empty(const_al_string str);
extern inline const al_string_char_type *al_string_get_cstr(const_al_string str);
-extern inline int al_string_cmp(const_al_string str1, const_al_string str2);
-extern inline int al_string_cmp_cstr(const_al_string str1, const al_string_char_type *str2);
void al_string_clear(al_string *str)
{
@@ -812,6 +811,29 @@ void al_string_clear(al_string *str)
*VECTOR_ITER_END(*str) = 0;
}
+static inline int al_string_compare(const al_string_char_type *str1, ALsizei str1len,
+ const al_string_char_type *str2, ALsizei str2len)
+{
+ ALsizei complen = mini(str1len, str2len);
+ int ret = memcmp(str1, str2, complen);
+ if(ret == 0)
+ {
+ if(str1len > str2len) return 1;
+ if(str1len < str2len) return -1;
+ }
+ return ret;
+}
+int al_string_cmp(const_al_string str1, const_al_string str2)
+{
+ return al_string_compare(&VECTOR_FRONT(str1), al_string_length(str1),
+ &VECTOR_FRONT(str2), al_string_length(str2));
+}
+int al_string_cmp_cstr(const_al_string str1, const al_string_char_type *str2)
+{
+ return al_string_compare(&VECTOR_FRONT(str1), al_string_length(str1),
+ str2, (ALsizei)strlen(str2));
+}
+
void al_string_copy(al_string *str, const_al_string from)
{
ALsizei len = VECTOR_SIZE(from);