Browse Source

util: memrchr is not portable (GNU extension), so implement our own my_memrchr

Luke Dashjr 11 years ago
parent
commit
b9d89ee7e5
2 changed files with 13 additions and 1 deletions
  1. 11 1
      util.c
  2. 2 0
      util.h

+ 11 - 1
util.c

@@ -1883,6 +1883,16 @@ static char *json_array_string(json_t *val, unsigned int entry)
 	return NULL;
 }
 
+void *my_memrchr(const void * const datap, const int c, const size_t sz)
+{
+	const uint8_t *data = datap;
+	const uint8_t *p = &data[sz];
+	while (p > data)
+		if (*--p == c)
+			return (void *)p;
+	return NULL;
+}
+
 bool isCalpha(const int c)
 {
 	if (c >= 'A' && c <= 'Z')
@@ -1937,7 +1947,7 @@ const char *extract_domain(size_t * const out_domainlen, const char * const uri,
 		p = &uri[urilen];
 	
 	s = p;
-	q = memrchr(uri, ':', p - uri);
+	q = my_memrchr(uri, ':', p - uri);
 	if (q)
 	{
 		alldigit = true;

+ 2 - 0
util.h

@@ -99,6 +99,8 @@ const char *bfg_json_obj_string(json_t *json, const char *key, const char *fail)
 
 extern const char *__json_array_string(json_t *, unsigned int entry);
 
+extern void *my_memrchr(const void *, int, size_t);
+
 extern bool isCalpha(int);
 static inline
 bool isCspace(int c)