Add typedefs for all structs and enums.
[libvscmgmt.git] / utils / utils.h
1 /*
2  * utils.h: Utilities for Virtualized Super Computer Management
3  *
4  * Copyright (C) 2009 Matthias Bolte <matthias.bolte@googlemail.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
19  */
20
21 #ifndef __VSC_MGMT__UTILS_H__
22 #define __VSC_MGMT__UTILS_H__
23
24 #include "../include/libvscmgmt/libvscmgmt.h"
25
26 #define ATTR_UNUSED __attribute__((__unused__))
27
28 #define ATTR_PRINTF(a, b) __attribute__ ((format (printf, a, b)))
29
30 #ifndef NDEBUG
31 #define VSC_MGMT__ASSERT(condition) \
32         do { \
33                 if (! (condition)) { \
34                         vsc_mgmt_assert_failed (__FILE__, __LINE__, __FUNCTION__, #condition); \
35                 } \
36         } while (0)
37 #else
38 #define VSC_MGMT__ASSERT(condition) do { } while (0)
39 #endif
40
41 #define VSC_MGMT__ERROR0(error, code) \
42         vsc_mgmt_error_report (error, code, __FILE__, __LINE__, __FUNCTION__, NULL)
43
44 #define VSC_MGMT__ERROR1(error, code, message) \
45         vsc_mgmt_error_report (error, code, __FILE__, __LINE__, __FUNCTION__, message)
46
47 #define VSC_MGMT__ERROR2(error, code, message, ...) \
48         vsc_mgmt_error_report (error, code, __FILE__, __LINE__, __FUNCTION__, message, __VA_ARGS__)
49
50 #define VSC_MGMT__APPEND_ERROR0(error, code) \
51         vsc_mgmt_error_append_report (error, code, __FILE__, __LINE__, __FUNCTION__, NULL)
52
53 #define VSC_MGMT__APPEND_ERROR1(error, code, message) \
54         vsc_mgmt_error_append_report (error, code, __FILE__, __LINE__, __FUNCTION__, message)
55
56 #define VSC_MGMT__APPEND_ERROR2(error, code, message, ...) \
57         vsc_mgmt_error_append_report (error, code, __FILE__, __LINE__, __FUNCTION__, message, __VA_ARGS__)
58
59 typedef struct _VscMgmtList VscMgmtList;
60
61 struct _VscMgmtList {
62         VscMgmtList *next;
63 };
64
65 /*
66  * Assert (Utils)
67  */
68
69 void
70 vsc_mgmt_assert_failed (const char *file, int line, const char *function,
71                         const char *condition);
72
73 /*
74  * Error (Utils)
75  */
76
77 void
78 vsc_mgmt_error_report (VscMgmtError *error, VscMgmtCode code,
79                        const char *file, int line, const char *function,
80                        const char *message, ...) ATTR_PRINTF (6, 7);
81
82 void
83 vsc_mgmt_error_append_report (VscMgmtError *error, VscMgmtCode code,
84                               const char *file, int line, const char *function,
85                               const char *message, ...) ATTR_PRINTF (6, 7);
86
87 /*
88  * String (Utils)
89  */
90
91 char *
92 vsc_mgmt_strdup (VscMgmtError *error, const char *string);
93
94 /**
95  * Stricter version of strtol, returning an int as result.
96  *
97  * If tail is NULL there must be no non-number character at the end of the
98  * string, otherwise an error occurs.
99  */
100 int
101 vsc_mgmt_strtoi (VscMgmtError *error, const char *string, char **tail,
102                  int base);
103
104 /*
105  * Memory (Utils)
106  */
107
108 void *
109 vsc_mgmt_memdup (VscMgmtError *error, const void *memory, size_t size);
110
111 /*
112  * List (Utils)
113  */
114
115 /**
116  * Returns the last item from the given list.
117  */
118 VscMgmtList * /* last_item */
119 vsc_mgmt_list_get_last (VscMgmtList *list);
120
121 /**
122  * Appends the given item to the list.
123  *
124  * Always returns a pointer to the first item in the list, so that this
125  * function can be used for initialization and for appending.
126  */
127 VscMgmtList * /* list */
128 vsc_mgmt_list_append (VscMgmtList *list, VscMgmtList *item);
129
130 /**
131  * Recursively frees the given list.
132  */
133 void
134 vsc_mgmt_list_free (VscMgmtList *list);
135
136 /*
137  * Host (Utils)
138  */
139
140 /**
141  * Recursively frees the given host info list.
142  */
143 void
144 vsc_mgmt_host_info_list_free (VscMgmtHostInfo *host_info_list);
145
146 #endif /* __VSC_MGMT__UTILS_H__ */