summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nasmlib.c35
-rw-r--r--nasmlib.h2
2 files changed, 37 insertions, 0 deletions
diff --git a/nasmlib.c b/nasmlib.c
index 22d3b620..550c42db 100644
--- a/nasmlib.c
+++ b/nasmlib.c
@@ -690,6 +690,41 @@ char *nasm_zap_spaces_rev(char *p)
return p;
}
+/* zap leading and trailing spaces */
+char *nasm_trim_spaces(char *p)
+{
+ p = nasm_zap_spaces_fwd(p);
+ nasm_zap_spaces_fwd(nasm_skip_word(p));
+
+ return p;
+}
+
+/*
+ * extract option and value from a string formatted as "opt = val"
+ * and return pointer to the next string or NULL on empty string
+ * passed or if nothing left for handling
+ */
+char *nasm_opt_val(char *p, char **opt, char **val)
+{
+ char *q, *next;
+
+ p = nasm_skip_spaces(p);
+ if (!p || (p && !*p))
+ return NULL;
+
+ q = strchr(p, '=');
+ if (q) {
+ *q++ = '\0';
+ next = nasm_skip_spaces(nasm_skip_word(nasm_skip_spaces(q)));
+ } else
+ next = nasm_skip_spaces(nasm_skip_word(nasm_skip_spaces(p)));
+
+ *opt = nasm_trim_spaces(p);
+ *val = nasm_trim_spaces(q);
+
+ return next;
+}
+
/*
* initialized data bytes length from opcode
*/
diff --git a/nasmlib.h b/nasmlib.h
index b0349471..f103e629 100644
--- a/nasmlib.h
+++ b/nasmlib.h
@@ -393,6 +393,8 @@ char *nasm_skip_spaces(const char *p);
char *nasm_skip_word(const char *p);
char *nasm_zap_spaces_fwd(char *p);
char *nasm_zap_spaces_rev(char *p);
+char *nasm_trim_spaces(char *p);
+char *nasm_opt_val(char *p, char **opt, char **val);
const char *prefix_name(int);