summaryrefslogtreecommitdiff
path: root/common/rt/include/rt_string.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/rt/include/rt_string.h')
-rw-r--r--common/rt/include/rt_string.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/common/rt/include/rt_string.h b/common/rt/include/rt_string.h
new file mode 100644
index 0000000..c183db5
--- /dev/null
+++ b/common/rt/include/rt_string.h
@@ -0,0 +1,74 @@
+#ifndef __UTIL_STRING_H__
+#define __UTIL_STRING_H__
+
+#include <string.h>
+#include <stdio.h>
+#include <stdint.h>
+
+#ifndef STRLEN
+#define STRLEN(STR) ((int)strlen((const char *)STR))
+#endif
+
+#ifndef ISALNUM
+#define ISALNUM(S) (isalnum((const char)S))
+#endif
+
+#ifndef STRCMP
+#define STRCMP(S,D) (strcmp((const char *)S, (const char *)D))
+#endif
+
+#ifndef STRSTR
+#define STRSTR(D,S) (strstr((const char *)D,(const char *)S))
+#endif
+
+#ifndef STRNCMP
+#define STRNCMP(S,D,L) (strncmp((const char *)S, (const char *)D, L))
+#endif
+
+#ifndef STRCAT
+#define STRCAT(D,S) (strcat((char *)D, (const char *)S))
+#endif
+
+#ifndef FOREVER
+#define FOREVER for(;;)
+#endif
+
+#ifndef MIN
+#define MIN(a, b) (((a) < (b)) ? (a) : (b))
+#endif
+
+typedef struct atomic {
+ volatile int counter;
+} atomic_t;
+
+struct value_string {
+ unsigned int value;
+ const char *strptr;
+};
+
+extern const char*
+val_to_str(const unsigned int val, const struct value_string *vs);
+
+typedef struct{
+#define ATOMIC64_SIZE sizeof(long long)
+ int64_t counter;
+}atomic64_t;
+
+#define ATOMIC_INIT(i) { (i) }
+
+#define atomic_read(v) (*(volatile int *)&(v)->counter)
+#define atomic64_read(v) (*(volatile int64_t *)&(v)->counter)
+
+#define atomic_add(x, y) (__sync_add_and_fetch((&(((atomic_t *)x)->counter)), (y)))
+#define atomic64_add(x, y) (__sync_add_and_fetch((&(((atomic64_t *)x)->counter)), (y)))
+#define atomic64_sub(x, y) (__sync_sub_and_fetch((&(((atomic64_t *)x)->counter)), (y)))
+
+#define atomic64_inc(x) (atomic64_add((x), 1))
+#define atomic64_dec(x) (atomic64_sub((x), 1))
+
+static inline void atomic64_set(atomic64_t *v, int64_t val)
+{
+ v->counter = val;
+}
+
+#endif