dol: initial dol commit
[jump.git] / dol / src / dol / visitor / hdsd / lib / dol.c
diff --git a/dol/src/dol/visitor/hdsd/lib/dol.c b/dol/src/dol/visitor/hdsd/lib/dol.c
new file mode 100644 (file)
index 0000000..8945c8b
--- /dev/null
@@ -0,0 +1,42 @@
+#include "dol.h"
+
+/**
+ * Gets an index of a string, where the index must be separated by
+ * a character specified in tokens.
+ * Returns -1, when an error occurs.
+ *
+ * Example:
+ * getIndex("name_1_2", "_", 0) will return 1.
+ * getIndex("name_1_2", "_", 1) will return 2.
+ *
+ * @param string string to parse
+ * @param tokens delimiter of indices
+ * @param indexNumber position of index (starting at 0)
+ */
+int getIndex(const char* string, char* tokens, int indexNumber) {
+  char* string_copy;
+  char* token_pointer;
+  int index = 0;
+
+  string_copy = (char*) malloc(sizeof(char) * (strlen(string) + 1));
+  if (!string_copy) {
+    fprintf(stderr, "getIndex(): could not allocate memory.\n");
+    return -1;
+  }
+
+  strcpy(string_copy, string);
+
+  token_pointer = strtok(string_copy, tokens);
+  do {
+    token_pointer = strtok(NULL, tokens);
+    index++;
+  } while (index <= indexNumber && token_pointer != 0);
+
+  if (token_pointer) {
+    index = atoi(token_pointer);
+    free(string_copy);
+    return index;
+  }
+
+  return -1;
+}