1 /* -*- c-basic-offset:2; tab-width:2; indent-tabs-mode:nil -*- */
2 
3 #ifndef __IM_INFO_H__
4 #define __IM_INFO_H__
5 
6 typedef struct im_info {
7   char *id;
8   char *name;
9 
10   u_int num_args;
11 
12   char **args;
13   char **readable_args;
14 
15 } im_info_t;
16 
17 #define IM_INFO_DELETE(info)                      \
18   do {                                            \
19     int i;                                        \
20     if ((info)) {                                 \
21       if ((info)->id) {                           \
22         free((info)->id);                         \
23       }                                           \
24       if ((info)->name) {                         \
25         free((info)->name);                       \
26       }                                           \
27       for (i = 0; i < (info)->num_args; i++) { \
28         if ((info)->args[i]) {                    \
29           free((info)->args[i]);                  \
30         }                                         \
31         if ((info)->readable_args[i]) {           \
32           free((info)->readable_args[i]);         \
33         }                                         \
34       }                                           \
35       if ((info)->args) {                         \
36         free((info)->args);                       \
37       }                                           \
38       if ((info)->readable_args) {                \
39         free((info)->readable_args);              \
40       }                                           \
41       free((info));                               \
42     }                                             \
43   } while (0)
44 
45 #endif
46