]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libsmartcols: add symbols
authorOndrej Oprala <ooprala@redhat.com>
Mon, 17 Mar 2014 11:19:48 +0000 (12:19 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 3 Apr 2014 10:29:16 +0000 (12:29 +0200)
[kzak@redhat.com: - split scols_new_symbols() to regular getters functions]

Signed-off-by: Karel Zak <kzak@redhat.com>
libsmartcols/src/Makemodule.am
libsmartcols/src/libsmartcols.h.in
libsmartcols/src/smartcolsP.h
libsmartcols/src/symbols.c [new file with mode: 0644]

index 3dbac9ca1e1fa7f1117d77be982590ed5032062f..5f8d180126f525ba1422c15b6951ad5e5fa05d37 100644 (file)
@@ -10,6 +10,7 @@ libsmartcols_la_SOURCES= \
        \
        libsmartcols/src/smartcolsP.h \
        libsmartcols/src/iter.c \
+       libsmartcols/src/symbols.c \
        $(smartcolsinc_HEADERS)
 
 nodist_libsmartcols_la_SOURCES = libsmartcols/src/smartcolsP.h
index 46a06a0ce635e4b3e99d001e67d5b3aef19cecea..eefac6c63a72ff8c0eeef4c4aa5bf6b898a123ab 100644 (file)
@@ -20,6 +20,7 @@ extern "C" {
 #define LIBSMARTCOLS_VERSION   "@LIBSMARTCOLS_VERSION@"
 
 struct libscols_iter;
+struct libscols_symbols;
 
 
 /* iter.c */
@@ -34,6 +35,14 @@ extern void scols_free_iter(struct libscols_iter *itr);
 extern void scols_reset_iter(struct libscols_iter *itr, int direction);
 extern int scols_iter_get_direction(struct libscols_iter *itr);
 
+/* symbols.c */
+extern struct libscols_symbols *scols_new_symbols(void);
+struct libscols_symbols *scols_copy_symbols(const struct libscols_symbols *sb);
+extern void scols_free_symbols(struct libscols_symbols *sb);
+extern int scols_symbols_set_branch(struct libscols_symbols *sb, const char *str);
+extern int scols_symbols_set_vertical(struct libscols_symbols *sb, const char *str);
+extern int scols_symbols_set_right(struct libscols_symbols *sb, const char *str);
+
 #ifdef __cplusplus
 }
 #endif
index c424575805cab4270145916c69e0cdbee4c3ac8d..ca662a20478786966d443a303a2d851e6935ec50 100644 (file)
@@ -33,4 +33,13 @@ struct libscols_iter {
        int                     direction;      /* SCOLS_ITER_{FOR,BACK}WARD */
 };
 
+/*
+ * Tree symbols
+ */
+struct libscols_symbols {
+       char *branch;
+       char *vert;
+       char *right;
+};
+
 #endif /* _LIBSMARTCOLS_PRIVATE_H */
diff --git a/libsmartcols/src/symbols.c b/libsmartcols/src/symbols.c
new file mode 100644 (file)
index 0000000..344ddcf
--- /dev/null
@@ -0,0 +1,103 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "smartcolsP.h"
+
+struct libscols_symbols *scols_new_symbols(void)
+{
+       return calloc(1, sizeof(struct libscols_symbols));
+}
+
+int scols_symbols_set_branch(struct libscols_symbols *sb, const char *str)
+{
+       char *p = NULL;
+
+       assert(sb);
+
+       if (!sb)
+               return -EINVAL;
+       if (str) {
+               p = strdup(str);
+               if (!p)
+                       return -ENOMEM;
+       }
+       free(sb->branch);
+       sb->branch = p;
+       return 0;
+}
+
+int scols_symbols_set_vertical(struct libscols_symbols *sb, const char *str)
+{
+       char *p = NULL;
+
+       assert(sb);
+
+       if (!sb)
+               return -EINVAL;
+       if (str) {
+               p = strdup(str);
+               if (!p)
+                       return -ENOMEM;
+       }
+       free(sb->vert);
+       sb->vert = p;
+       return 0;
+}
+
+int scols_symbols_set_right(struct libscols_symbols *sb, const char *str)
+{
+       char *p = NULL;
+
+       assert(sb);
+
+       if (!sb)
+               return -EINVAL;
+       if (str) {
+               p = strdup(str);
+               if (!p)
+                       return -ENOMEM;
+       }
+       free(sb->right);
+       sb->right = p;
+       return 0;
+}
+
+
+struct libscols_symbols *scols_copy_symbols(const struct libscols_symbols *sb)
+{
+       struct libscols_symbols *ret;
+       int rc;
+
+       assert(sb);
+       if (!sb)
+               return NULL;
+
+       ret = scols_new_symbols();
+       if (!ret)
+               return NULL;
+
+       rc = scols_symbols_set_branch(ret, sb->branch);
+       if (!rc)
+               rc = scols_symbols_set_vertical(ret, sb->vert);
+       if (!rc)
+               rc = scols_symbols_set_right(ret, sb->right);
+       if (!rc)
+               return ret;
+
+       scols_free_symbols(ret);
+       return NULL;
+
+}
+
+void scols_free_symbols(struct libscols_symbols *sb)
+{
+       if (!sb)
+               return;
+
+       free(sb->branch);
+       free(sb->vert);
+       free(sb->right);
+       free(sb);
+}