1 /*
2 * LASH
3 *
4 * Copyright (C) 2002 Robert Ham <rah@bash.sh>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program 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
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20
21 #define _GNU_SOURCE
22
23 #include <lash/lash.h>
24 #include <lash/internal_headers.h>
25
26 #include "jack_mgr_client.h"
27
28 static void
jack_mgr_client_free_patch_list(lash_list_t ** list_ptr)29 jack_mgr_client_free_patch_list(lash_list_t ** list_ptr)
30 {
31 lash_list_t *list;
32 jack_patch_t *patch;
33
34 for (list = *list_ptr; list; list = lash_list_next(list)) {
35 patch = (jack_patch_t *) list->data;
36 if (!patch) {
37 LASH_PRINT_DEBUG("NULL patch!")
38 } else
39 jack_patch_destroy(patch);
40 }
41
42 lash_list_free(*list_ptr);
43
44 *list_ptr = NULL;
45 }
46
47 void
jack_mgr_client_free_patches(jack_mgr_client_t * client)48 jack_mgr_client_free_patches(jack_mgr_client_t * client)
49 {
50 if (!client->patches)
51 return;
52
53 jack_mgr_client_free_patch_list(&client->patches);
54 }
55
56 void
jack_mgr_client_free_backup_patches(jack_mgr_client_t * client)57 jack_mgr_client_free_backup_patches(jack_mgr_client_t * client)
58 {
59 if (!client->backup_patches)
60 return;
61
62 jack_mgr_client_free_patch_list(&client->backup_patches);
63 }
64
65 static void
jack_mgr_client_free_old_patches(jack_mgr_client_t * client)66 jack_mgr_client_free_old_patches(jack_mgr_client_t * client)
67 {
68 jack_mgr_client_free_patch_list(&client->old_patches);
69 }
70
71 void
jack_mgr_client_free(jack_mgr_client_t * client)72 jack_mgr_client_free(jack_mgr_client_t * client)
73 {
74 jack_mgr_client_set_name(client, NULL);
75 jack_mgr_client_free_patches(client);
76 jack_mgr_client_free_old_patches(client);
77 }
78
79 jack_mgr_client_t *
jack_mgr_client_new()80 jack_mgr_client_new()
81 {
82 jack_mgr_client_t *client;
83
84 client = lash_malloc0(sizeof(jack_mgr_client_t));
85 uuid_clear(client->id);
86 return client;
87 }
88
89 void
jack_mgr_client_destroy(jack_mgr_client_t * client)90 jack_mgr_client_destroy(jack_mgr_client_t * client)
91 {
92 jack_mgr_client_free(client);
93 free(client);
94 }
95
96 void
jack_mgr_client_set_id(jack_mgr_client_t * client,uuid_t id)97 jack_mgr_client_set_id(jack_mgr_client_t * client, uuid_t id)
98 {
99 uuid_copy(client->id, id);
100 }
101
102 void
jack_mgr_client_set_name(jack_mgr_client_t * client,const char * name)103 jack_mgr_client_set_name(jack_mgr_client_t * client, const char *name)
104 {
105 set_string_property(client->name, name);
106 }
107
108 lash_list_t *
jack_mgr_client_dup_patches(const jack_mgr_client_t * client)109 jack_mgr_client_dup_patches(const jack_mgr_client_t * client)
110 {
111 lash_list_t *list = NULL, *exlist;
112 jack_patch_t *patch, *expatch;
113
114 for (exlist = client->patches; exlist; exlist = lash_list_next(exlist)) {
115 expatch = (jack_patch_t *) exlist->data;
116
117 patch = jack_patch_dup(expatch);
118 list = lash_list_append(list, patch);
119
120 LASH_DEBUGARGS("duplicated jack patch '%s': '%s'",
121 jack_patch_get_desc(expatch),
122 jack_patch_get_desc(patch));
123 }
124
125 return list;
126 }
127
128 lash_list_t *
jack_mgr_client_get_patches(jack_mgr_client_t * client)129 jack_mgr_client_get_patches(jack_mgr_client_t * client)
130 {
131 return client->patches;
132 }
133
134 const char *
jack_mgr_client_get_name(const jack_mgr_client_t * client)135 jack_mgr_client_get_name(const jack_mgr_client_t * client)
136 {
137 return client->name;
138 }
139
140 void
jack_mgr_client_get_id(const jack_mgr_client_t * client,uuid_t id)141 jack_mgr_client_get_id(const jack_mgr_client_t * client, uuid_t id)
142 {
143 uuid_copy(id, ((jack_mgr_client_t *) client)->id);
144 }
145
146 /* EOF */
147