+
+ assert(m);
+ assert(what);
+ assert(_u);
+
+ /* /proc/swaps and /etc/fstab might refer to this device by
+ * different names (e.g. one by uuid, the other by the kernel
+ * name), we hence need to look for all aliases we are aware
+ * of for this device */
+
+ if (!(e = unit_name_from_path(what, ".device")))
+ return -ENOMEM;
+
+ u = manager_get_unit(m, e);
+ free(e);
+
+ if (u) {
+ Iterator i;
+ const char *d;
+
+ SET_FOREACH(d, u->meta.names, i) {
+ Unit *k;
+
+ if (!(e = unit_name_change_suffix(d, ".swap")))
+ return -ENOMEM;
+
+ k = manager_get_unit(m, e);
+ free(e);
+
+ if (k) {
+ *_u = k;
+ return 0;
+ }
+ }
+ }
+
+ *_u = NULL;
+ return 0;
+}
+
+int swap_add_one(
+ Manager *m,
+ const char *what,
+ int priority,
+ bool noauto,
+ bool handle,
+ bool from_proc_swaps) {
+ Unit *u = NULL;
+ char *e = NULL, *w = NULL;