1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright 2011 Lennart Poettering
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
30 static void dump_changes(UnitFileChange *c, unsigned n) {
35 for (i = 0; i < n; i++) {
36 if (c[i].type == UNIT_FILE_UNLINK)
37 printf("rm '%s'\n", c[i].path);
38 else if (c[i].type == UNIT_FILE_SYMLINK)
39 printf("ln -s '%s' '%s'\n", c[i].source, c[i].path);
43 int main(int argc, char* argv[]) {
48 const char *const files[] = { "avahi-daemon.service", NULL };
49 const char *const files2[] = { "/home/lennart/test.service", NULL };
50 UnitFileChange *changes = NULL;
51 unsigned n_changes = 0;
53 h = hashmap_new(string_hash_func, string_compare_func);
54 r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h);
57 HASHMAP_FOREACH(p, h, i) {
60 s = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(p->path));
62 assert_se(p->state == s);
64 fprintf(stderr, "%s (%s)\n",
66 unit_file_state_to_string(p->state));
69 unit_file_list_free(h);
73 r = unit_file_enable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
78 r = unit_file_enable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
81 dump_changes(changes, n_changes);
82 unit_file_changes_free(changes, n_changes);
84 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_ENABLED);
91 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
94 dump_changes(changes, n_changes);
95 unit_file_changes_free(changes, n_changes);
97 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_DISABLED);
103 r = unit_file_mask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
106 r = unit_file_mask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
109 dump_changes(changes, n_changes);
110 unit_file_changes_free(changes, n_changes);
112 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_MASKED);
118 r = unit_file_unmask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
120 log_error("unmask2");
121 r = unit_file_unmask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
124 dump_changes(changes, n_changes);
125 unit_file_changes_free(changes, n_changes);
127 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_DISABLED);
133 r = unit_file_mask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
136 dump_changes(changes, n_changes);
137 unit_file_changes_free(changes, n_changes);
139 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_MASKED);
141 log_error("disable");
145 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
147 log_error("disable2");
148 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
151 dump_changes(changes, n_changes);
152 unit_file_changes_free(changes, n_changes);
154 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_MASKED);
160 r = unit_file_unmask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
163 dump_changes(changes, n_changes);
164 unit_file_changes_free(changes, n_changes);
166 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_DISABLED);
168 log_error("enable files2");
172 r = unit_file_enable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
175 dump_changes(changes, n_changes);
176 unit_file_changes_free(changes, n_changes);
178 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == UNIT_FILE_ENABLED);
180 log_error("disable files2");
184 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, &changes, &n_changes);
187 dump_changes(changes, n_changes);
188 unit_file_changes_free(changes, n_changes);
190 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == _UNIT_FILE_STATE_INVALID);
192 log_error("link files2");
196 r = unit_file_link(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
199 dump_changes(changes, n_changes);
200 unit_file_changes_free(changes, n_changes);
202 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == UNIT_FILE_LINKED);
204 log_error("disable files2");
208 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, &changes, &n_changes);
211 dump_changes(changes, n_changes);
212 unit_file_changes_free(changes, n_changes);
214 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == _UNIT_FILE_STATE_INVALID);
216 log_error("link files2");
220 r = unit_file_link(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
223 dump_changes(changes, n_changes);
224 unit_file_changes_free(changes, n_changes);
226 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == UNIT_FILE_LINKED);
228 log_error("reenable files2");
232 r = unit_file_reenable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
235 dump_changes(changes, n_changes);
236 unit_file_changes_free(changes, n_changes);
238 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == UNIT_FILE_ENABLED);
240 log_error("disable files2");
244 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, &changes, &n_changes);
247 dump_changes(changes, n_changes);
248 unit_file_changes_free(changes, n_changes);
250 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == _UNIT_FILE_STATE_INVALID);
251 log_error("preset files");
255 r = unit_file_preset(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
258 dump_changes(changes, n_changes);
259 unit_file_changes_free(changes, n_changes);
261 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files[0])) == UNIT_FILE_ENABLED);