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