summaryrefslogtreecommitdiff
path: root/lib/item.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/item.c')
-rw-r--r--lib/item.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/lib/item.c b/lib/item.c
new file mode 100644
index 0000000..40ebb52
--- /dev/null
+++ b/lib/item.c
@@ -0,0 +1,75 @@
+/**
+ * @file item.c
+ */
+
+#include "internal.h"
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+
+/**
+ * Allocate a new item.
+ *
+ * @param text Pointer to null terminated C "string", can be NULL for empty text.
+ * @return bmItem instance.
+ */
+bmItem* bmItemNew(const char *text)
+{
+ bmItem *item = calloc(1, sizeof(bmItem));
+
+ if (!item)
+ return NULL;
+
+ bmItemSetText(item, text);
+ return item;
+}
+
+/**
+ * Release bmItem instance.
+ *
+ * @param item bmItem instance to be freed from memory.
+ */
+void bmItemFree(bmItem *item)
+{
+ assert(item != NULL);
+
+ if (item->text)
+ free(item->text);
+
+ free(item);
+}
+
+/**
+ * Set text to bmItem instance.
+ *
+ * @param item bmItem instance where to set text.
+ * @param text C "string" to set as text, can be NULL for empty text.
+ */
+int bmItemSetText(bmItem *item, const char *text)
+{
+ assert(item != NULL);
+
+ char *copy = NULL;
+ if (text && !(copy = _bmStrdup(text)))
+ return 0;
+
+ if (item->text)
+ free(item->text);
+
+ item->text = copy;
+ return 1;
+}
+
+/**
+ * Get text from bmItem instance.
+ *
+ * @param item bmItem instance where to get text from.
+ * @return Pointer to null terminated C "string", can be NULL for empty text.
+ */
+const char* bmItemGetText(const bmItem *item)
+{
+ assert(item != NULL);
+ return item->text;
+}
+
+/* vim: set ts=8 sw=4 tw=0 :*/