]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
tools: move lxc-autostart to API symbols only
authorChristian Brauner <christian.brauner@ubuntu.com>
Fri, 12 Jan 2018 12:32:04 +0000 (13:32 +0100)
committerChristian Brauner <christian.brauner@ubuntu.com>
Tue, 6 Feb 2018 20:03:32 +0000 (21:03 +0100)
Closes #2073.

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/tools/lxc_autostart.c
src/lxc/tools/tool_list.h [new file with mode: 0644]

index b3823af2f0d4e2a11e1d947ae417ef0487a80e87..41d2e4b576b4d47d90ce6857391f55c8231c46eb 100644 (file)
@@ -18,6 +18,7 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -26,8 +27,8 @@
 #include <lxc/lxccontainer.h>
 
 #include "arguments.h"
-#include "log.h"
-#include "utils.h"
+#include "tool_list.h"
+#include "tool_utils.h"
 
 static struct lxc_list *accumulate_list(char *input, char *delimiter, struct lxc_list *str_list);
 
@@ -355,7 +356,6 @@ int main(int argc, char *argv[])
 
        if (lxc_log_init(&log))
                exit(EXIT_FAILURE);
-       lxc_log_options_no_override();
 
        /* REMOVE IN LXC 3.0 */
        setenv("LXC_UPDATE_CONFIG_FORMAT", "1", 0);
diff --git a/src/lxc/tools/tool_list.h b/src/lxc/tools/tool_list.h
new file mode 100644 (file)
index 0000000..9858081
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * lxc: linux Container library
+ *
+ * (C) Copyright IBM Corp. 2007, 2008
+ *
+ * Authors:
+ * Daniel Lezcano <daniel.lezcano at free.fr>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __LXC_LIST_H
+#define __LXC_LIST_H
+
+#include <stdio.h>
+
+struct lxc_list {
+       void *elem;
+       struct lxc_list *next;
+       struct lxc_list *prev;
+};
+
+#define lxc_init_list(l)                                                       \
+       {                                                                      \
+               .next = l, .prev = l                                           \
+       }
+
+/*
+ * Iterate through an lxc list. An example for an idiom would be:
+ *
+ * struct lxc_list *iterator;
+ * lxc_list_for_each(iterator, list) {
+ *        type *tmp;
+ *       tmp = iterator->elem;
+ * }
+ */
+#define lxc_list_for_each(__iterator, __list)                                  \
+       for (__iterator = (__list)->next; __iterator != __list;                \
+            __iterator = __iterator->next)
+
+/* Iterate safely through an lxc list. An example for an appropriate use case
+ * would be:
+ *
+ * struct lxc_list *cur, *next;
+ * lxc_list_for_each_safe(cur, list, next) {
+ *        type *tmp;
+ *       tmp = cur->elem;
+ * }
+ */
+#define lxc_list_for_each_safe(__iterator, __list, __next)                     \
+       for (__iterator = (__list)->next, __next = __iterator->next;           \
+            __iterator != __list; __iterator = __next, __next = __next->next)
+
+/* Initalize list. */
+static inline void lxc_list_init(struct lxc_list *list)
+{
+       list->elem = NULL;
+       list->next = list->prev = list;
+}
+
+/* Add an element to a list. See lxc_list_add() and lxc_list_add_tail() for an
+ * idiom.
+ */
+static inline void lxc_list_add_elem(struct lxc_list *list, void *elem)
+{
+       list->elem = elem;
+}
+
+/* Retrieve first element of list. */
+static inline void *lxc_list_first_elem(struct lxc_list *list)
+{
+       return list->next->elem;
+}
+
+/* Retrieve last element of list. */
+static inline void *lxc_list_last_elem(struct lxc_list *list)
+{
+       return list->prev->elem;
+}
+
+/* Determine if list is empty. */
+static inline int lxc_list_empty(struct lxc_list *list)
+{
+       return list == list->next;
+}
+
+/* Workhorse to be called from lxc_list_add() and lxc_list_add_tail(). */
+static inline void __lxc_list_add(struct lxc_list *new, struct lxc_list *prev,
+                                 struct lxc_list *next)
+{
+       next->prev = new;
+       new->next = next;
+       new->prev = prev;
+       prev->next = new;
+}
+
+/* Idiom to add an element to the beginning of an lxc list:
+ *
+ *     struct lxc_list *tmp = malloc(sizeof(*tmp));
+ *     if (tmp == NULL)
+ *             return 1;
+ *     lxc_list_add_elem(tmp, elem);
+ *     lxc_list_add(list, tmp);
+ */
+static inline void lxc_list_add(struct lxc_list *head, struct lxc_list *list)
+{
+       __lxc_list_add(list, head, head->next);
+}
+
+/* Idiom to add an element to the end of an lxc list:
+ *
+ *     struct lxc_list *tmp = malloc(sizeof(*tmp));
+ *     if (tmp == NULL)
+ *             return 1;
+ *     lxc_list_add_elem(tmp, elem);
+ *     lxc_list_add_tail(list, tmp);
+ */
+static inline void lxc_list_add_tail(struct lxc_list *head,
+                                    struct lxc_list *list)
+{
+       __lxc_list_add(list, head->prev, head);
+}
+
+/* Idiom to remove an element from a list:
+ * struct lxc_list *cur, *next;
+ * lxc_list_for_each_safe(cur, list, next) {
+ *       lxc_list_del(cur);
+ *       free(cur->elem);
+ *       free(cur);
+ * }
+ */
+static inline void lxc_list_del(struct lxc_list *list)
+{
+       struct lxc_list *next, *prev;
+
+       next = list->next;
+       prev = list->prev;
+       next->prev = prev;
+       prev->next = next;
+}
+
+/* Return length of the list. */
+static inline size_t lxc_list_len(struct lxc_list *list)
+{
+        size_t i = 0;
+        struct lxc_list *iter;
+
+        lxc_list_for_each(iter, list) {
+               i++;
+        }
+
+        return i;
+}
+
+#endif /* __LXC_LIST_H */