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 General Public License as published by
10 the Free Software Foundation; either version 2 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 General Public License for more details.
18 You should have received a copy of the GNU 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);